第一章<Struts2概述>

Struts2概述

1.1.1 Sturts1的介绍

1.       Struts1Struts2的区别

(1).Struts1的缺陷.一、支持的表现层技术单一 (没有做到逻辑视图可以支持更多的视图技术)

                                    因为Struts1出现的年代比较早,那时候没有FreeMarkerVelocity 等技术,因而没有考虑与FreeMarker Velocity等这些视图技术的整合。

                      Struts的高度解耦的设计也是一大优点,控制器没有直接执行转发请求,而仅仅返回一个逻辑视图名-实际的转发放在配置文件中进行管理。

2.       Servlet API 严重耦合,难于测试

HttpServletRequestHttpServletResponse两个参数是Servlet API。严重依赖与web服务器.因此,一旦脱离了web服务器,Action的测试非常困难

3.       代码严重依赖于Struts1 API,属于侵入式设计

Struts1action类必须继承Struts1Action集类,实现处理方法时,有包含Struts 1API:ActoinMappingActoinFormActionForward.这种侵入式设计的最大弱点在于,一旦系统需要重构时,这些Action类将完全没有利用价值,成为一对废品。

1.1.2  WebWork简介

相对于Struts1存在的那些先天性不足而言,WebWork则更加优秀,它采用了一种更加松耦合的设计,让系统的Action不再与Servlet API耦合。使单元测试更加方便,允许系统从B/S结构向C/S结构转换。

       webWork两个核心

l       核心控制器ServletDispatcher,该控制器由WebWork框架提供.

l       业务逻辑控制器Actoin, 控制器有程序员提供

webWork工作过程

当用户向web应用发送请求时,该请求经过ActionContextCleanUp,SiteMesh 等过滤器过滤,有webWork的核心控制器拦截,如果用户请求需要webWork的业务逻辑控制器处理,该控制器则调用Action映射器,该映射器讲用户请求转发到对应的业务逻辑控制器。值得注意的是,此时的业务逻辑控制器并不是开发者实现的控制器,而是webWork创建的控制器代理.

1.1.3

       Struts2框架的大致处理流程如下

1.       浏览器发送请求,例如请求/mypage.action,/reports/myreport.pdf

2.       核心控制器FilerDispatcher 根据决定调用合适的Action.

3.       Struts2的拦截器链自动对请求应用通用功能,例如workflow,validation或文件上传等功能

4.       回调Actionexecute方法,execute方法从获取用户请求参数,然后执行某种数据库操作,即可以将数据保存到数据库,也可以从数据库中检索信息。实际上,因为Action只是一个控制器,它会调用业务逻辑组件来处理用户的请求.

5.       Actionexecute方法处理结果信息将被输出到浏览器中,可以是HTML页面、图像,也可以是PDF文档或者其他文档。此时支持的视图技术非常多,即支持JSP,也支持Velocity,FreeMarker等模板技术.

1.1.4

       Struts2 的配置文件

Struts2文件分两份

l       配置Actionde struts.xml文件

l       配置Struts2全局属性的Struts.properties文件

Struts.xml文件定义了Struts2的系列Action,定义Action,指定该Action的实现类,并定义该Action处理结果与资源之间的映射关系

       :

<struts>

<package name=”default” extend=”struts-default”>

       <action name=”Logon”  class=”lee.logon”>

              <result name=”input” >/pages/Logon.jsp</reslut>

              <result name=”cancel” type=”redirectAction”>Welcome</result>

              <result type=”redirectAction”>MainMenu</result>

              <result name=”expired” type=”chain”>ChangePassword</result>

       </action>

       <action name=”Logoff” class=”lee.Logoff”>

       <result type=”redirectAction”>Welcome</result>

       </action>

</package>

</struts>

 

 

 

 

posted on 2009-10-24 23:10  高比仔  阅读(374)  评论(0)    收藏  举报

导航