为什么采用Struts框架呢?

来源:互联网 发布:淘宝买家秀怎么看 编辑:程序博客网 时间:2024/04/27 23:22
为什么采用Struts框架呢?或者说Struts解决了哪些问题呢?据我粗浅的分析,大抵如下:
  1. 功能映射,即将HTTP请求转换为相应的调用方法。Struts采用统一Servlet的进行控制,然后通过配置文件找到对应的Action。映射关系通过配置文件处理。
  2. 页面映射,将业务处理方法返回的"ActionForward"参数映射到相应的JSP页面(再用标签读取数值)。与“功能映射”的方式类似,一个Action的请求处理方法必须返回“ActionForward”参数,记录了返回页面的名称,同样也是通过配置文件进行映射。
  3. 参数注入,将HTTP请求的参数转换为ActionForm,其中包含了一个类型转换过程和服务器端校验等工作。每个Action的方法都采用固定参数的方式,其中之一就是ActionForm,Struts负责将HTTP请求中的参数进行类型转换并注入到定义的ActionForm中。
  4. 标签库,将数据转换为显示页面,包括回填等功能。个人认为这个是Struts处理最好的工作。唯一的缺憾是其提供的标签库不算完整,缺少常用的如日期、表格等标签,幸好还有别的开源标签库弥补其不足。
  5. 国际化、校验、Tiles等等。


虽然Struts得到广泛的认可和应用,但也存在着一定的问题,我想主要有如下一些:
  1. 非完整的架构,不提供事务控制、资源管理、持久化,因此需要和其他框架进行整合。
  2. 强侵入性,必须继承Action和ActionForm。
  3. 容器依赖,方法参数中有ActionMapping、HttpRequest和Response,导致可测试性不是很好。
  4. 邋遢的配置文件,这是最重要的一点,这个配置文件在大多数的情况下无须存在。让我们看一下典型的配置文件,如下:
 <?xml version="1.0" encoding="UTF-8" ?>

<struts-config>
  <form-beans>
      <!-- 此处省略600行代码 -->
  </form-beans>

   <!-- ========== Global Forward Definitions =================================== -->
  <global-forwards>
    <forward name="success" path="/success.jsp" />
  </global-forwards>

  <!-- ========== Action Mapping Definitions =================================== -->
   <action-mappings>
    <action
      path="/acct/xxxAction"
      type="com.xxx.yyy.acct.XXXAction"
      name="datXXXForm"
      scope="request"
      input="/jsp/acct/Listxxx.jsp"
      parameter="reqCode"
      unknown="false"
      validate="false">
    <action
      path="/yyy/yyyAction"
      type="com.aaa.ttt.yyy.yyyAction"
      name="reportForm"
      scope="request"
      input="/jsp/ttt/yyyStatistic.jsp"
      parameter="reqCode"
      unknown="false"
      validate="false">
      <forward
        name="showViewer"
        path="/jsp/ttt/YyyyViewer.jsp"
        redirect="false" />
    </action>
  
    <!-- 此处省略5000行代码 -->
  </action-mappings>
</struts-config>
   我想这段配置文件做过Struts应用的同道都很熟悉,仔细观察一些,是不是大多雷同呢?是不是很有规律呢?
5. 业务逻辑和页面逻辑混合处理,导致Action比较混乱。
6. 对异常不能集中处理并合理的控制,在每次处理业务逻辑之后都要进行异常相关处理。
原创粉丝点击