Strut2的运行流程和拦截器栈

来源:互联网 发布:ios数据安全 编辑:程序博客网 时间:2024/06/05 21:01

  前边讲过了Struts2框架如何实现国际化的内容,就是通过配置国际化资源文件在src下而在Action中通过实现Textprovider接口的getText()方法来获取资源文件中key对应的value值而在JSP页面上通过Struts2标签的key属性(非simple主题)或者<s:text name=""/>(simple主题下)来获取资源文件中key对应的value值。下边我们来讲一讲面试Struts2中必考到也是对理解使用Struts2极其重要的一个知识点--即Struts2的运行流程。

  运行流程简单来说我们将其描述成一个Action请求从发起到响应页面中Struts2框架做的事情

  1. Struts2的拦截器栈

  ①.  当我们发起一个Struts2的AXction请求时,Struts2框架会将这个请求交给在web.xml文件中配置的过滤器StrutsPrepareAndExecuteFilter,这个过滤器会询问相应的ActionMapping当前请求是不是在web.xml中配置的满足条件的Struts2的请求。

  ②.  若这个请求在经过ActionMapping判定之后就是Struts2的请求,那么StrutsPrepareAndExecuteFilter会将这个请求交给ActionProxy来处理。

  ③.  StrutsActionProxy会根据ConfigurationManager询问框架的Struts.xml配置文件,找到这个请求对应的Action类和及action方法。

  ④.  StutsActionProxy会创建一个DefaultActionInvokation对象,这个对象会调用在struts.xml文件中配置的指定的拦截器栈中的拦截器,并按照拦截器的顺序去调用。主要是在ActionInvocation的对象中遍历拦截器栈的拦截器,然后调用拦截器的interceptor()方法实现一系列的拦截器功能,在interceptor()方法的最后调用传入的DefaultActionInvokation对象的invoke方法返回到ActionInvocation对象。如此反复,将拦截器栈中配置的拦截器一步一步走完,从而实现一个个的功能。由此可以知道,Struts2框架时通过一系列的拦截器完成主要功能的

  ⑤.  在调用完响应的拦截器之后,就会走到action请求对应的action方法中。

  ⑥.  方法执行完,我们会根据在struts.xml中配置的result节点找到相应的响应结果页面。

  ⑦.  最后再执行每个拦截器中invocation.invoke()之后的代码。

  ⑧.  将结果返回到客户端。

  2. Struts2的拦截器栈

  我们已知的拦截器栈主要有两个,一是defaultstack,另一个是paramsPrepareParamsStack拦截器栈。

  ①  defaultstack

  这个拦截器栈中,按照我们已知的拦截器,他们打大致执行顺序是:exception-i18n-modeldriven-params-debugging

  ②  paramsPrepareParamsStack

  针对于这个拦截器栈的名称我们可以清楚的看到使用了两次的params参数拦截器用于将请求参数赋值给值栈栈顶的对象。按照已知的拦截器他们在这个paramsPrepareParamsStack拦截器栈中的执行顺序是:exception-params-prepare-modeldriven-params-debugging

原创粉丝点击