澳门新葡萄京官网首页 2

Struts学习(1)—–Struts的工作流程

一、Struts2的处理流程:

在学习struts之前,本人使用的是jsp+servlet进行WEB应用的开发,随着应用功能的扩大,使用jsp+servlet开发的不便就显示了出来,servlet的存在虽然可以帮助用户解决大部分问题,但是由于它们的编码对项目的开发带来了许多的不方便,可重用性也差,所以struts应运而生,帮助用户在最短的时间内解决这些问题。Struts框架提供如下服务:

  •  客户端产生一个HttpServletRequest的请求,该请求被提交到一系列的标准过滤器(Filter)组建链中(如ActionContextCleanUp:它主要是清理当前线程的ActionContext、Dispatcher,FilterDispatcher主要是通过ActionMapper来决定需要调用那个Action,FilterDispatcher是控制器的核心,也是MVC中控制层的核心组建)。
  • 核心控制器组建FilterDispatcher根据ActionMapper中的设置获得是否需要调用某个Action组建来处理这个HttpServletRequest请求,如果ActionMapper决定调用某个Action组建,FilterDispatcher核心控制器组建就会把请求的处理权委托给ActionProxy组建
  • ActionProxy组建通过Configuration
    Manager组建获得Struts2框架的配置文件struts.xml,最后找到需要调用的目标Action组建类,然后ActionProxy组建就创建出一个实现了命令模式的ActionInvocation类的对象实例类的对象实例(这个过程包括调用Anction组建本身之前调用多个的拦截器组建的before()方法 )同时ActionInvocation组建通过代理模式调用目标Action组建。但是在调用之前ActionInvocation组建会根据配置文件中的设置项目加载与目标Action组建相关的所有拦截器组建(Interceptor)。
  • 一旦Action组建执行完毕,ActionInvocation组建将根据开发人员在Struts2.xml配置文件中定义的各个配置项目获得对象的返回结果–为这个Action组建的结果码(一个像SUCCESS,INPUT)然后根据该返回的结果调用目标JSP页面以实现显示输出。
  • 最后各个拦截器组建会被再次执行(但是顺序和开始时相反,并调用after()方法),然后请求最终被返回给系统的部署文件中配置的其他过滤器,如果已经设置了ActionContextCleanUp过滤器,那么FilterDispatcher就不会清理在ThreadLocal对象中保存的ActionContext信息。如果没有设置ActionContextCleanUp过滤器,FilterDispatcher就会清除掉所有的ThreadLocal对象。

(1)作为控制器的Servlet。

更加清晰的来说就是:

澳门新葡萄京官网首页,(2)提供大量的标签库。

1.客户端初始化一个指向servlet容器的请求。

(3)提供了用于国际化的框架,利用不同的配置文件,可以帮助用户选择合适自己的语言。

2.请求经过一系列的过滤器(ActionContextCleanUp、SiteMesh)

(4)提供了JDBC的实现,来定义数据源和数据库连接池。

3.FilterDispatcher被调用,并询问ActionMapper来决定这个请求是否需要调用某个Action

(5)XML语法分析工具。

4.ActionMapper决定要调用那一个Action,FilterDispatcher把请求交给ActionProxy。

(6)文件下载机制。

  1. ActionProxy通过Configurate
    Manager询问Struts配置文件,找到要调用的Action类

  2. ActionProxy创建一个ActionInvocation实例

  3. ActionInvocation实例使用命令模式来调用,回调Action的exeute方法

首先,我想总结下struts的工作流程。

8.
一旦Action执行完毕,ActionInvocation负责根据Struts.xml的配置返回结果。

澳门新葡萄京官网首页 1

二、比较重要的类的介绍:

struts的框架结构图

ActionMapper其实是HttpServletRequest和Action调用请求的一个映射,他屏蔽了Action对于Request等Java
servlet类的依赖。Struts2中它的默认实现类是DefaultAtionMapper,ActionMapper很大的用处可以根据自己的需要来设计url格式,它自己也有Restful的具体实现。

刚开始看这张图一定是很懵逼的,不过在打了一个简单的拦截器例子后我再回头看已经有点
清晰了。

ActionProxy和ActionInvocation:

1,、客户端发送一个HttpServletRequest请求,如在浏览器中输入
   是提交一个(HttpServletRequest)请求。

Action的一个代理,由ActionProxyFactory创建,它本身不包括Action实例,默认实现DefaultActionProxy是由ActionInvocation持有Action实例。ActionProxy作用是如何取得Action,无论是本地还是远程。而ActionInvocation的作用是如何执行Action,拦截器的功能就是咱ActionInvocation中实现的。

2、这个请求经过一系列的过滤器(filter),如(ActionContextCleanUp、其他过滤器(SiteMesh等)、FilterDispatcher)。注意:这里是有顺序的,先ActionContext
CleanUp,再其他过滤器(Othter
Filters、SiteMesh等),最后到FilterDispatcher。

ConfigurateProvider和Configuration

3、FilterDispatcher询问ActionMapper是否需要调用某个Action来处理这个(HttpServlet
Request)请求,如果ActionMapper决定需要调用某个Action,FilterDispatcher则把请求的处理交给ActionProxy

ConfigurationProvider就是Struts2中配置文件的解析器,Struts2中的配置文件主要是实现XmlConfigurationProvider及其子类StrutsXmlConfigurationProvider来解析。

4、ActionProxy通过Configuration
Manager(struts.xml)询问框架的配置文件,找到需要调用的Action类。例如,用户注册示例将找到UserReg类

Struts2请求处理示意图:

5、ActionProxy创建一个ActionInvocation实例,同时ActionInvocation通过代理模式调用Action。但在调用之前,ActionInvocation会根据配置加载Action相关的所有Interceptor(拦截器)。

澳门新葡萄京官网首页 2

6、一旦Action执行完毕,ActionInvocation负责根据struts.xml中的配置找到对应的返回结果result

7、最后通过HTTPServletResponse返回客户端一个响应。

发表评论

电子邮件地址不会被公开。 必填项已用*标注