zoukankan      html  css  js  c++  java
  • 学习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
     返回普通文本类容
  • 相关阅读:
    Swoole 协程使用示例及协程优先级
    Swoole 协程简介
    Laravel Redis分布式锁的使用
    Laravel Redis分布式锁实现源码分析
    Swoole 中使用异步任务
    runtime相关面试
    oc笔试题
    属性关键字面试题
    KVC面试题
    KVO面试题
  • 原文地址:https://www.cnblogs.com/BaoZiY/p/10150827.html
Copyright © 2011-2022 走看看