`

struts2工作原理

 
阅读更多

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工作原理深度解析 #### 引言 Struts2框架,作为Java Web开发领域的一款重要工具,其设计理念源自于WebWork框架,并融合了Struts1的优点,旨在提供更为强大、灵活的MVC(Model-View-Controller)架构...

    struts2工作原理.doc

    ### Struts2工作原理 #### 一、Struts2简介 Struts2是Apache软件基金会的一个开源项目,它是Struts1的下一代版本,基于WebWork框架,并融合了Struts1的一些特性,形成了一个新的MVC(Model-View-Controller)框架...

    struts2工作原理及拦截器和过滤器

    Struts2 工作原理及拦截器和过滤器 Struts2 框架的工作原理可以分为以下几个步骤: 1. 客户端发出一个指向 Servlet 容器的请求(Tomcat); 2. 这个请求会经过几个过滤器,最后会到达 FilterDispatcher 过滤器。...

    Struts2 工作原理 Struts2框架 有图

    ### 二、Struts2工作流程详解 #### 1. 请求初始化 一切始于客户端发起的HTTP请求,该请求通常包含用户提交的数据和请求的资源标识符。请求首先到达Web服务器的Servlet容器,如Apache Tomcat。 #### 2. 过滤器链 ...

    struts2工作原理图

    理解Struts2的工作原理是深入学习和有效利用该框架的关键。下面将详细介绍Struts2的工作流程。 1. **请求接收**:当用户在浏览器中提交一个HTTP请求时,这个请求首先会被Web服务器(如Apache Tomcat)接收到。如果...

    struts2工作原理及源码分析学习笔记

    在本文中,我们将深入探讨Struts2的工作原理和源码分析,以帮助理解其内在机制。 1. **Struts2架构图**: 当一个HTTP请求到达服务器时,它首先通过一系列Filter(过滤器),包括ActionContextCleanUp,该过滤器...

    struts2工作原理.

    总的来说,Struts2的工作原理是通过一系列的组件协作,实现了从用户请求到业务逻辑处理再到视图展示的完整流程。它通过拦截器机制提供了强大的扩展性,使得开发者可以轻松地插入自定义的行为,增强了应用程序的灵活...

    struts2工作原理.docx

    下面将详细解释Struts2的工作原理,以便深入理解其核心流程。 1. **客户端请求**:当用户在浏览器中发起一个HTTP请求,该请求会被发送到服务器上的Servlet容器,例如Apache Tomcat。 2. **过滤器链**:请求首先会...

    Struts2工作原理图

    现在我们来详细解析Struts2的工作原理。 首先,当客户端发起一个HTTP请求到服务器,这个请求会到达Servlet容器,如Tomcat。在Struts2框架中,一系列的过滤器(Filter)会介入这个请求处理流程。其中,...

    Struts2工作原理模拟

    在Struts2的工作原理中,有几个核心概念和技术值得深入理解: 1. **前端控制器(Front Controller)模式**:Struts2框架基于Servlet API中的Filter设计模式实现前端控制器,即`StrutsPrepareAndExecuteFilter`。它...

    struts2 工作原理.rar

    理解Struts2的工作原理是提升Java web开发技能的关键。 **工作流程** 1. **请求接收**:当用户在浏览器中发起HTTP请求,请求到达应用服务器,Struts2拦截器会捕获这个请求。Struts2的核心是Front Controller,即`...

    struts2配置与工作原理

    ### Struts2配置与工作原理详解 #### 一、Struts2概述 Struts2是Apache Struts项目下的一个开源框架,它继承了Struts1的...对于希望进一步了解Struts2工作原理的开发者来说,掌握以上提到的关键知识点是非常重要的。

Global site tag (gtag.js) - Google Analytics