2struts2中常用的配置文件及result返回类型
struts2 strus.xml中result类型及含义

struts2strus.xml中result类型及含义一个提交到服务器的处理通常可以分为两个阶段,第一个阶段查询服务器状态(查询或者更新数据库),第二个阶段选择一个合适的结果页面其返回给用户(这里要讲的Result的内容)。
Struts2提供了对不同种类返回结果的支持,常见的有JSP,FreeMarker,Velocity等。
Struts2支持的不同类型的返回结果为:名字说明Chain Result用来处理Action链Dispatcher Result用来转向页面,通常处理JSPFreeMarker Result处理FreeMarker模板HttpHeader Result用来控制特殊的Http行为Redirect Result重定向到一个URLRedirect Action Result重定向到一个ActionStream Result向浏览器发送InputSream对象,通常用来处理文件下载Velocity Result处理Velocity模板XLS Result处理XML/XLST模板PlainText Result显示原始文件内容,例如文件源代码结合Tile使用S2PLUGINS:TilesResult另外第三方的Result类型还包括JasperReports Plugin,专门用来处理JasperReport类型的报表输出。
在struts-default.xml文件中已经有了对于所有类型Result的定义:<result-types><result-type name="chain"class="com.opensymphony.xwork2.ActionChai nResult"/><result-type name="dispatcher"class="org.apache.struts2.dispatcher.Serv letDispatcherResult"default="true"/><result-type name="freemarker"class="org.apache.struts2.views.freemarke r.FreemarkerResult"/><result-type name="httpheader"class="org.apache.struts2.dispatcher.Http HeaderResult"/><result-type name="redirect"class="org.apache.struts2.dispatcher.Serv letRedirectResult"/><result-type name="redirectAction"class="org.apache.struts2.dispatcher.Serv letActionRedirectResult"/><result-type name="stream"class="org.apache.struts2.dispatcher.Stre amResult"/><result-type name="velocity"class="org.apache.struts2.dispatcher.Velo cityResult"/><result-type name="xslt"class="org.apache.struts2.views.xslt.XSLT Result"/><result-type name="plainText"class="org.apache.struts2.dispatcher.Plai nTextResult"/><!--Deprecated name form scheduled for removal in Struts 2.1.0.The camelCase versions are preferred.See ww-1707--><result-type name="redirect-action"class="org.apache.struts2.dispatcher.Serv letActionRedirectResult"/><result-type name="plaintext"class="org.apache.struts2.dispatcher.Plai nTextResult"/></result-types>从上述代码中可以看出在不指定Result类型的时候使用dispatcher类型。
Result结果类型详解

Result结果类型详解1. 配置Result在 struts.xml ⽂件中,<result> 元素⽤于配置 Result 逻辑视图与物理视图之间的映射关系,它有两个可选属性 name 和 type。
其中,name 属性⽤于指定逻辑视图的名称,默认值为 success;type 属性⽤于指定返回的视图资源的类型,不同的类型代表不同的结果输出,它的默认值是 dispatcher。
<action name="loginAction" class="com.mengma.action.LoginAction"><result name="success" type="dispatcher"><param name="location">/success.jsp</param></result></action><!-- Action 配置了⼀个 name 为 success 的 Result 映射,该映射的值可以是 JSP 页⾯,也可以是⼀个 Action 的 name 值; 这⾥使⽤ param ⼦元素为其指定了 Result 映射对应的物理视图资源为 success.jsp。
--><param> ⼦元素的 name 属性有两个值:location:指定该逻辑视图所对应的实际视图资源。
parse:指定在逻辑视图资源名称中是否可以使⽤ OGNL(对象图导航语⾔)表达式。
默认值为 true,表⽰可以使⽤,如果设为false,则表⽰不⽀持。
简化上⾯的代码:<action name="loginAction" class="com.mengma.action.LoginAction"><result>/success.jsp</result></action>需要注意的是,在 Result 配置中指定实际资源位置时,可以使⽤绝对路径,也可以使⽤相对路径。
struts2_resultType

首先看一下在struts-default.xml中对于result-type的定义:<result-types><result-type name="chain" class="com.opensymphony.xwork2.ActionChainResult"/> <result-type name="dispatcher"class="org.apache.struts2.dispatcher.ServletDispatcherResult" default="true"/> <result-type name="freemarker"class="org.apache.struts2.views.freemarker.FreemarkerResult"/><result-type name="httpheader"class="org.apache.struts2.dispatcher.HttpHeaderResult"/><result-type name="redirect"class="org.apache.struts2.dispatcher.ServletRedirectResult"/><result-type name="redirectAction"class="org.apache.struts2.dispatcher.ServletActionRedirectResult"/><result-type name="stream" class="org.apache.struts2.dispatcher.StreamResult"/> <result-type name="velocity"class="org.apache.struts2.dispatcher.VelocityResult"/><result-type name="xslt" class="org.apache.struts2.views.xslt.XSLTResult"/><result-type name="plainText"class="org.apache.struts2.dispatcher.PlainTextResult" /></result-types>chain:用来处理Action链,被跳转的action中仍能获取上个页面的值,如request信息. dispatcher:用来转向页面,通常处理JSP.freemaker:处理FreeMarker模板.httpheader:控制特殊HTTP行为的结果类型.redirect:重定向到一个URL,被跳转的页面中丢失传递的信息,如request. redirectAction:重定向到一个Action,跳转的页面中丢失传递的信息.stream:向浏览器发送InputSream对象,通常用来处理文件下载,还可用于返回AJAX数据. velocity:处理Velocity模板.xslt:处理XML/XLST模板.plainText:显示原始文件内容,例如文件源代码.重点说一下redirect和redirectAction的区别:(1)使用redirect需要后缀名,使用redirect-action可以不需要后缀名.(2)type="redirect"的值可以转到其它命名空间下的action,而redirect-action只能转到同一命名空下的action,因此它可以省略.do的后缀直接写action的名称.1、dispatcher结果类型Struts2在后台使用Servlet API 的RequestDispatcher来转发请求,因此在用户的整个请求/响应过程中,目标Servlet/JSP接收到的request/response对象,与最初的Servlet/JSP相同。
Struts2文件配置介绍

Struts2⽂件配置介绍Struts2⽂件配置介绍struts2structs.xml⽂件配置标签package标签<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE struts PUBLIC"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN""/dtds/struts-2.3.dtd"><struts><!-- 配置post请求以及repsone的编码格式 --><constant name="struts.i18n.encoding"value="UTF-8"></constant><!-- 配置请求路径的扩展名 --><constant name="struts.action.extension"value="action,,"></constant><!-- 开启热部署 --><constant name="struts.devMode"value="true"></constant><package name="index"namespace="/"extends="struts-default"><action name=""class="erAction"method="toLogin"><result name="toLogin">/WEB-INF/view/login.jsp</result></action></package><include file="com/forward/test/web/action/struts.xml"></include></struts>配置web应⽤的不同模块,⼀般在⼀个功能模块下配置⼀个package,在当前的package下配置这个模块的多个action name属性给不同的模块起不同的名字,随便写,不重复即可namespace属性给不同的模块设置访问的根路径,可以配置成/extends属性表⽰继承, struts-default 是struts2给我们提供的⼀个packageaction标签action 标签表⽰配置⼀个请求name 属性表⽰请求路径的后缀,⼀般表⽰功能模块中的具体请求,name的名字就代表访问路径的名称class 属性表⽰当有请求过来的时候调⽤的是哪个类中的⽅法,配置全类名method 表⽰class 请求调⽤的是class 中的哪个⽅法,指的是具体的⽅法名result标签result 结果配置,⽤于设置不同的⽅法返回值,可以配置不同的返回值对应不同的视图name 属性表⽰结果处理名称,与action中的返回值对应type 属性表⽰指定哪个result 类来处理显⽰的页⾯,默认是内部转发,可以在struts-default 的⽂件中进⾏查看标签体表⽰相对路径,相对于web应⽤开始常量配置默认的常量配置在structs核⼼包中修改常量配置⽅式及加载顺序对于常量的配置, 默认加载的是structs核⼼包中的default.properties,如果通过以下3种进⾏配置,就会按照默认–>1–>2–>3 的顺序加载,后⾯设置的常量会覆盖之前设置的常量1. 在structs.xml⽂件中,在structs的根标签下,书写constant 标签进⾏配置,在项⽬中主要使⽤这种⽅式2. 在src下创建structs.properties⽂件,将内容复制到此⽂件进⾏修改3. 在web.xml⽂件中,配置context-param 第⼀种⽅式第⼆种⽅式第三种⽅式常⽤常量设置struts.i18n.encoding=UTF-8 ⽤于配置接收参数和向外输出中⽂的编码格式⼀般设置为UTF-8struts.action.extension=action, 指定访问action的路径的后缀名,使⽤, 表⽰可以有两个后缀名,可以是action也可以是没有后缀名struts.devMode = false 指定structs是否是以开发模式运⾏,能够⽀持修改配置⽂件后进⾏热部署,所以我们可以将其设置为true动态⽅法调⽤如果⼀个业务模块有多个⽅法,我们可以使⽤动态⽅法调⽤省略action的配置,设置动态⽅法调⽤有两种⽅法⽅法⼀开启动态⽅法调⽤<constant name="struts.enable.DynamicMethodInvocation" value="true"></constant>配置action的时候不写method在访问的时候输⼊⽹址http://localhost:8080/webapp/namespace/name!method ⽅法⼆ 通配符⽅式关闭动态⽅法调⽤对于⽅法名可以使⽤⼀个* 通配符,在后⾯的class和method可以使⽤{索引} 来读取前⾯的内容访问路径localhost:8080/webapp/namespace/class_methodstructs2中的默认配置<constant name ="struts.enable.DynamicMethodInvocation" value ="true"></constant><package name ="helloWorld" namespace ="/User" extends ="struts-default"><action name ="d_" class ="com.zhiyou100.struts.web.action.demo3.Demo3Action" ><result name ="success">/hello World.jsp </result></action> </package><package name ="demo3" namespace ="/User" extends ="struts-default"><action name ="*_*" class ="com.zhiyou100.struts.web.action.demo3.{1}" method ="{2}"><result name ="success">/helloWorld.jsp </result></action></package>method的默认值executeresult的默认值是successresult的type的默认值是dispatcherclass的默认值是ActionSupport 其中有execute ⽅法返回值是success配置package下的默认的action,当访问当前包下,如果找不到指定action,就会⾃动寻找默认的action <package name="default"namespace="/user"extends="struts-default"><default-action-ref name="demoAction"></default-action-ref><action name="demoAction"class="erAction"><result>/WEB-INF/view/404.jsp</result></action></package>结果跳转的⽅式结果的跳转⽅式可以通过result的type属性进⾏设置转发转发到指定页⾯对于type属性,默认是dispatcher ,就是转发到响应界⾯,可以不⽤进⾏配置转发到指定action对于type属性需要设置为chain ,并在其下⽅配置<param> 标签<result name="error"type="chain"><param name="namespace">/</param><param name="actionName"></param></result>重定向重定向到指定界⾯对于type属性,设置为redirect ,就是重定向到界⾯,如果需要进⾏重定向就必须进⾏此处的设置<result name="error"type="redirectAction"><param name="namespace">/</param><param name="actionName"></param></result>。
02-Struts2的工作流程及配置文件

Struts2的工作流程及配置文件--- ---Struts2.0的流程图从图中看到Struts2的工作流程如下:1.服务器接收到的请求首先经过一组过滤器链(实际中的其他过滤器可能还包括诸如Spring 的字符过滤器CharactorEncodingFilter、V elocity的过滤器等,一般FilterDispatcher位于过滤器的最后一个执行),过滤器链按照你在web.xml中的配置顺序在接收客户请求时顺序执行,在向客户发送响应时反序执行,Struts2的核心FilterDispatcher在web.xml中的配置如下:<filter><filter-name>setCharactor</filter-name><!-- 配置字符过滤--><filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class><init-param><param-name>encoding</param-name><param-value>UTF-8</param-value></init-param></filter><filter><filter-name>struts2</filter-name><!-- 配置Struts2过滤器--><filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class> </filter><filter-mapping><filter-name>setCharactor</filter-name><url-pattern>/*</url-pattern></filter-mapping><filter-mapping><filter-name>struts2</filter-name><url-pattern>/*</url-pattern></filter-mapping>注意:如果你使用的是W ebLogic6.1作为应用服务器,需要使用FilterDispatcherCompatW eblogic61替代FilterDispatcher。
Struts2配置Result

配置Result一个result代表了一个可能的输出。
当一个Action类的方法执行完成时,它返回一个字符串类型的结果码,框架根据这个结果码选择对应的result,向用户输出。
Results配置由两部分组成:一部分是result映射,另一部分是result类型。
1.结果映射在struts.xml文件中,使用result元素来配置result映射。
result元素有两个可选的属性:在Struts2中允许定义一个默认的Result类型,这是通过result-type元素来定义的。
在框架的默认配置文件struts-default.xml中,在struts-default.xml包中有如下的一个配置:<result-types><result-type name="dispatcher"class="org.apache.struts2.dispatcher.ServletDispatcherResult"default="true"/></result-types>result-type元素的default属性指定名为dispatcher的结果类型,dispatcher结果类型使用ServletAPI中的ResultDispatcher将请求导向到目标资源(通常是JSP页面)。
如果在使用result元素配置result映射时,没有使用type类型,那么框架就将使用默认的dispatcher类型。
由于Struts2中的包是可以继承的,所以我们定义的package只要继承了struts-default包,因此也继承了默认的结果类型,所以可以省略result元素的type属性。
如果没有指定result元素的name属性,那么框架将把它命名为”success”。
2.结果类型在框架调用Action对请求进行处理之后,就要向用户呈现一个结果视图,Struts2支持多种类型的视图,这些视图是由不同的结果类型来管理的。
result讲解

Rsult是什么简单的说Result就是Action方法执行完毕之后返回的一串字符串,他指示出Action执行完之后的下一个页面在哪里,具体页面的位置是我们在struts.xml中配置的,就是<result>子元素,例如我们在前面UserAction中配置的Result:<action name="*User"class="erAction"method="{1}"><result name="input">/input.jsp</result><result name="success">success.jsp</result></action>在Struts2中内建了许多ResultType,他们都定义在strtus-default包中,我们可以在struts-default.xml中找到这些Result Type的定义虽然Strtus2内建支持这么多Result Type,但是一般情况下我们都用不到这么多,因此我们挑几个常用的学习一下,其他的可以在需要的时候再去查看文档。
Result的配置非常简单,<result>元素可以有name属性和type属性,但是两种属性都不是必须的。
1:配置name属性按照前面的讲述,name属性是用来跟Action的execute方法返回的字符串相对应的,用来指示Action运行后跳转到的下一个页面,因此name属性的值可以是任意字符串。
比如有如下的execute方法:java代码:public String execute() throws Exception {return "toWelcome";}那么,这里返回的“toWelcome”,在struts.xml里面就有如下的配置来对应:java代码:<action name="helloworldAction"class="cn.javass.action.action.HelloWorldAction"><result name="toWelcome">/s2impl/welcome.jsp</result></action>如果不设置的话,默认值为“success”,正好和Action中的“SUCCESS”这个常量相对应,那样的话,execute方法就应该返回SUCCESSDispatcher从是struts2.xml的配置中可以看出对于Dispatcher类型的Result Type被设置为默认使用的结果类型。
struts2中struts.xml文件详解

<result-types>
<result-type name="chain" class="com.opensymphony.xwork2.ActionChainResult"/>
<result-type name="dispatcher" class="org.apache.struts2.dispatcher.ServletDispatcherResult" default="true"/>
</action>
</package>
</struts>
上面代码的两个动作的class属性都指向同一个类,name为这个类起了两个动作别名:test和my。在动作my中,使用了method属性指定要要运行的方法名为my。
在MyAction类中必须要有my方法,代码如下:
<struts>
<package name="demo" extends="struts-default"
>
<action name="test" class="action.MyAction">
</action>
<action name="my" class="action. MyAction" method="my">
<?xml version="1.0" encoding="UTF-8" ?>
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1.web.xml文件主要完成对StrutsPrepareAndExecuteFilter的配置(在以前的版本中是对FilterDispatcher配置,新版本同样支持用FilterDispatcher配置),它的实质是一个过滤器,它负责初始化整个Struts框架并且处理所有的请求。
这个过滤器可以包括一些初始化参数,有的参数指定了要加载哪些额外的xml 配置文件,还有的会影响struts框架的行为。
除了StrutsPrepareAndExecuteFilter外,Struts还提供了一个ActionContexCleanUp类,它的主要任务是当有其它一些过滤器要访问一个初始化好了的struts框架的时候,负责处理一些特殊的清除任务。
2.struts.xml文件框架的核心配置文件就是这个默认的struts.xml文件,在这个默认的配置文件里面我们可以根据需要再包括其它一些配置文件。
在通常的应用开发中,我们可能想为每个不同的模块单独配置一个struts.xml文件,这样也利于管理和维护。
这也是我们要配置的主要文件3.struts.properties(参default.properties)在Struts框架使用了很多属性,我们可以通过改变这些属性来满足我们的需求。
要改变这些属性,只需在struts.properties文件中指定属性的key和value即可。
属性文件可以放在任何一个包含在classpath中的路径上,但是通常我们都把它放在/WEB-INF/classes目录下面。
我们可以在struts-default.properties文件中找到一个属性的列表。
4.struts-default.xml此文件是struts2框架默认加载的配置文件,它定义了struts2一些核心bean和拦截器,它会自动包含(included)到struts.xml文件中(实质是通过<package extends="struts-default">),并为我们提供了一些标准的配置。
我们可以在struts2-core.jar中找到这个文件。
5.其它配置文件velocity.properties,struts-default.vm,struts-plugin.xml struts.xml文件的配置Struts2的核心配置文件,由程序员开发编写,包含Action、result 等配置信息,主要负责管理Struts2框架的业务控制器Action。
在开发中,当修改一些配置时总是不能及时地更新到服务器,我们总会重新部署或重启来更新改变的内容,在struts2中可以通过一个常量来达到此目的。
即在struts.xml中的<struts>元素下增加如下内容:<constant name="struts.configuration.xml.reload" value="true" />这样配置后,当配置文件修改保存时就会及时更新到服务器中。
此文件中可以配置的常用的常量:<!-- 指定WEB应用的编码集,相当于调用HttpServletRequest.setCharacterEncoding方法,如果使用了velocity或freemarker,它也用于指定输出的编码格式 --><constant name="struts.i18n.encoding"value="UTF-8"/><!-- 指定请求后缀为.action,指定多个请求后缀用逗号分隔 --><constant name="struts.action.extension"value="do,action"/><!--设置浏览器是否缓存静态内容,建议:开发阶段关闭,运行时开启 --><constant name="struts.serve.static.browserCache"value="false"/> <!--当struts.xml配置文件修改后,系统是否重新加载该文件,开发阶段打开此功能 --><constant name="struts.configuration.xml.reload"value="true"/> <!-- 开发提示:出错时打印更详细的信息--><constant name="struts.devMode"value="true"/><!-- 设置默认的视图主题 --><constant name="struts.ui.theme"value="simple"/><!-- 与spring集成时,指定由spring负责action对象的创建 --><constant name="struts.objectFactory"value="spring"/><!-- 该属性设置Struts 2是否支持动态方法调用,该属性的默认值是true。
如果需要关闭动态方法调用,则可设置该属性为 false --><constant name="struts.enable.DynamicMethodInvocation"value="false"/><!-- 上传文件的大小限制 --><constant name="struts.multipart.maxSize"value="10701096"/>指定多个struts配置文件在大部分应用里,随着应用规模的增加,系统中Action的数量也会大量增加,导致struts.xml配置文件变得非常臃肿。
为了避免struts.xml文件过于庞大、臃肿,提高struts.xml文件的可读性,我们可以将一个struts.xml配置文件分解成多个配置文件,然后在struts.xml文件中包含其他配置文件。
下面的struts.xml通过<include>元素指定多个配置文件:<struts><include file="struts_user.xml"/><include file="struts_product.xml"/></struts>*通配符在action元素的name属性中可以使用*通配符,它可以匹配除了/以外的多个连续字符,在action元素的class和method属性以及result元素中可以引用*通配符在访问期间实际匹配的内容,例如:<action name="message_*"class="com.qwy.action.MessageAction"method="{1}"><result>/WEB-INF/page/{1}.jsp</result></action>使用*通配符可能导致有多个action元素与一个访问路径匹配,这时候以排在配置文件中最后的配置项为准,所以更具体的模式应在更不具体的模式之后进行配置返回类型result1.每个action 方法都将返回一个String 类型的值, Struts 将根据这个值来决定响应什么结果.2.每个Action 声明都必须包含有数量足够多的result 元素,每个result 元素分别对应着action 方法的一个返回值.3.result 元素可以有下面两个属性一、name: 结果的名字, 必须与Action 方法的返回值相匹配, 默认值为success二、type: 响应结果的类型. 默认值为dispatcher所有的type类型我们可以在struts2-core-2.3.16.jar下的struts-default.xml文件中找到:如下图:Type类型值对应类作用说明chain 用来处理Action链,被跳转的Action中仍能获取上个页面的值,其中的dispatcher是默认的处理类型,主要用于与JSP整合,而chain、dispatcher、redirect是我们比较常用的。
redirect这种结果集类型与dispatcher非常相似,dispatcher结果集类型是将请求forward到JSP视图资源,而redirect类型是将请求重定向到JSP视图资源,他们之间最大的区别就是一个转发请求、一个重定向请求。
如果是重定向了请求,那么将丢失所有的参数,其中包括Action的处理结果。
dispatcher类型:dispatcher 结果类型是最常用的结果类型, 也是struts 框架默认的结果类型。
<package name="test1"namespace="/"extends="struts-default"> <action name="test1"class="com.qwy.action.TestAction1" method="show"><result<resulttype="dispatcher"><param name></action></package>该结果类型有一个<package name="test1"="struts-default"> <action name=method="show"><result<param name="location">/index.jsp</param></result><param name="info">admin</param></action></package>对应的Action类:package com.qwy.action;public class TestAction1 {private String info;public String show(){System.out.println("TestAction1.show()");return"success";}public String getInfo() {return info;}public void setInfo(String info) { = info;}}redirect类型:redirect 结果类型将把响应重定向到另一个资源, 而不是转发给该资源.redirect 结果类型接受下面这些参数:1.location: 用来给出重定向的目的地2.parse: 用来表明是否把location 参数的值视为一个OGNL表达式来解释. 默认值为trueredirect 结果类型可以把响应重定向到一个外部资源<action name="test1"class="com.qwy.action.TestAction1"method="show"> <result type="redirect"><param name="location">/index.jsp</param></result><param name="info">admin</param></action>等同:<action name="test1"class="com.qwy.action.TestAction1"method="show"> <result type="redirect">/index.jsp</result><param name="info">admin</param></action>在使用redirect时,用户完成一次与服务器之间的交互,浏览器需要发送两次请求,如下图:使用redirect 结果类型的工作过程:1、 浏览器发出一个请求,Struts2框架对应的Action 实例对请求进行处理。