第一章<Struts2概述>
Struts2概述
1. Struts1和Struts2的区别
(1).Struts1的缺陷.一、支持的表现层技术单一 (没有做到逻辑视图可以支持更多的视图技术)
因为Struts1出现的年代比较早,那时候没有FreeMarker、Velocity 等技术,因而没有考虑与FreeMarker 、Velocity等这些视图技术的整合。
但Struts的高度解耦的设计也是一大优点,控制器没有直接执行转发请求,而仅仅返回一个逻辑视图名-实际的转发放在配置文件中进行管理。
2. 与Servlet API 严重耦合,难于测试
HttpServletRequest和HttpServletResponse两个参数是Servlet API。严重依赖与web服务器.因此,一旦脱离了web服务器,Action的测试非常困难
3. 代码严重依赖于Struts1 API,属于侵入式设计
Struts1的action类必须继承Struts1的Action集类,实现处理方法时,有包含Struts 1API:如ActoinMapping、ActoinForm和ActionForward类.这种侵入式设计的最大弱点在于,一旦系统需要重构时,这些Action类将完全没有利用价值,成为一对废品。
相对于Struts1存在的那些先天性不足而言,WebWork则更加优秀,它采用了一种更加松耦合的设计,让系统的Action不再与Servlet API耦合。使单元测试更加方便,允许系统从B/S结构向C/S结构转换。
webWork两个核心
l 核心控制器ServletDispatcher,该控制器由WebWork框架提供.
l 业务逻辑控制器Actoin,改 控制器有程序员提供
webWork工作过程
当用户向web应用发送请求时,该请求经过ActionContextCleanUp,SiteMesh 等过滤器过滤,有webWork的核心控制器拦截,如果用户请求需要webWork的业务逻辑控制器处理,该控制器则调用Action映射器,该映射器讲用户请求转发到对应的业务逻辑控制器。值得注意的是,此时的业务逻辑控制器并不是开发者实现的控制器,而是webWork创建的控制器代理.
Struts2框架的大致处理流程如下
1. 浏览器发送请求,例如请求/mypage.action,/reports/myreport.pdf等
2. 核心控制器FilerDispatcher 根据决定调用合适的Action.
3. Struts2的拦截器链自动对请求应用通用功能,例如workflow,validation或文件上传等功能
4. 回调Action的execute方法,该execute方法从获取用户请求参数,然后执行某种数据库操作,即可以将数据保存到数据库,也可以从数据库中检索信息。实际上,因为Action只是一个控制器,它会调用业务逻辑组件来处理用户的请求.
5. Action的execute方法处理结果信息将被输出到浏览器中,可以是HTML页面、图像,也可以是PDF文档或者其他文档。此时支持的视图技术非常多,即支持JSP,也支持Velocity,FreeMarker等模板技术.
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>
浙公网安备 33010602011771号