看Struts2技术内幕,对于书中提出的问题,参考其他前辈的文章所写

1.Struts2和Struts1.x有什么区别?

Struts1.x的核心控制器是ActionServlet。

Struts1.x组成部分是Action、ActionForm、ActionForward。ActionForm必须实现ActionForm的基类。

Struts1.x工作流程:

由ActionForm和JavaBean组成,其中ActionForm用来封装用户的请求参数,封装成ActionForm对象,该对象被ActionServlet转发给Action,Action通过ActionForm里的

请求参数处理用户请求。

当ActionServlet接收到一个客户请求时,将执行如下流程:
(1) 检索和用户请求匹配的ActionMapping实例,如果不存在,就返回用户请求路径无效的信息。
(2) 如果ActionForm实例不存在,就创建一个ActionForm对象,把客户提交的表单数据保存到ActionForm对象中。
(3) 根据配置信息决定是否需要表单验证。如果需要验证,就调用ActionForm的validate()方法。
(4) 如果ActionForm的validate()方法返回null返回一个不包含ActionMessage的ActionErrors对象,就表示表单验证成功。
(5) ActionServlet根据ActionMapping实例包含的映射信息决定将请求转发给哪个Action。如果相应的Action实例不存在,就先创建这个实例,然后调用Action的execute()方法。
(6) Action的execute()方法返回一个ActionForward对象,ActionServlet再把客户请求转发给ActionForward对象指向的JSP组件。
(7) ActionForward对象指向的JSP组件生成动态网页,返回给客户。 

Struts2的核心控制器是FilterDispatcher。

Struts2提供了提供了系列拦截器,该系列拦截器负责将HttpServletRequest请求中的请求参数解析出来,传入到Action中,并回调Action的execute方法来处理用户请求。显然,上面的处理过程是典型的AOP(面向切面编程)处理方式

Struts2的工作流程:

核心控制器FilterDispatcher是struts2的基础,包含了框架内部的控制流程和处理机制。业务控制器Action和业务处理逻辑需要用户自己实现。此外,还需要写配置文件供核心控制器使用。

具体流程:客户端提交一个httpServletRequest请求,请求被提供到一系列的过滤器(如:ActionContextCleanUp、 其他过滤器SiteMesh、FilterDispatcher等)中。具体ActionContextCleanUp的作用(ActionContextCleanUp的作用),注意这里是有顺序的,先ActionContextCleanUp,再SiteMesh、最后FilterDispatcher。FilterDispatcher是Struts2的核心。FilterDispatcher询问ActionMepper是否调用某个Action来处理这个HttpServletRequest请求,如果Actionmepper决定调用,FilterDispatcher则将请求处理交给ActionProxy。ActionProxy通过配置文件(struts.xml)找到相应的Action。ActionProxy创建一个ActionInvocation类,同时ActionInvocation通过调用模式调用Action,在此之前还会根据配置加载Action相关的Interceptor(拦截器).

具体区别 参考Struts1.x和Struts2区别文章


2.Struts2的两条逻辑主线?

1. Struts2初始化:init执行方法驱动

只在web应用启动时执行一次,init方法执行失败会导致整个web应用初始化失败。

主要内容:

1).框架元素的初始化工作,这一初始化工作包含了很多框架内置对象的创建和缓存。

2).控制框架运行的必要条件

这条主线贯穿struts2对其内置对象的创建和缓存的过程,将struts2身为一个框架的运行环境完整的构建出来。这条主线的运行,也为之后http请求主线的运行提供了必备的

环境需求


2.Struts2处理Http请求:doFilter方法执行驱动

本主线包含了Struts2处理http请求,进行必要的数据处理和处理数据返回的全过程,如果请求满足web.xml中的配置的url-parttern将会发生,并且有doFilter方法执行。

Struts2对http请求的处理包含两个阶段

1).http请求的预处理,这个阶段程序依赖于web容器,请时时刻刻于容器打交道。针对每个http请求进行预处理,准备必要的数据环境。

2).xwork执行业务逻辑,将http请求中的数据封装成java对象,并由xwork负责执行所有具体的业务逻辑,程序在这个阶段不依赖于web容器,完全由xwork框架执行。


3.Struts2中的配置元素可以分为哪两大类?

1.容器配置元素

2.关系映射元素


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章