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 |
返回普通文本类容 |