1,Struts1 工作流程:

web.xml:

 
  
  1. <servlet> 
  2.     <servlet-name>action</servlet-name> 
  3.     <servlet-class>org.apache.struts.action.ActionServlet</servlet-class> 
  4. </servlet> 
  5. <servlet-mapping> 
  6.     <servlet-name>action</servlet-name> 
  7.     <url-pattern>*.do</url-pattern> 
  8. </servlet-mapping> 

在web应用启动时就会加载初始化ActionServlet,ActionServlet从
struts-config.xml文件中读取配置信息,把它们存放到各种配置对象
当ActionServlet接收到一个客户请求时,将执行如下流程.
-(1)检索和用户请求匹配的ActionMapping实例,如果不存在,就返回请求路径无效信息;
-(2)如果ActionForm实例不存在,就创建一个ActionForm对象,把客户提交的表单数据保存到ActionForm对象中;
-(3)根据配置信息决定是否需要表单验证.如果需要验证,就调用ActionForm的validate()方法;
-(4)如果ActionForm的validate()方法返回null或返回一个不包含ActionMessage的ActuibErrors对象, 就表示表单验证成功;
-(5)ActionServlet根据ActionMapping所包含的映射信息决定将请求转发给哪个Action,如果相应的 Action实例不存在,就先创建这个实例,然后调用Action的execute()方法;
-(6)Action的execute()方法返回一个ActionForward对象,ActionServlet在把客户请求转发给 ActionForward对象指向的JSP组件;
-(7)ActionForward对象指向JSP组件生成动态网页,返回给客户;

2,Struts2的工作机制

web.xml

 
  
  1. <filter>     
  2.     <filter-name>struts2</filter-name>     
  3.     <filter-class>     
  4.     org.apache.struts2.dispatcher.FilterDispatcher      
  5.     </filter-class>     
  6. </filter>     
  7. <filter-mapping>     
  8.     <filter-name>struts2</filter-name>     
  9.     <url-pattern>/*</url-pattern>     
  10. </filter-mapping>   

1、客户端初始化一个指向Servlet容器(例如Tomcat)的请求;
2、这个请求经过一系列的过滤器(Filter)(这些过滤器中有一个叫做ActionContextCleanUp的可选过滤器,这个过滤器对于Struts2和其他框架的集成很有帮助,例如:SiteMesh Plugin);
3、接着FilterDispatcher被调用,FilterDispatcher询问ActionMapper来决定这个请求是否需要调用某个Action;
4、如果ActionMapper决定需要调用某个Action,FilterDispatcher把请求的处理交给ActionProxy;
5、ActionProxy通过Configuration Manager询问框架的配置文件,找到需要调用的Action类;
6、ActionProxy创建一个ActionInvocation的实例。
7、ActionInvocation实例使用命名模式来调用,在调用Action的过程前后,涉及到相关拦截器(Intercepter)的调用。
8、一旦Action执行完毕,ActionInvocation负责根据struts.xml中的配置找到对应的返回结果。返回结果通常是(但不总是,也可能是另外的一个Action链)一个需要被表示的JSP或者FreeMarker的模版。在表示的过程中可以使用Struts2 框架中继承的标签。在这个过程中需要涉及到ActionMapper。

包名 说明
org.apache.struts2.components 该包封装视图组件,Struts2在视图组件上有了很大加强,不仅增加了组件的属性个数,更新增了几个非常有用的组件,如updownselect、doubleselect、datetimepicker、token、tree等。
org.apache.struts2.config 该包定义与配置相关的接口和类。实际上,工程中的xml和properties文件的读取和解析都是由WebWork完成的,Struts只做了少量的工作。
org.apache.struts2.dispatcher Struts2的核心包,最重要的类都放在该包中。
org.apache.struts2.impl 该包只定义了3个类,他们是StrutsActionProxy、StrutsActionProxyFactory、StrutsObjectFactory,这三个类都是对xwork的扩展。
org.apache.struts2.interceptor 定义内置的截拦器。
org.apache.struts2.util 实用包。
org.apache.struts2.validators 只定义了一个类:DWRValidator。
org.apache.struts2.views 提供freemarker、jsp、velocity等不同类型的页面呈现。

3,Spring工作机制  

web.xml

 
  
  1. <web-app> 
  2.     <servlet> 
  3.         <servlet-name>Dispatcher</servlet-name> 
  4.         <servlet-class> 
  5.             org.springframework.web.servlet.DispatcherServlet  
  6.         </servlet-class> 
  7.         <init-param> 
  8.             <param-name>contextConfigLocation</param-name> 
  9.             <param-value>/WEB-INF/applicationContext.xml</param-value> 
  10.         </init-param> 
  11.         <load-on-startup>1</load-on-startup> 
  12.     </servlet> 
  13.     <servlet-mapping> 
  14.         <servlet-name>Dispatcher</servlet-name> 
  15.         <url-pattern>*.do</url-pattern> 
  16.     </servlet-mapping> 
  17. </web-app>  

1.spring mvc请所有的请求都提交给DispatcherServlet,它会委托应用系统的其他模块负责负责对请求进行真正的处理工作。
2.DispatcherServlet查询一个或多个HandlerMapping,找到处理请求的Controller.
3.DispatcherServlet请请求提交到目标Controller
4.Controller进行业务逻辑处理后,会返回一个ModelAndView
5.Dispathcher查询一个或多个ViewResolver视图解析器,找到ModelAndView对象指定的视图对象
6.视图对象负责渲染返回给客户端。

本文章根据网上文章整理而得。