美丽涵涵童装店--说我博客名字,给你们打折!
随笔 - 82  文章 - 266  trackbacks - 0
<2009年6月>
31123456
78910111213
14151617181920
21222324252627
2829301234
567891011


点击这里给杨爱友发消息
美丽涵涵童装店
说我博客名字,给你们打折!

常用链接

留言簿(6)

随笔分类

随笔档案

文章档案

好友的BLOG

搜索

  •  

最新评论

阅读排行榜

评论排行榜

 

1.       struts原理

Struts中的控制层功能:

1、 接受客户端请求

2、 调用M层模型组件执行相应的业务逻辑。

3、 获取M层业务逻辑的处理结果

4、 根据处理结果选择合适的视图呈现给客户端。

Contrler层核心控制组件是:ActionServlet,继承javax.Servlet.Http.HttpServlet,并实现了init(),doGet()、doPost()、destroy()等Servlet生命周期所用到的方法。还添加了一个process(),它本身不复杂,但它会调用其他的复杂方法。

    该框架以 ActionServlet作为核心控制器,整个应用由客户端请求驱动。当客户端向Web应用发送请求时,请求将被Struts 1的核心控制器 ActionServlet 拦截,ActionServlet根据请求决定是否需要调用业务逻辑控制器处理用户请求,若需要,ActionServlet将该请求发送给对应的业务逻辑控制器,业务逻辑控制器调用模型来处理用户请求,当处理完成后,其处理结果通过jsp呈现给用户。

ActionServlet接收到来自Servlet容器的客户请求时,具体处理步骤:

1、根据浏览器是post还是get请求调用doPost()、doGet()方法,在其中调用ActionServlet的process()方法。

2、Process()获取RequestProcessor对象,调用RequestProcessor对象的process()方法

3、Process()读取struts-config.xml,在其中查找<action>子元素,查找的条件是:用户请求的URI与action元素的path属性值一样,找到后确定name属性,根据name找到<form-bean>元素,再根据action元素的name匹配值找到相应的ActionForm bean。

4、 调用ActionForm bean的setter方法填充FormBean的属性,然后调用FormBean的validate()方法,对表单数据的有效性进行验证。

5、 RequestProcessor的process()方法根据3中找到的<action>中的type属性寻找Action bean对象(有则使用,无则创建),然后将FormBean对象,封装的请求对象等信息发给找到的Action对象,Action bean调用自己的execute()方法处理。

6、Action bean的execute()方法执行完璧后,返回一个ActionForward对象,又回到RequestProcessor对象的process()方法,process方法将根据ActionForward请求重新定向到指定的页面。

2.       Struts1的不足

(1)支持的表现技术单一。只支持jsp。

(2)与Servlet API 严重耦合,难于测试。在Struts1的逻辑控制器内充满了大量的servlet API,尤其是HttpServletRequest 和 HttpServletResponse 这两个参数,需要通过web容器来实例化,非常难于测试。

(3)代码严重依赖Servlet API,属于代码入侵式设计。在处理方法中,包含大量的Struts 1 API,如: ActionMapping、ActionForm、ActionForward等,一旦系统重构,离开struts1时,这些代码将毫无用处。

3.       webwork简介

它主要包括两部:核心控制器ServletDispatcher,由框架提供;业务逻辑控制器,由程序员控制。与struts1相比,他完全从于servlet分离,更容易测试。处理流程:当用户向web应用发送一个请求时,该请求经过webwork过滤器过滤,由核心控制器拦截,若请求需要webwork的业务逻辑控制器处理,该控制器则调用Action映射器,该映射器将用户请求转发到对应的业务逻辑控制器。主要,这里的业务逻辑控制器并不是开发者实现的控制器,而是webwork创建的控制器代理。

在创建控制器代理时,webwork需要得到开发者定义的xwork.xml配置文件,控制器代理以用户实现的控制器为目标,以拦截器链中的拦截器作为处理。

当开发者自己的控制器处理完请求后,返回的只是普通的字符串,该字符串对应到指定的视图资源。指定的视图资源经过拦截器链的处理后,生成对客户端的相应输出。

它的优势:

1)      Action没有与Servlet API 耦合,易于测试;

2)      )Action无需与WebWork耦合,代码重用率高;

3)      支持更多的表现层技术,有更好的适应性。

4.struts2简介

从总体上讲,struts2是以webwork思想为核心,同样适用拦截器做为处理,以用户的业务逻辑控制器做为目标,创建一个控制器代理。控制器代理负责处理用户请求,处理请求时调用业务逻辑控制器的execute方法。具体处理流程如下:

(1)浏览器发送请求。

(2)核心控制器FilterDispatcher根据请求决定调用合适的Action。

(3)webwork的拦截器链自动对请求应用通用功能。

(4)回调业务逻辑控制器Action的execute方法,该方法先获取用户请求参数,然后调用模型层进行数据处理。

(5)处理完后返回浏览器。

5.struts1和strut2对比

(1)在实现类方面的对比:struts1继承action累,struts2可以实现一个接口。

(2)线程模式方面对比:struts1是单例模式,要特别注意线程安全;struts2每一个请求都产生一个实例,不存在线程安全问题。

(3)servlet依赖程度对比:struts1的Action依赖于servlet API,struts2与servlet完全分离,更易测试。

(4)封装请求参数的对比:struts1必须使用一个actionForm来封装请求参数;struts2直接使用Action属性来封装用户请求参数。

6.开发流程:

1.       创建web应用。

2.       增加struts2功能。

1) 在web.xml中配置struts2核心Filter;

2) 将相关jar包复制到web-info/lib下;

3) 在web.xml/classes下增加struts.xml配置文件。

3.       实现控制器类。

控制器类是一个包含execute方法的pojo类,其属性与jsp表单属性对应。

struts2的拦截机制负责解析用户请求中的参数,并将这些参数赋值给Action的属性。

4.       配置Action。

将业务逻辑控制器Action配置到struts.xml中,该配置文件还定义了处理

结果与视图资源的映射关系。

5.       增加视图资源,如error.jsp、welcome.jsp等。

posted on 2009-06-09 17:15 杨爱友 阅读(250) 评论(0)  编辑  收藏 所属分类: java相关技术

只有注册用户登录后才能发表评论。


网站导航:
 
美丽涵涵童装店
亲,说我博客名字,给你们打折!