struts2的工作原理:
(1)首先要经过Struts2框架的核心控制器StrutsPrepareAndExecuteFilter。
(2)然后核心控制器依次查找ActionMapper来决定这个请求是否调用action。如果ActionMapper决定调用action,StrutsPrepareAndExecuteFilter就把这个请求的处理控制权委托给ActionProxy。
(3)ActionProxy通过Configuration Manager查询Struts2框架的核心配置文件(struts.xml),找到所要调用的Action类。
(4)接下来,ActionProxy创建一个ActionInvocation实例,该实例负责命令模式的实现,包括在激活action本身之前调用配置的任意拦截器。
(5)在action执行完成之后,ActionInvocation实例负责根据action的返回结果码在struts.xml配置文件中查找要输出的结果(Result)。该结果通常是jsp或者FreeMarker模板,也可能是action。在输出的时候,模板可以使用框架提供的Struts2标签。
(6)然后为action配置的拦截器将被再次执行(顺序和action被调用之前的执行顺序相反)。
(7)最后,服务器的响应将通过web.xml文件中配置的Struts2框架核心控制器返回。
Struts2 web.xml文件配置:
1.配置核心控制器。
<?xml version="1.0" encoding="UTF-8"?> <web-app id="WebApp_9" version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"> <display-name>Struts Blank</display-name> <filter> <filter-name>struts2</filter-name> <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class> </filter> <filter-mapping> <filter-name>struts2</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> </web-app>
2.配置第三方过滤器框架,比如sitemesh
<?xml version="1.0" encoding="UTF-8"?> <web-app id="WebApp_9" version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"> <display-name>Struts Blank</display-name> <filter> <filter-name>StrutsPrepareFilter</filter-name> <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareFilter</filter-class> </filter> <filter> <filter-name>sitemesh</filter-name> <filter-class>com.opensymphony.module.sitemesh.filter.PageFilter</filter-class> </filter> <filter> <filter-name>StrutsExecuteFilter</filter-name> <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsExecuteFilter</filter-class> </filter> <filter-mapping> <filter-name>struts2</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> </web-app>
struts.xml配置之result type:
1.chain 用于action的链式操作,调用另外一个action的全部,包括拦截器和result。
具有4个参数:
actionName 设置被调用action的名称
namespace 被调用action所在的命名空间,如果为空则默认当前命名空间
method 用于指定目标action中被调用的方法,默认调用execute方法
skipAction 用于配置被链式调用的action的名称列表,之间用逗号分割,可选参数。
从这4个参数可以看出chain操作是不能进行在action之间传递页面或服务端上的参数的。
2.dispatcher 用于包含或转发到某一视图(jsp页面)。
具有参数:
location 默认参数,用于配置当action执行完成后所转发的位置
parse 默认值为true。用于配置是否解析location参数中的ognl表达式。false不解析
3.freemarker 用于集成freemarker,及使用Freemarker模板引擎输出一个视图
具有参数:
location 默认参数,要处理的模板的位置
parse 是否解析location参数中的ognl表达式,默认true解析
contentType 默认值"text/html"
writeIfCompleted 默认false,表示在处理模板时如果没有任何错误则写入流
4.httpheader 用于控制具体的HTTP行为。
具有参数:
status 在一个响应中设置的http servlet响应状态码
parse 是否解析headers参数中的ognl表达式,默认true解析
headers 设置header值
error 在一个响应中设置的http servlet响应错误码
errorMessage 响应的错误消息,如果设置了error参数必须设置该参数
5.redirect 用于重定向到其他的web资源(url),重定向时将调用HttpServletResponse中的sendRedirect(String)方法。
具有参数:
location 默认参数,用于指定action执行完成后重定向的位置
parse 是否解析location参数中的ognl表达式
anchor 为结果指定一个anchor,可选。
注:使用重定向后,对于web资源传递数据需要通过session,web参数或刚刚使用的OGNL表达式,而刚刚被调用的action实例将不能再被获得。对于dispatcher方式则可以获得刚刚被调用的action实例。
6.redirectAction 使用ActionMapperFactory提供的ActionMapper将浏览器重定向到指定的命名空间中的action。Struts2强烈建议使用redirectAction代替redirect(基于servlet的重定向)。
具有参数:
actionName 重定向到的action的名称
namespace 重定向到的action所在的命名空间,为空默认当前命名空间
supressEmptyParameters 是否防止无值参数被包含到重定向的URL中,默认值false防止
7.stream 通过inputstream直接发送原始数据给HttpServletResponse,用于文件下载。
具有参数:
contentType 发送给web浏览器的流的MIME类型,默认值是“text/plain”
contentLength 流的长度,以字节为单位
contentDisposition 设置响应的Content-Disposition头,指定下载文件的名称。
inputName action链中InputStream属性的名称。
bufferSize 用于文件下载的缓存大小,默认1024
allowCaching 是否允许客户端缓存下载的内容,默认值是true
contentCharSet 设置字符集编码。
示例:
<result name="success" type="stream"> <param name="coontentType">application/pdf</param> <param name="inputName">inputStream</param> <param name="contentDisposition">attachment;filename="document.pdf"</param> </result>
8.velocity 用于集成velocity。
9.xslt用于集成XML/XSLT
10.plainText 用于显示一个特定页面的原始内容。
相关推荐
### Struts2工作原理深度解析 #### 引言 Struts2框架,作为Java Web开发领域的一款重要工具,其设计理念源自于WebWork框架,并融合了Struts1的优点,旨在提供更为强大、灵活的MVC(Model-View-Controller)架构...
### Struts2工作原理 #### 一、Struts2简介 Struts2是Apache软件基金会的一个开源项目,它是Struts1的下一代版本,基于WebWork框架,并融合了Struts1的一些特性,形成了一个新的MVC(Model-View-Controller)框架...
Struts2 工作原理及拦截器和过滤器 Struts2 框架的工作原理可以分为以下几个步骤: 1. 客户端发出一个指向 Servlet 容器的请求(Tomcat); 2. 这个请求会经过几个过滤器,最后会到达 FilterDispatcher 过滤器。...
### 二、Struts2工作流程详解 #### 1. 请求初始化 一切始于客户端发起的HTTP请求,该请求通常包含用户提交的数据和请求的资源标识符。请求首先到达Web服务器的Servlet容器,如Apache Tomcat。 #### 2. 过滤器链 ...
理解Struts2的工作原理是深入学习和有效利用该框架的关键。下面将详细介绍Struts2的工作流程。 1. **请求接收**:当用户在浏览器中提交一个HTTP请求时,这个请求首先会被Web服务器(如Apache Tomcat)接收到。如果...
在本文中,我们将深入探讨Struts2的工作原理和源码分析,以帮助理解其内在机制。 1. **Struts2架构图**: 当一个HTTP请求到达服务器时,它首先通过一系列Filter(过滤器),包括ActionContextCleanUp,该过滤器...
总的来说,Struts2的工作原理是通过一系列的组件协作,实现了从用户请求到业务逻辑处理再到视图展示的完整流程。它通过拦截器机制提供了强大的扩展性,使得开发者可以轻松地插入自定义的行为,增强了应用程序的灵活...
下面将详细解释Struts2的工作原理,以便深入理解其核心流程。 1. **客户端请求**:当用户在浏览器中发起一个HTTP请求,该请求会被发送到服务器上的Servlet容器,例如Apache Tomcat。 2. **过滤器链**:请求首先会...
现在我们来详细解析Struts2的工作原理。 首先,当客户端发起一个HTTP请求到服务器,这个请求会到达Servlet容器,如Tomcat。在Struts2框架中,一系列的过滤器(Filter)会介入这个请求处理流程。其中,...
在Struts2的工作原理中,有几个核心概念和技术值得深入理解: 1. **前端控制器(Front Controller)模式**:Struts2框架基于Servlet API中的Filter设计模式实现前端控制器,即`StrutsPrepareAndExecuteFilter`。它...
理解Struts2的工作原理是提升Java web开发技能的关键。 **工作流程** 1. **请求接收**:当用户在浏览器中发起HTTP请求,请求到达应用服务器,Struts2拦截器会捕获这个请求。Struts2的核心是Front Controller,即`...
### Struts2配置与工作原理详解 #### 一、Struts2概述 Struts2是Apache Struts项目下的一个开源框架,它继承了Struts1的...对于希望进一步了解Struts2工作原理的开发者来说,掌握以上提到的关键知识点是非常重要的。