struts2的执行流程

简介: 前端

一个请求在struts2框架中处理大概分为一下几个步骤:

1)客户浏览器发送一个指向Servlet容器(例如Tomcat)的请求

2)这个请求经过一系列的过滤器(Filter)(这些过滤器中有一个叫做ActionContextCleanUp的可选过滤器,这个过滤器对于Struts2和其他框架的集成很有帮助,例如:SiteMesh Plugin)

3)接着FilterDispatcher(StrutsPrepareAndExecuteFilter)被调用,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


Struts2中的拦截器,你都用它干什么?

java里的拦截器是动态拦截Action调用的对象,它提供了一种机制可以使开发者定义一个action执行的前后执行的代码,也可以在一个action执行前阻止其执行,同时也提供了一种可以提取action中可重用部分的方式。

在AOP(Aspect Oriented Programming)中拦截器用于在某个方法或字段被访问之前,进行拦截后在之前或之后加入某些操作

1)struts2中的功能(参数处理、文件上传、字符编码等)都是通过系统拦截器实现的

2)当然我们也可以自定义拦截器,进行可插拔配置,可以执行Action的方法前后,加入相关逻辑完成业务。

使用场景:

1)用户登录判断,在执行action的前面判断是否已经登录,如果没有登录的就跳转登录页面。

2)用户权限判断,在执行action的前面判断是否具有,如果没有权限就给出提示信息。

3)操作日志...


简单讲一下SpringMVC的执行流程?

1)用户向服务器发送请求,请求被Spring 前端控制Servelt DispatcherServlet捕获;

2)DispatcherServlet 对请求URL进行解析,得到请求资源标识符(URI)。然后根据该URI,调用HandlerMapping获得该Handler配置的所有相关的对象 (包括Handler对象以及Handler对象对应的拦截器),最后以HandlerExecutionChain对象的形式返回;

3)DispatcherServlet 根据获得的Handler,选择一个合适的HandlerAdapter。(附注:如果成功获得HandlerAdapter后,此时将开始执行拦截器的preHandler(...)方法)

4) 提取Request中的模型数据,填充Handler入参,开始执行Handler(Controller)。 在填充Handler的入参过程中,根据你的配置,Spring将帮你做一些额外的工作:

HttpMessageConveter: 将请求消息(如Json、xml等数据)转换成一个对象,将对象转换为指定的响应信息

数据转换:对请求消息进行数据转换。如String转换成Integer、Double等

数据根式化:对请求消息进行数据格式化。 如将字符串转换成格式化数字或格式化日期等

数据验证: 验证数据的有效性(长度、格式等),验证结果存储到BindingResult或Error中

5)Handler执行完成后,向DispatcherServlet 返回一个ModelAndView对象;

6)根据返回的ModelAndView,选择一个适合的ViewResolver(必须是已经注册到Spring容器中的ViewResolver)返回给DispatcherServlet ;

7)ViewResolver 结合Model和View,来渲染视图

8)将渲染结果返回给客户端。

快速记忆:

核心控制器捕获请求,查找Hander,执行Handler,选择ViewResolver,通过ViewResoler渲染视图并返回

相关文章
|
7月前
|
前端开发
SpringMVC的执行流程
SpringMVC的执行流程
|
7月前
|
XML 存储 JSON
SpringMVC执行流程
SpringMVC执行流程
35 0
|
前端开发 Java
springMVC执行流程详解
springMVC执行流程详解
136 0
springMVC执行流程详解
|
存储 JSON 前端开发
你知道 SpringMVC的 执行流程 吗?
你知道 SpringMVC的 执行流程 吗?
121 0
|
前端开发 Java 调度
springMVC执行流程
springMVC执行流程
118 0
|
XML 前端开发 调度
SpringMVC的执行流程知道嘛
SpringMVC的执行流程知道嘛
57 0
|
存储 前端开发 Java
二.SpringMVC源码剖析-SpringMVC执行流程
上一篇文章写得是SpringMVC组件初始化,这篇文章我们来探讨一下SpringMVC的执行流程
|
SQL Java 数据库连接
hibernate的执行流程
hibernate的执行流程
172 0
hibernate的执行流程
|
存储 前端开发 Java
springmvc与struts2执行流程比较
springmvc与struts2执行流程比较
107 0
springmvc与struts2执行流程比较