讨论:框架这样用?

本文针对一个使用Struts框架的项目存在的问题进行了分析,包括表示层的混乱组织方式、控制层中ACTION数量过少导致的复杂性和维护困难等问题。提出了通过增加ACTION数量、改进JSP命名等方法来改善系统的建议。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

         现在接手的项目是个别人已经搭好了架子的东东,在后来一段时间的开发过程中,我发现这个系统有一些缺点,总结了一下:

一、表示层

1、第一次看到,把同名的jsp放在不同的目录下,用目录名来区分。

2、同名的jsp往往主要内容相同,只是form要提交到的action不同。

二、控制层(逻辑处理层)

1、本项目大约有20个jsp页面,只用了5个ACTION,每个页面指向某个ACTION的某个处理方法:

      比方说:jsp1的form这样写:

  1. <html:form action="/netinfo.dox"  method="post" focus="domain" styleClass="form" >  
  2. <input type="hidden" name="method" value="save"/>  

有一个隐藏变量method来标示要由netinfo的save方法来处理,那看一下struts-config.xml里是怎么写的:

struts-config.xml 代码
  1. <form-beans>  
  2.       <form-bean name="NetinfoForm"  
  3.                  type="org.apache.struts.validator.LazyValidatorForm" />
  4. .....  
  5. form-beans>  
  6.   
  7. <action-mappings>  
  8.       <action path="/netinfo" name="NetinfoForm" parameter="method"  
  9.               scope="request" validate="false">  
  10.             <forward name="list" path="/pages/netinfoManager.jsp" />  
  11.             <forward name="view" path="/pages/netinfoView.jsp" />  
  12.             <forward name="regester" path="/pages/registerNetinfo.jsp" />  
  13.             <forward name="edit" path="/pages/Manager/registerNetinfo.jsp" />  
  14.             <forward name="password" path="/pages/getBackPwd.jsp" />  
  15.             <forward name="success" path="/netinfo.dox?method=manager" />  
  16.       action>
  17. .......
  18. <action-mappings> 
  19.   

这就会出现一个潜在的问题:netinfoAction类中不同的处理函数会随着业务的不断细化而迅速增加,不说代码量大,无法迅速定位到要修改的函数处(那时用搜索都慢),单说各个函数之间相互跳转并最终返回到指定页面:函数之间怎么能跳转?看上面的代码:Action返回success时,就会定位到manager方法继续执行,manager 方法还有可能再定位到这个类的其他方法继续执行,最后,很难控制我最初的方法返回的页面究竟是哪个,并且要考虑到另一个页面调用同类的manager方法时,是立即返回一个页面还是要推给另一个方法来定位最终页面。当业务多了,这个问题相当突出,而大量的精力将用在如何正确定位返回页面了。

2、使用了LazyValidatorForm,所有的form都使用这一个东东,直接将数据映射到hibernate持久化对象去了, 但这样的映射不能变通,只能在将要映射前把数据的格式转化一下,再做映射,无疑又增加了几百行代码。

3、由于页面中有URL或连接,每个连接要调用一个ACTION的处理函数,就得写成这样.../neitinfo.dox?method=方法名,这种连接返回的页面往往和form提交到的ACTION方法有不一样的返回页面,甚至还要返回到本页面,前面说过,本页面和另一个页面同名并且也有相同的连接,这就出现问题了,当这些页面的连接都要调用一个处理类的同一个方法时,就不得不使用flag之类的东西来标示是哪个页面来的请求,要回到哪个页面去。。地狱。。

虽然可以在函数中写上下面的文字来解决返回的问题,但还是感觉乱乱的,不舒服:

jsp代码
  1. <html:hidden property="source" value=""   
java 代码
  1. //返回本页   
  2. return new ActionForward(request.getParameter("sourcepage"));    

对于这些问题,不知道应不应该换一种组织形式,重新架构。

仔细考虑了一下,结合朋友们的意见,我最终决定把ACTION的数目加上来,这样每个ACTION的函数就可以少一点,不至于那么乱,还有,关于JSP的名称,我决定要改,两个文件同名,在IDE中同时打开这两个文件,将不知道正在修改的页面是哪个,容易产生错误。

好像,增加ACTION的个数就可以解决以上大部分问题了。

希望大家说说自己的意见。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值