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 用于显示一个特定页面的原始内容。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值