Struts2配置Result

合集下载

Struts2配置文件通配符的使用说明

Struts2配置文件通配符的使用说明

Struts2配置文件中使用通配符收藏形式一:调用相同Action中的不同方法<action name="*Action" class="Jcuckoo.LoginRegistAction" method="{1}"><result name="input">/login.jsp</result><result name="error">/error.jsp</result><result name="success">/welcome.jsp</result></action>其中表达式{1}的值name属性值中第一个*的值。

如果用户请求的URL为loginAction.action,则调用Jcuckoo.LoginRegistAction中的login方法;如果用户请求的URL为registerAction.action,则调用Jcuckoo.LoginRegistAction中的register方法;形式二:通过匹配,调用不同的Action的execute方法<action name="*Action" class="Jcuckoo.{1}Action"><result name="input">/login.jsp</result><result name="error">/error.jsp</result><result name="success">/welcome.jsp</result></action>上面没有出现method属性,故默认调用对应的execute方法如果用户请求的URL为LoginAction.action,则调用Jcuckoo.LoginAction中的execute方法;如果用户请求的URL为RegisterAction.action,则调用Jcuckoo.RegisterAction中的execute方法;形式三:动态结果<action name="crud_*" class="Jcuckoo.CrudAction" method="{1}"><result name="input">/input.jsp</result><result>/{1}.jsp</result></action>当处理结果是input时,会转到/input.jsp页面当处理结果是success时,如果crud_create.action,则会执行Jcuckoo.CrudAction中的create方法,并且跳转到/create.jsp;如果crud_delete.action,则会执行Jcuckoo.CrudAction中的delete方法,并且跳转到/delete.jsp;。

struts2 strus.xml中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类型。

基于Struts2 Result Type为chain 的Action之间数据传递

基于Struts2 Result Type为chain 的Action之间数据传递

chain:基本用途是构造成一条动作链。

前一个Action将控制权转交给后一个Action,而前一个Action的状态在后一个Action里仍然保持着。

我现在有一个场景,FirstAction 通过chain的方式,将控制权交给SecondAction。

FirstAction对应的页面代码为first.ftl,SecondAction对应的页面代码为second.ftl。

假设我们的FirstAction如下定义:public class SecondAction extends ActionSupport{private CustomUser user = null;public String execute() throws Exception {// 利用user做事情或显示在页面上}// getter setter}意思很明确了,通过first.ftl的输入,到DB中或其他,生成了我们的CustomUser对象,这个CustomUser对象将要在SecondAction使用。

于是我们想到了要配置FirstAction 的name为toSecond的Result type为chain,将生成的CustomUser对象传递到SecondAction中,我们也这样做了,但是经过调试,发现在SecondAction中没有得到FirstAction中的CustomUser对象。

SecondAction是这样实现的:public class SecondAction extends ActionSupport{private CustomUser user = null;public String execute() throws Exception {// 利用user做事情或显示在页面上}// getter setter}看一下ChainingInterceptor.java的实现,发现有这样的注释:An interceptor that copies all the properties of every object in the value stack to t he currently executing object.在FirstAction 中CustomUser user 并没有在value stack 中,所以没有拷贝到SecondAction中。

Result结果类型详解

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

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下载(使用配置文件)1.第一步web.xml2.<?xml version="1.0" encoding="UTF-8"?>3.<web-app version="2.4"4.xmlns="/xml/ns/j2ee"5.xmlns:xsi="/2001/XMLSchema-instance"6.xsi:schemaLocation="/xml/ns/j2ee7./xml/ns/j2ee/web-app_2_4.xsd">8.<welcome-file-list>9.<welcome-file>index.jsp</welcome-file>10.</welcome-file-list>11.12.<filter>13.<filter-name>struts2</filter-name>14.<filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>15.</filter>16.<filter-mapping>17.<filter-name>struts2</filter-name>18.<url-pattern>/*</url-pattern>19.</filter-mapping>20.21.</web-app>第二步:struts.xml1.<!DOCTYPE struts PUBLIC2."-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"3."/dtds/struts-2.0.dtd">4.<struts>5.<package name="default" extends="struts-default">6.<action name="download" class="action.DownloadAction">7.<result type="stream">8.<param name="contentType">application/octet-stream</param>9.<param name="inputName">inputStream</param>10.<param name="contentDisposition">attachment;filename="${fileName}"</param>11.<param name="bufferSize">4096</param>12.</result>13.</action>14.</package>15.</struts>当result为stream类型时,struts2会自动根据你配置好的参数下载文件。

Struts2文件配置介绍

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的工作流程及配置文件

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。

result讲解

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的配置文件详解

Struts2的配置文件详解
Struts2的命名空间的作用等同于struts1里模块的作用。
1.3.包含配置:
在Struts2中可以将一个配置文件分解成多个配置文件,那么我们必须在struts.xml中包含其他配置文件。
<struts>
<includefile="struts-default.xml"/>
<includefile="struts-user.xml"/>
erName= userName;
}
/**
*@returnthepassword
*/
publicString getPassword() {
returnpassword;
}
/**
*@parampasswordthepasswordtoset
*/
publicvoidsetPassword(String password) {
</action>
</package>
</struts>
如上示例的配置,配置了一个名为default的包,该包下定义了一个Action。
1.2.命名空间配置:
考虑到同一个Web应用中需要同名的Action,Struts2以命名空间的方式来管理Action,同一个命名空间不能有同名的Action。
Struts2通过为包指定namespace属性来为包下面的所有Action指定共同的命名空间。
l public Map getSession():返回一个Map对象,该Map对象模拟了HttpSession实例。
l public void setSession(Map session):直接传入一个Map实例,将该Map实例里的key-value对转换成session的属性名-属性值对。

struts2中的result的type类型

struts2中的result的type类型
<param name="charSet">字符规范(如GBK)</param>
</result>
缺点:redirect把一个http返回码(SUCCESS)以及返回的页面位置一起重新发给web服务器,容纳后由web服务器产生一个新的HTTP请求,就会产生一个新的线程,保存在原来Action执行的线程中的数据就无法访问。
所以,result需要包含Action的数据,那么redirect不是一个可行的办法。因为新的HTTP请求时在Servlet容器的新的线程中处理的,ActionContext中的所有状态都不会存在。
struts2 跳转类型 result type=chain、dispatcher、redirect(redirect-action)
dispatcher 为默认跳转类型,用于返回一个视图资源(如:jsp)
Xml代码 :
<result name="success">/main.jsp</result>
<result name="success" type="chain">step2.action</result>
</action>
<action name="step2" class="test.Step2Action">
<result name="success">finish.jsp</result>
Xml代码:
<result name="err" type="redirect-action">

STRUTS2标签中符号#,$,%的用法示例

STRUTS2标签中符号#,$,%的用法示例

#、%和$符号在OGNL表达式中经常出现,而这三种符号也是开发者不容易掌握和理解的部分。

在这里笔者简单介绍它们的相应用途。

1.#符号的用途一般有三种。

1)访问非根对象属性,例如示例中的#session.msg表达式,由于Struts 2中值栈被视为根对象,所以访问其他非根对象时,需要加#前缀。

实际上,#相当于ActionContext. getContext();#session.msg表达式相当于ActionContext.getContext().getSession(). getAttrib ute(”msg”) 。

2)用于过滤和投影(projecting)集合,如示例中的persons.{?#this.age>20}。

3)用来构造Map,例如示例中的#{’foo1′:’bar1′, ’foo2′:’bar2′}。

2.%符号%符号的用途是在标志的属性为字符串类型时,计算OGNL表达式的值。

如下面的代码所示:构造Map<s:set name=”foobar” value=”#{’foo1′:’bar1′,‘foo2′:’bar2′}” /><p>The value of key “foo1″ is <s:property value=”#foobar['foo1']” /></p><p>不使用%:<s:url value=”#foobar['foo1']” /></p><p>使用%:<s:url value=”%{#foobar['foo1']}” /></p>3.$符号$符号主要有两个方面的用途。

在国际化资源文件中,引用OGNL表达式,例如国际化资源文件中的代码:reg.agerange=国际化资源信息:年龄必须在${min}同${max}之间。

struts2配置文件详解

struts2配置文件详解
"/dtds/struts-2.0.dtd">
<struts>
<!-- 指定Web应用的默认编码集,相当于调用HttpServletRequest的setCharacterEncoding方法 -->
<constant name="struts.i18n.encoding" value="UTF-8" />
<!-- 标准的UI主题,默认的UI主题为xhtml,可以为simple,xhtml或ajax -->
<cosntant name="struts.ui.theme" value="xhtml" />
<!-- spring 托管 -->
<constant name="struts.objectFactory" value="spring" />
<!--
指定加载struts2配置文件管理器,默认为org.apache.struts2.config.DefaultConfiguration
<!-- 设置默认的locale和字符编码 -->
<constant name="struts.locale" value="zh_CN" />
<constant name="struts.i18n.encoding" value="GBK" />
<!-- 该属性指定Struts 2文件上传中整个请求内容允许的最大字节数 -->

struts2

struts2
struts核心 包
加载struts2
要使用struts2,必须在web.xml中进行配置
以过滤器的形式加载 struts2
过滤器所在包: org.apache.struts2. dispatcher.FilterDi spatcher
加载struts2
以过滤器的形式加载struts2
struts2以过滤器的形式加载到工程中,在web.xml中配置: <filter> <filter-name>struts2</filter-name> <filter-class> org.apache.struts2.dispatcher.FilterDispatcher </filter-class> </filter> <filter-mapping> <filter-name>struts2</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
struts2中的命名空间起到模块化的作用。这个包下 的所有Action(请求的处理类),都应该以: /[命名空间名]/[Action名]来访问 命名空间的名字都应该以“/”开头,如果不配置命名 空间,则默认的就是namespace=“/”。 一个包下不能存在名字相同的Action
struts2常用配置-Action配置
name属性配置Action的名字
class属性配置Action类的完整类路径,说明 用哪个类处理提交的请求。
struts2常用配置-Action配置
LoginAction.java public class LoginAction extends ActionSupport { private String userName; private String password; public void setUserName(String userName) { erName = userName; } public void setPassword(String password) { this.password = password; } public String execute() throws Exception { return SUCCESS; } } 每个请求处理类必须继 承ActionSupport 对应页面表单元素名 对应的表单元素名必须 给出set方法 处理请求的方法。方法 名默认为execute struts2中,所提交的请求 应以.action结尾

Struts2框架配置文件详解大全

Struts2框架配置文件详解大全

一、web.xml配置文件任何MVC框架都需要与Web应用整合,这就不得不借助于web.xml文件,只有配置在web.xml文件中Servlet才会被应用加载。

所有的MVC框架都需要web应用加载一个核心控制器,对于Struts2框架而言,需要加载FilterDispatche r,只要Web应用负责加载FilterDispatc her,FilterDispatc her将会加载饮用的Str uts2框架。

配置FilterDispatc her的代码片段如下:-------------------------------------web.xm l------------------------------------------------------------------- <?xml version="1.0"encoding="UTF-8"?><web-app xmlns:xsi="/2001/XMLSchema-instance"xmlns="/xml/ns/javaee"xmlns:web="/xml/ns/javaee/web-app_2_5.xsd"xsi:schemaLocation="/xml/ns/javaee/xml/ns/javaee/web-app_2_5.xsd"id="WebApp_ID"version="2.5"><!-- 配置Struts2框架的核心Filter --><filter><!-- 配置Struts2核心Filter的名字 --><filter-name>struts2</filter-name><!-- 配置Struts2核心Filter的实现类 --><filter-class>org.apache.struts2.dispatcher.FilterDispatcher</f ilter-class></filter><!-- 配置Filter拦截的URL --><filter-mapping><!-- 配置Struts2核心FilterDispatcher拦截所有用户请求 --><filter-name>struts2</filter-name><url-pattern>/*</url-pattern></filter-mapping></web-app>-------------------------------------------------------------------------------------------------------------------- 二、struts.properties配置文件Struts2框架有两个核心配置文件,其中struts.xml文件主要负责管理应用中的Action映射,以及该Action包含的Result定义等。

Struts2 result返回类型

Struts2 result返回类型

Struts2 result返回类型(type)小结在struts2的返回结果配置中,我们大部分情况使用默认的或者chain或者redirect,其实struts2还有很多其他类型的,今天我们就来看一下都有哪些类型。

打开struts2的源码中struts-default.xml文件,我们能看到如下配置<package name="struts-default"abstract="true"><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"/><!-- 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.ServletActionRedirectResult"/><result-type name="plaintext"class="org.apache.struts2.dispatcher.PlainTextResult"/></result-types>下面我们就来一一介绍一下每个是做什么的。

struts2_异常处理

struts2_异常处理

Struts2___异常处理Struts2提供声明式的异常处理方式,内部通过配置的拦截器来实现,默认异常拦截器:com.opensymphony.xwork2.interceptor.ExceptionMappingInterceptor这样我们不需要在Action方法中catch异常,只需抛出相关的异常,都交由拦截器处理通过异常映射配置:<exception-mapping>元素exception属性:指定该异常映射所设置的异常类型result属性:指定Action出现该异常时,跳转到result属性所指向的结果异常映射类别分为两种:局部异常映射:<exception-mapping>配置<action name="exceptionAction"class="org.struts2.ch6.action.ExceptionAction"> <!-- 局部异常映射当Action 抛出指定异常时显示名为book_error指定的页面--><exception-mapping result="book_error"exception="ng.IllegalArgumentException"/><result>/ch6/book_add.jsp</result><result name="book_error">/ch6/book_error.jsp</result></action>全局异常映射:<global-exception-mappings>和<exception-mapping>配置<global-results><result name="error">/ch6/error.jsp</result></global-results><global-exception-mappings><exception-mapping result="error"exception="ng.Exception"/> </global-exception-mappings>页面输出异常信息:异常对象被封装成ExceptionHolder对象,压入ValueStack中<s:property value="exception.message"/> 输出异常对象消息<s:property value="exceptionStack"/> 输出异常堆栈信息Struts2 拦截器工作原理UML时序图:Struts2___类型转换◆内置的类型转换Stringboolean/Booleanchar/Characterint/Integer,float/Float,long/Long,double/Double date 默认时间格式为yyyy-MM-dd(当前时区的SHORT格式)数组假设每个单独的字符串都能转换成数组中元素的类型集合如果不能确定集合中元素的类型,会默认是String类型,并创建一个新的ArrayList对象◆自定义类型转换器主要方式:a.继承DefaultTypeConverter,重写convertValue方法b.继承StrutsTypeConverter,重写convertFromString和convertToString方法(推荐)public class DateTypeConverter extends StrutsTypeConverter {private String[] pattern = {"yyyy-MM-dd HH:mm:ss","yyyy/MM/dd HH:mm:ss","yyyy-MM-dd","yyyy/MM/dd"};private SimpleDateFormat sdf=new SimpleDateFormat();/*** @param context action上下文* values[] 需要转换的String数组* toClass 转换后的目标类型** @return返回转换后的目标对象*/public Object convertFromString(Map context, String[] values, Class toClass) { /** 使用指定的日期格式解析字符串值,返回Date对象*/Date date=null;if(toClass==Date.class && values.length>0){if(values[0]!=null && !"".equals(values[0])){System.out.println("接收的参数值:"+values[0]);date=parse(values[0]);if(date==null){/** 解析出现异常,抛出TypeConversionException异常,以通知Struts2发生了转换错误*/System.out.println("抛出类型转换异常,通知struts处理");throw new TypeConversionException("类型转换异常");}}System.out.println("转换后的值:"+date);return date;}return null;}public String convertToString(Map context, Object o) {/**使用指定的日期格式格式化Date对象,返回字符串*/return sdf.format(o);private Date parse(String source) {for(String fmt:pattern){Date d=convert(source,fmt);if(d!=null){return d;}}return null;}private Date convert(String source, String fmt) { try {sdf.applyPattern(fmt);Date v = sdf.parse(source);return v;}catch (ParseException e) {return null;}}自定义类型转换器的注册方式:A、局部类型转换器:针对某个ActionB、全局类型转换器:针对所有ActionC、使用JDK1.5的注释1.局部类型转换器提供如下格式的properties 文件,存放在Action类同一路径下文件名:action类名-conversion.properties内容: Action属性名=转换器全路径类名如:birthday=org.struts2.ch6.conversion.DateTypeConverter2、全局类型转换器(一般使用)提供如下格式的文件,存放位置:WEB-INF/classes/目录下文件名: xwork-conversion.properties内容:需要转换的全路径的类名=转换器全路径类名如:java.Util.Date=org.struts2.ch6.conversion.DateTypeConverter 类型转换的流程(String转对应类型)类型转换异常提示处理类型转换由conversionError拦截器处理出错返回input指向页面使用<s:fielderror/>显示错误信息##默认类型转换错误消息(一般使用) 一般定义在全局资源包文件中xwork.default.invalid.fieldvalue=this.field{0}value invalid ##局部类型转换错误消息显示(一般定义action级别资源包)invalid.fieldvalue.属性名=错误提示invalid.fieldvalue.birthday=birthday convert error!!!示例参见ch6。

struts2的配置文件

struts2的配置文件
t;
<!-- 定义默认的拦截器 每个Action都会自动引用,如果Action中引用了其它的拦截器,默认的拦截器将无效 -->
<default-interceptor-ref name="mystack"></default-interceptor-ref>
</init-param>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
当前路径为web-inf/classes
struts2的配置文件
类型
struts2共有4类配置文件,
struts.properties:定义框架自身的全局变量。
struts-default.xml:定义框架自身使用的action映射及result定义。
struts-plugin.xml:struts插件使用的配置文件,比如当使用struts和spring结合时就需要在web.xml中引用该配置文件。
-->
<package name="com.kay.struts2" extends="struts-default" namespace="/test">
<interceptors>
<!-- 定义拦截器-->
<interceptor name="timer" class="com.kay.timer"></interceptor>

Struct2的result的返回类型

Struct2的result的返回类型
org.apache.struts2.dispatcher.ServletActionRedirectResult
PlainTextResult
返回普通文本 类容
Json
注解@ParentPackage("json-default")
返回 JSON 格式的 数据
用法实例
一、dispatcher
(1)为缺省的 result 类型,一般情况下我们在 struts .xml 会这么写:
<result name="success">/main.js p</result>
类型大全
Struts2 框架提供的结果类型
已配置结果类型 类名

描述
dispatcher
org.apache.struts2.dispatcher. ServletDispatcherResult
注解@ParentPackage("struts-default")
默认结果类型, 用来呈现 JSP 页 面
1.chain:用来处理 Action 链,被跳转的 action 中仍能获取上个页面的值,如 request 信息。 com.opensymphony.xwork2.ActionChainResult
2.dispatcher:用来转向页面,通常处理 JSP org.apache.struts2.dispatcher.ServletDispatcherResult
10.redirectAction :重定向到一个 Action ,跳转的页面中丢失传递的信息, 如 request org.apache.struts2.dispatcher.ServletActionRedirectResult
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

配置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支持多种类型的视图,这些视图是由不同的结果类型来管理的。

一个结果类型就是实现了com.opensymphony.xwork2.Result接口的类,在Struts2中定义了多种结果类型,如下表所示:plainText用于显示某个特定页面(例如JSP,HTML)的原始内容(即页面的代码)结果类型在包中使用result-type元素定义,以下列出的结果类型都是在框架的默认配置文件struts-default.xml中定义的。

<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>我们也可以创建自己的结果类型注册到引用程序中。

首先需要编写一个实现了com.opensymphony.xwork2.Result接口的类,然后在struts.xml文件中使用result-type元素来注册你的结果类型。

自定义的结果类型可以生成E-mail,或者生成JMS消息,也可以生成图像等。

3.常用结果类型1>dispatcher结果类型:Struts2在后台使用Servlet API的RequestDispatcher来转发请求,因此在用户的整个请求/相应过程中,目标Servlet/JSP接收到的request/response对象,与最初的Servlet/JSP相同。

disptcher结果类型的实现类是:org.apache.struts2.dispatcher.ServletDispatcherResult该类有两个属性:location和parse,这两个属性可以通过struts.xml配置文件中的result元素的param子元素来设置。

param元素的name属性指定结果类型实现类的属性名。

param元素的内容给出属性的值。

例如:<result name="success"type="dispatcher"><param name="location">/success.jsp</param><param name="parse">true</param></result>其中,location参数用于指定action执行完毕之后要转向的目标资源,parse是一个布尔值的属性,如果为true,则解析lcation参数中的OGNL表达式,如果为false,则不解析。

parse默认值是true2>redirect结果类型:redirect结果类型在后台使用HttpServletResponse的sendRedirect方法,将请求重定向到URL,它的实现类是org.apache.struts2.dispatcher.ServletRedirectResult.在使用redirect时,用户要完成一次与服务器之间的交互,浏览器需要发送两次请求。

过程如下:1.浏览器发出一个请求,Struts2框架调用对应的Action实例对请求进行处理,2.Action返回”success”结果码,框架根据这个结果码选择对应的结果类型,这里使用的死redirect结果类型.3.ServletRedirectResult在内部使用HttpServletReponse的sendRedirect方法将请求重定向到目标资源。

4.浏览器重新发起一个针对目标资源的新的请求。

5.目标资源作为响应呈现给用户。

使用redirect结果类型,实际上是告诉浏览器目标资源所在位置,让浏览球重新访问目标资源。

由于在一次用户交互过程中存在着两次请求,所以第一次请求中的数据在第二次请求中是不可用的,这意味着在目标资源中是不能访问action实例,action错误以及字段错误等。

如果有某些数据需要在目标资源中访问,一种是将数据保存在Session中,另一种方式是通过参数来传递数据。

3>redirectAction结果类型redirectAction结果类型的实现类是org.apache.struts2.dispatcher.ServletActionRedirectResult,该类是ServletDispatcherResult的子类,所以redirectAction结果类型和redirect结果类型的后台工作原理是一样的,即都是利用HttpServletResponse的sendRedirect方法将请求重定向到指定的URL。

redirectAction结果类型主要是用于重定向到action,在请求处理完成之后如果需要重定向到另一个action,建议使用redirectAction 类型。

使用redirectAction结果类型,可以简化那些带有名称空间的action URL的设置。

ServletActionRedirect类在内部使用ActionMapper来构建访问action的URL,这样就不需要在struts.xml 配置文件中去手动编码访问action的URL了。

redirectAction结果类型有两个参数,如下所示:1>actionName指定要访问的action的名字,该参数是默认参数。

2>namespace指定action所属的名称空间。

如果没有使用这个参数,那么默认使用当前的名称空间。

实例如下:<package name="default"namespace="/"extends="struts-default"> <action name="news*"class="org.struts2.lesson05.News{1}Action"><result name="success">/WEB-INF/News/{1}.jsp</result><result name="login"type="redirectAction"><param name="actionName">loginPage</param><param name="namespace">/login</param></result></action><action name="*_*"class="org.struts2.lesson05.{1}Action"method="{2}"><result>/WEB-INF/News/{0}.jsp</result></action></package><package name="login"extends="struts-default"namespace="/login"><action name="loginPage"class="org.struts2.lesson05.LoginAction"><result>/WEB-INF/News/login.jsp</result></action></package>4.全局结果在某些场景中,可能有多个action需要访问同一个结果,例如在论坛系统中,用户在发帖回帖时都需要先登录,这时,我们就需要配置一个全局的login结果了。

相关文档
最新文档