Struts2ResultType和Action处理链

网友投稿 741 2022-05-29

Struts2的ResultType和Action处理链

Struts2的结果类型

在struts-default.xml中定义了Struts2内置的所有可用的

所有的Struts2结果处理类都要直接或间接的实现com.opensymphony.xwork2.Result接口

在struts-default.xml中的里面,有这样一行声明

Deprecated name form scheduled for removal in Struts 2.1.0. The camelCase versions are preferred.

即:不建议使用以下两种结果类型,在Struts-2.1.0中它们将被移除,应采用Java命名规则,即骆驼命名方式,也即驼峰命名规则

另外Struts2还有一些插件,这些插件还支持一些其它结果类型,这里暂时先不涉及它们

结果类型为input的页面的作用

Struts2应用在运行过程中若发现addFieldError()中有信息或者类型转换失败或着输入校验失败等情况

那么它会自动跳转到name为input的,然后转到INPUT所对应的页面

若JSP页面中表单是用普通

编写的,发生错误而返回该页面时,则原数据将消失

若JSP页面中表单是用编写的,发生错误而返回该页面时,则原数据仍存在

若没有提供name值为input的,那么发生错误时,将直接在浏览器中提示404错误

结果类型中的httpheader

httpheader结果类型很少使用到,它实际上是返回一个HTTP响应的头信息

若单纯的设置/result.jsp,执行时控制台会报如下错误

Caught OgnlException while setting property 'status' on type 'org.apache.struts2.dispatcher.HttpHeaderResult'.

java.lang.NoSuchMethodException: setStatus(java.lang.String)

翻译:应用程序在设置status属性时捕获了OgnlException异常

查看HttpHeaderResult类源代码发现,它果然定义了private int status = -1

它代表的是一个状态码,较常见的状态码如下

200对应OK

404对应File Not Found或者requested resource() is not available

500对应服务器内部错误

这时我们在中修改为404即可

Struts2的ResultType和Action处理链

这样当Action执行完毕,就会转向到SUCCESS结果,所以页面就会显示404错误提示

关于httpheader结果类型,了解即可,平时很少用到的不是很多

结果类型中的plainText

当设定为type="plainText"之后,就可以显示原始文件内容,例如文件源代码

/testSuc.jsp

这时访问应用,当跳转到testSuc.jsp页面后,右键就可以查看到它的Java代码了

它比较适用于Java教学网站,但若仅设置type="plainText"的话,页面中显示中文时会乱码

这时就可以借助它的charSet属性以解决中文显示时的乱码问题

[xhtml]  view plain copy print ?

/testSuc.jsp

GBK

结果类型中redirect和redirectAction的区别

redirect是在处理完当前Action之后,重定向到另外一个实际的物理资源

redirectAction也是重定向,但它重定向到的是另外一个Action

只要是重定向,那么之前凡是保存在request里面的东西就全都消失了

因为重定向实际是发送第二个请求,故请求中的东西也就不会出现在第二个请求里面了

也就是说重定向是不共享request的东西,重定向后的页面中无法接收request里的东西

另外dispatcher结果类型的default属性为TRUE,故缺省为dispatcher

所以如果没有设置type属性的话,那么默认的是请求转发,即浏览器显示的是*.action

但是在设置type="redirect"属性后,就可以重定向了,即浏览器显示的是/login2.jsp

Struts2的Action处理链

从一个Action跳转到另一个Action,有两种办法,即将type设置为chain或者redirectAction

chain结果类型表示将多个Action作为一个链来处理

而使用chain和redirectAction的好处就是:它会按照框架的默认后缀去自动匹配后缀

而chain和redirectAction的区别与dispatcher和redirect的区别是一样的

即同样是跳转到一个Action上,但chain是服务器跳转,而redirectAction是客户端跳转

服务器跳转的过程中,可以共享数据,这时后面的Action就可以接收前面Action中的属性信息进行二次处理

以下是chain结果类型的使用示例

[xhtml]  view plain copy print ?

secondchain

thirdchain

/chainResult.jsp

下面的例子是访问不同命名空间下的Action

[xhtml]  view plain copy print ?

test1

/xx

/test1Suc.jsp?name=${name}

客户端跳转中的参数传递

若第二个Action使用type="redirect",那么在页面中将无法接收Action中所共享的数据

但在客户端跳转中,我们可以在链接上传参。比如result写成/test1Suc.jsp?name=${username}

在Struts2的XML文件中可以使用${}表达式,它会自动的取出Action中所有可用的属性,作为参数传递到下一页面

这里${}不是EL表达式,实际上它的本质上是OGNL表达式

由于从链接中取值,故用<%=request.getParameter("name")%>或者${param.name},这里param相当于request.getParameter("")

注意也不能使用${name},因为它是用来从page、request、session、application中取值的

并且页面中也不能使用接收参数值,因为它是从ValueStack中取值的

下面是代码示例

[xhtml]  view plain copy print ?

test1

/test1Suc.jsp?name=${username}

Java Struts

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:boost 参考文档目录翻译
下一篇:数字签名系列一:签名简介与RSA签名算法
相关文章