您的位置:首页 > 编程语言 > Java开发

struts2 跳转类型 result type=chain、dispatcher、redirect(redirect-action)_forever

2016-04-13 15:40 495 查看
dispatcher 为默认跳转类型,用于返回一个视图资源(如:jsp) 
Xml代码 :

<result name="success">/main.jsp</result> 

<result name="success">/main.jsp</result> 

以上写法使用了两个默认,其完整的写法为: 

<result name="success" type="dispatcher"> 

        <param name="location">/maini.jsp</param> 

</result>

用于页面转发,页面跳转过程一直是同一个线程,Action中的数据一直保存在。
location只能是页面,不能是另一个action(可用type="chain"解决)。

 

redirect 类型用于重定向到一个页面,另一个action或一个网址。 

Xml代码:

<result name="success" type="redirect">aaa.jsp</result> 

<result name="success" type="redirect">bbb.action</result> 

<result name="success" type="redirect">www.baidu.com</result>

缺点:redirect把一个http返回码(SUCCESS)以及返回的页面位置一起重新发给web服务器,容纳后由web服务器产生一个新的HTTP请求,就会产生一个新的线程,保存在原来Action执行的线程中的数据就无法访问。
所以,result需要包含Action的数据,那么redirect不是一个可行的办法。因为新的HTTP请求时在Servlet容器的新的线程中处理的,ActionContext中的所有状态都不会存在。

处理方法:

(方法一): 

<result name="topic" type="redirect">/topicAction!findTopics.do?topicId=${topicId}</result> 

(方法二): 

<result name="topic" type="redirect-action"> 

<param name="actionName">findTopics</param> 

<param name="topicId">${topicId}</param> 

</result>

 

redirect-action 结果类型使用ActionMapperFactory提供的ActionMapper来重定向请求到另外一个action 
Xml代码:

<result name="err" type="redirect-action"> 

    <param name="actionName">重定向的Action名</param> 

     <param name="namespace">重定向Action所在的名字空间</param> 

</result> 
redirect和redirect-action两种结果类型在使用上其实并没有什么区别,只是写法不同而已。

 

chain 用于把相关的几个action连接起来,共同完成一个功能。 
Xml代码:

<action name="step1" class="test.Step1Action"> 

     <result name="success" type="chain">step2.action</result> 

</action> 

<action name="step2" class="test.Step2Action"> 

<result name="success">finish.jsp</result> 

</action> 

处于chain中的action属于同一个http请求,共享一个ActionContext 

plaintextj 结果类型用于直接在页面上显示源代码

Xml代码:

<result name="err" type="plaintext"> 
    <param name="location">具体的位置</param> 
    <param name="charSet">字符规范(如GBK)</param> 

</result>

1.跳转方式dispatcher和chain是服务器端跳转,所以客户端只发起一次请求,产生一个action;redirect和redirectAction是客户端跳转,所以客户端发起两次请求。

2.跳转内容dispatcher和redirect跳转的是views(一般是jsp页面);chain和redirectAction跳转的是一个action。

 (1)type="dispatcher" 为默认,用于jsp页面跳转 /index.jsp 完整的写法为: /index.jsp

(2)type="redirect" 重定向到jsp、action、外部网址 /index.jsp /login.do http://www.baidu.com重定向时带参数处理方法:

1.type="redirect": /login.do?userId=${userId } 2.type="redirect-action": 见(3)

(3)type="redirect-action" 重定向到另外一个action login.do 重定向action名userId带的参数

(4)type="chain" 用于action跳转。 action2.do login.jsp

(5)type="plaintextj" 跳转显示源代码 具体的位置 字符规范(如GBK)

http://u.unao.blog.163.com/blog/static/106422920201210106151352/

 

 

 

第一个 dispatcher : 是设置 type 属性 默认的一种 

例:<result name="success">/WEB-INF/page/HelloWord.jsp</result>

第二个 redirect :是一种重定向的转换类型(JSP页面要放在WEB-INF根目录下)

例:<result type="redirect">/employeeAdd.jsp</result>

第三个 chain :这个result调用另外的一个action,连接自己的拦截器栈和result。前一个动作将控制权转交给后一个动作,而前一个动作的状态在后一个动作里仍然保持着。

例: <package name="p1" extends="struts-default">

<action name="a1" class="...">

<result type="chain">a2</result>

</action>

<action name="a2" class="...">

<result type="chain">

<param name="actionName">a3</param>

<param name="namespace">/n2</param>

</result>

</action>

</package>

p1包里的a1动作连接着a2动作

第四个 redirectAction :是action 间的重定向转换

例:同一个包下面:

<result type="redirectAction">action的name的值</result>

不同包下面:

<action name="redirectAction" class="...">

<result type="redirectAction">

<param name="actionName">action的名字</param>

<param name="namespace">命名空间</param>

</result>

</action>
dispatcher:用于页面转发,页面跳转过程一直是同一个线程,Action中的数据一直保存在。

redirect:可用于返回一个页面、一个action、链接到一个网址。
       缺点:redirect把一个http返回码(SUCCESS)以及返回的页面位置一起重新发给web服务器,容纳后由web服务器产生一个新的HTTP请求,就会产生一个新的线程,保存在原来Action执行的线程中的数据就无法访问。
所以,result需要包含Action的数据,那么redirect不是一个可行的办法。因为新的HTTP请求时在Servlet容器的新的线程中处理的,ActionContext中的所有状态都不会存在。

chain:功能与redirect的action转发类似,不过与redirectaction转发功能不同的是它可以将Action中的数据一直保存在同一个HTTP请求中。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  struts redirect