首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 其他教程 > 开源软件 >

Struts2核心工作原了解析

2012-08-19 
Struts2核心工作原理解析这篇文章对应的并非Struts2的最新版本,但其原理还是相同的。?这是Struts2官方站点

Struts2核心工作原理解析

这篇文章对应的并非Struts2的最新版本,但其原理还是相同的。

?

这是Struts2官方站点提供的Struts 2 的整体结构。

Struts2核心工作原了解析

  一个请求在Struts2框架中的处理大概分为以下几个步骤:
客户端提起一个(HttpServletRequest)请求,如上文在浏览器中输入”http://localhost:8080/TestMvc/add.action”就是提起一个(HttpServletRequest)请求。
请求被提交到一系列(主要是三层)的过滤器(Filter),如(ActionContextCleanUp、其他过滤器(SiteMesh等)、 FilterDispatcher)。注意这里是有顺序的,先ActionContextCleanUp,再其他过滤器(SiteMesh等)、最后到FilterDispatcher。
FilterDispatcher是控制器的核心,就是mvc中c控制层的核心。下面粗略的分析下我理解的FilterDispatcher工作流程和原理:FilterDispatcher进行初始化并启用核心doFilter

其代码如下:

?

?如果提交请求的是add.action,那么找到的Action类就是edisundong.AddAction。
ActionProxy创建一个ActionInvocation的实例,同时ActionInvocation通过代理模式调用Action。但在调用之前ActionInvocation会根据配置加载Action相关的所有Interceptor。(Interceptor是struts2另一个核心级的概念)

下面我们来看看ActionInvocation是如何工作的:

ActionInvocation 是Xworks 中Action 调度的核心。而对Interceptor 的调度,也正是由ActionInvocation负责。ActionInvocation 是一个接口, 而DefaultActionInvocation 则是Webwork 对ActionInvocation的默认实现。

Interceptor 的调度流程大致如下:
1. ActionInvocation初始化时,根据配置,加载Action相关的所有Interceptor。
2. 通过ActionInvocation.invoke方法调用Action实现时,执行Interceptor。

Interceptor将很多功能从我们的Action中独立出来,大量减少了我们Action的代码,独立出来的行为具有很好的重用性。XWork、WebWork的许多功能都是有Interceptor实现,可以在配置文件中组装Action用到的Interceptor,它会按照你指定的顺序,在Action执行前后运行。
那么什么是拦截器。
拦截器就是AOP(Aspect-Oriented Programming)的一种实现。(AOP是指用于在某个方法或字段被访问之前,进行拦截然后在之前或之后加入某些操作。)
拦截器的例子这里就不展开了。
struts-default.xml文件摘取的内容:

?一旦Action执行完毕,ActionInvocation负责根据struts.xml中的配置找到对应的返回结果。如上文中将结构返回“add.jsp”,但大部分时候都是返回另外一个action,那么流程又得走一遍………

?

?

一些默认拦截器的简单说明;有兴趣可以看下源代码,源码就不贴了。

拦截器名字说明Alias Interceptoralias在不同请求之间将请求参数在不同名字件转换,请求内容不变Chaining Interceptorchain 让前一个Action的属性可以被后一个Action访问,现在和chain类型的result(<result type=”chain”>)结合使用。 Checkbox Interceptor checkbox添加了checkbox自动处理代码,将没有选中的checkbox的内容设定为false,而html默认情况下不提交没有选中的checkbox。Cookies Interceptorcookies使用配置的name,value来是指cookiesConversion Error InterceptorconversionError将错误从ActionContext中添加到Action的属性字段中。Create Session Interceptor createSession自动的创建HttpSession,用来为需要使用到HttpSession的拦截器服务。Debugging Interceptordebugging 提供不同的调试用的页面来展现内部的数据状况。Execute and Wait InterceptorexecAndWait在后台执行Action,同时将用户带到一个中间的等待页面。Exception Interceptor exception 将异常定位到一个画面File Upload InterceptorfileUpload 提供文件上传功能I18n Interceptori18n记录用户选择的localeLogger Interceptorlogger输出Action的名字 Message Store Interceptorstore存储或者访问实现ValidationAware接口的Action类出现的消息,错误,字段错误等。Model Driven Interceptormodel-driven如果一个类实现了ModelDriven,将getModel得到的结果放在Value Stack中。Scoped Model Driven scoped-model-driven如果一个Action实现了ScopedModelDriven,则这个拦截器会从相应的Scope中取出model调用Action的setModel方法将其放入Action内部。Parameters Interceptorparams 将请求中的参数设置到Action中去。 Prepare Interceptorprepare如果Acton实现了Preparable,则该拦截器调用Action类的prepare方法。Scope Interceptorscope将Action状态存入session和application的简单方法。Servlet Config InterceptorservletConfig提供访问HttpServletRequest和HttpServletResponse的方法,以Map的方式访问。Static Parameters InterceptorstaticParams从struts.xml文件中将<action>中的<param>中的内容设置到对应的Action中。Roles Interceptorroles确定用户是否具有JAAS指定的Role,否则不予执行。Timer Interceptortimer输出Action执行的时间Token Interceptor token通过Token来避免双击Token Session InterceptortokenSession和Token Interceptor一样,不过双击的时候把请求的数据存储在Session中 Validation Interceptorvalidation使用action-validation.xml文件中定义的内容校验提交的数据。Workflow Interceptorworkflow调用Action的validate方法,一旦有错误返回,重新定位到INPUT画面Parameter Filter InterceptorN/A 从参数列表中删除不必要的参数 Profiling Interceptorprofiling 通过参数激活profi

热点排行