学习Struts--Chap04:result中type属性dispatcher、redirect、redirectAction、chain的区别

1、Struts2框架中常用的结果类型的分析和比较

  • dispatcher:缺省的result类型,type默认是dispatcher内部转发。如果不写type类型只写一个名字的话,不单是type类型默认,而且<param name="location">/XXX.jsp</param>中的location也是默认的,而且默认的情况下location只能是页面,不能是另一个action(可用type="chain"解决)。
  • redirect:可以重定向到一个页面、一个action或者是一个网址。action处理完后重定向到一个视图资源(如:jsp页面),请求参数全部丢失,action处理结果也全部丢失。
  • redirectAction:action处理完成之后重定向到另一个action,请求参数全部丢失,action的处理结果也会全部丢失。可以在任意点上改变URL模式而不会影响你的应用程序. 因此强烈推荐使用这个Result而不是标准的redirect result来解决重定位到某个action的情况.
  • chain:主要是把相关的几个action连接起来,共同完成一个功能。action处理完成之后转发到另一个action,请求参数全部丢失,action的处理结果不会丢失。
实例代码:

index.jsp

 1 <%@ page language="java" contentType="text/html; charset=UTF-8"
 2     pageEncoding="UTF-8"%>
 3 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
 4 <html>
 5 <head>
 6 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 7 <title>Insert title here</title>
 8 </head>
 9 <body>
10 <a href="hello?name=Struts2" target="_blank">默认转发_dispatcher</a><br/>
11 <a href="hello!r?name=Struts2" target="_blank">重定向_redirect</a><br/>
12 <a href="hello!c?name=Struts2" target="_blank">链条_chain</a><br/>
13 <a href="hello!ra?name=Struts2" target="_blank">重定向到Action_redirectAction</a><br/>
14 
15 <a href="hello" target="_blank">全局result配置</a><br/>
16 </body>
17 </html>

 

struts.xml

 1 <?xml version="1.0" encoding="UTF-8" ?>
 2 <!DOCTYPE struts PUBLIC
 3     "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
 4     "http://struts.apache.org/dtds/struts-2.0.dtd">
 5 
 6 <struts>
 7     
 8   <constant name="struts.enable.DynamicMethodInvocation" value="true" />
 9   
10   <package name="manage" namespace="/" extends="struts-default">
11       <global-results>
12           <result name="error">error.jsp</result>
13       </global-results>
14       
15       <action name="hello" class="com.java1234.action.HelloAction">
16           <result name="success" type="dispatcher">success.jsp</result>
17           <result name="r" type="redirect">success.jsp</result>
18           <result name="c" type="chain">hello2</result>
19           <result name="ra" type="redirectAction">hello2</result>
20       </action>
21       
22       <action name="hello2" class="com.java1234.action.HelloAction2">
23           <result name="success" type="dispatcher">success.jsp</result>
24       </action>
25   </package>
26 
27 </struts>

HelloAction类:

 1 package com.java1234.action;
 2 
 3 import com.opensymphony.xwork2.ActionSupport;
 4 
 5 public class HelloAction extends ActionSupport{
 6 
 7     /**
 8      * 
 9      */
10     private static final long serialVersionUID = 1L;
11     
12     private String name;
13     private String error;
14     
15     public String getName() {
16         return name;
17     }
18 
19     public void setName(String name) {
20         this.name = name;
21     }
22 
23     public String getError() {
24         return error;
25     }
26 
27     public void setError(String error) {
28         this.error = error;
29     }
30 
31     @Override
32     public String execute() throws Exception {
33         if(name==null || "".equals(name)){
34             this.error="name是空";
35             return ERROR;
36         }
37         return SUCCESS;
38     }
39     
40     public String r()throws Exception{
41         return "r";
42     }
43     
44     public String c()throws Exception{
45         return "c";
46     }
47 
48     public String ra()throws Exception{
49         return "ra";
50     }    
51 }
HelloAction2类:
 1 package com.java1234.action;
 2 
 3 import com.opensymphony.xwork2.ActionSupport;
 4 
 5 public class HelloAction2 extends ActionSupport{
 6 
 7     /**
 8      * 
 9      */
10     private static final long serialVersionUID = 1L;
11     
12     private String name2;
13     
14     public String getName2() {
15         return name2;
16     }
17 
18 
19     public void setName2(String name2) {
20         this.name2 = name2;
21     }
22 
23     @Override
24     public String execute() throws Exception {
25         this.name2="你好啊";
26         return SUCCESS;
27     }
28 }

 

2、Struts2框架提供的结果类型
已配置结果类型名 类 名 描 述
dispatcher org.apache.struts2.dispatcher.
ServletDispatcherResult
 默认结果类型,用来呈现JSP页面
chain com.opensymphony.xwork2.
ActionChainResult
 将action和另外一个action链接起来
freemarker org.apache.struts2.views.freemarker.
FreemarkerResult
 呈现Freemarker模板
httpheader org.apache.struts2.dispatcher.
HttpHeaderResult
 返回一个已配置好的HTTP头信息响应
redirect org.apache.struts2.dispatcher.
ServletRedirectResult
 将用户重定向到一个已配置好的URL
redirectAction org.apache.struts2.dispatcher.
ServletActionRedirectResult
 将用户重定向到一个已定义好的action
stream org.apache.struts2.dispatcher.
StreamResult
 将原始数据作为流传递回浏览器端,
该结果类型对下载的内容和图片非常有用
velocity org.apache.struts2.dispatcher.
VelocityResult
 呈现Velocity模板
xslt org.apache.struts2.views.xslt.
XSLTResult
 呈现XML到浏览器,
该XML可以通过XSL模板进行转换
plaintext org.apache.struts2.dispatcher.
PlainTextResult
 返回普通文本类容

转载于:https://www.cnblogs.com/BaoZiY/p/10150827.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值