`

Struts2 Result详解

 
阅读更多

1,Result原理

 1) Result组件是Struts2中用于输出的组件,实际上就是Java代码。

 2)Struts2中预制了10中类型的Result,这些Result什么在struts-default.xml中。

    这些类实际上都事先了统一的接口:Result.

   <result-types>
            <result-type name="chain" class="com.opensymphony.xwork2.ActionChainResult"/>
            <result-type name="dispatcher" class="org.apache.struts2.dispatcher.ServletDispatcherResult" default="true"/>
            <result-type name="freemarker" class="org.apache.struts2.views.freemarker.FreemarkerResult"/>
            <result-type name="httpheader" class="org.apache.struts2.dispatcher.HttpHeaderResult"/>
            <result-type name="redirect" class="org.apache.struts2.dispatcher.ServletRedirectResult"/>
            <result-type name="redirectAction" class="org.apache.struts2.dispatcher.ServletActionRedirectResult"/>
            <result-type name="stream" class="org.apache.struts2.dispatcher.StreamResult"/>
            <result-type name="velocity" class="org.apache.struts2.dispatcher.VelocityResult"/>
            <result-type name="xslt" class="org.apache.struts2.views.xslt.XSLTResult"/>
            <result-type name="plainText" class="org.apache.struts2.dispatcher.PlainTextResult" />
        </result-types>

 

3)重点讲解一下类型的Result

--dispatcher  默认类型,转发到一个页面)

   当一个请求到来,服务器直接转发到另一个页面,不能是另一个action。由于这个过程在服务器内部完成,客户端(浏览器)并不知道,所以在地址栏不会显示真实访问的页面,而显示都是所请求的action的地址。在servlet中相当与forword转发。

 

--redirect  (重定向到一个页面)。

   当一个请求到来,服务端将实际地址response给浏览器,然后浏览器重新发起请求,这个过程,浏览器是知道访问的页面的实际地址的,所以在浏览器的地址栏显示的是实际访问的jsp页面地址。但是这种类型不能重定向到一个action.

 

--chain  转发到一个action,而不是页面

  

--redirectAction 重定向到一个action

  跳转到其他包的action:

 

<action name="login" class="...">
        <!-- Chain to another namespace -->
        <result type="chain">
            <param name="actionName">dashboard</param>
            <param name="namespace">/secure</param>
        </result>
    </action>

使用redirectAction 带参数

<action name="temp" class="com.lydia.web.action.TempAction">
		<result type="redirectAction">
			<param name="actionName">test.action</param>
			<param name="name">${name}</param>
		</result>
</action>

 

 

--stream  

--json 

 

 

4)使用方式

 <result name="ok" type="类型">

 

</result>

 

2、Stream类型的Result详解

 1)Stream是用于向页面直接输出二进制数据,比如登陆页面的验证码图片,就可以在服务端生成,然后由这种类型的Result输出

 2) 使用

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

  <param name="inputName">

     输出属性名

  </param>

</result>

--在struts.xml中,我们可以使用param来给组件的属性注入默认值

--<param name="inputName">,这里inputName对应的是StreamResult的inputName属性,这样配置相当于会调用StreamResult的setInputName方法给它注入属性值。

--注入的属性值,是Action中的某个属性的名称,如下图,inputName是StreamResult中的一个属性。在Action中作二进制输出的属性要求其类型为InputStream。





 -- Result会创建一个输出流,接到Action中的输入流,向页面输出。

 

3) 验证码案例:

   struts.xml中配置:

<!-- 生成验证码的Action -->
		<action name="createImage"
			class="com.netctoss.action.CreateImageAction">
			<result name="success" type="stream">
				<param name="inputName">
					imageStream
				</param>
			</result>
		</action>

 

    CreateImageAction.java

public class CreateImageAction 
	extends BaseAction {
	
	//ouput
	private InputStream imageStream;
	
	public String execute() {
		//生成验证码图片
		Map<String,BufferedImage> map = 
			ImageUtil.createImage();
		//通过遍历得到唯一生成的验证码
		String imageCode = 
			map.keySet().iterator().next();
		//将验证码记录到session,在登录验证时使用
		session.put("imageCode", imageCode);
		//根据验证码,得到图片
		BufferedImage image = map.get(imageCode);
		//将图片转换为输入流,由result作输出
		try {
			imageStream = 
				ImageUtil.getInputStream(image);
		} catch (IOException e) {
			e.printStackTrace();
			return "error";
		}
		return "success";
	}

	public InputStream getImageStream() {
		return imageStream;
	}

	public void setImageStream(InputStream imageStream) {
		this.imageStream = imageStream;
	}

}

 

 

<script language="javascript" type="text/javascript">
    		function change(imageObj) {
    			imageObj.src = "createImage?date=" + new Date().getTime();
    		}
</script>

<tr>
     <td class="login_info">验证码:</td>
     <td class="width70"><input name="code" type="text" class="width70" /></td>
     <td><img src="createImage" alt="验证码" title="点击更换" onclick="change(this);"/></td>  
     <td><span class="required"></span></td>              
</tr>     

  BaseAction.java 实现接口SessionAware

/**
 *	所有Action的父类,可以将通用的代码
 *	提取出来放到父类中。
 *	这里,我们让BaseAction实现接口SessionAware,
 *	那么继承与BaseAction的Action就相当于实现了
 *	这个接口。在实例化Action之后,Struts2会自动
 *	调用setSession方法把session注入给Action,
 * 这里我们利用全局变量session来接收,Action
 * 可以在调用业务方法时使用它来调用session。
 */
public class BaseAction implements SessionAware {

	protected Map<String, Object> session;
	
	public void setSession(Map<String, Object> session) {
		this.session = session;
	}

}

 

3、Json类型的Result详解

 1) 向页面输出json格式的字符串

 2) struts2 并没有预制这种类型的Result,但是他非常常用,往往用于页面的异步校验。

 3) 使用步骤

       a,导包:struts2-json-plugin-2.1.8.1.jar

       b,struts.xml中将要使用json类型Result的package继承json-default

       c,在struts.xml中配置result

         --最常用,只是输出单个属性

 

       <result name="success" type="json" >
               <param name="root">
                       指定Action的一个属性名
               <param>
         </result>
   注意: name="root"是固定用法;

 

               如指定的属性是boolean类型,那么Result会把这个属性做成字符串"true";

               如指定的属性是JavaBean,那么Result会把这个属性做成字符串{"code":"12"}

 

--输出多个属性

    

<result name="success" type="json">
		<param name="includeProperties">
				属性名1,属性名2,...
		</param>
</result>

 注意:Result会将这一组属性做成一个json输出,

如Action中有属性code="aaa",name="zs"

可以将这2个属性做成一个json

{"code":"aaa","name":"zs"}

 

--输出Action中的所有属性

<result name="success" type="json">
					
</result>

注意:Result会将Action中所有的属性做成一个

json输出{"":"","":""}

 

  • 大小: 46.5 KB
分享到:
评论

相关推荐

    struts2 result配置详解

    关于struts2 Result的配置,有例子

    Struts2属性文件详解

    Struts2属性文件详解 struts.configuration 该属性指定加载Struts 2配置文件的配置文件管理器.该属性的默认值是org.apache.Struts2.config.DefaultConfiguration, 这是Struts 2默认的配置文件管理器.如果需要实现...

    Struts2详解,Struts2与Struts1的区别

    Struts2和Struts1的常见区别 二. Struts2入门 3. 快速配置Struts2环境 4. 开发一个Struts2简单实例 5. struts.xml文件 三. Struts2深入开发 6. 常用标签配置和使用 7. 常用&lt;result&gt;标签配置和使用 8....

    struts2_strus.xml中result类型及含义详解

    针对struts2对result配置的各种类型详解

    Struts2 Result 参数详解

    主要讲解Struts2 Result的参数,讲的比较详细,希望能给大家做一个参考。

    struts2 详解文档

    介绍Struts 2及Struts 2开发环境的搭建 第一个Struts 2应用开发 解决Struts 2配置文件无提示问题 Action名称的搜索顺序 Action配置的各项默认值 result配置的各种视图转发类型 为Action属性注入值 指定...

    Struts2 Result 返回JSON对象详解

    主要讲解Struts2返回JSON对象的两种方式,讲的比较详细,希望能给大家做一个参考。

    Struts2入门教程(全新完整版)

    org.apache.struts2.views.freemarker.FreemarkerResult 16 httpheader 16 控制特殊http行为的结果类型 16 org.apache.struts2.dispatcher.HttpHeaderResult 16 stream 16 向浏览器发送InputSream对象,通常用来处理...

    非常不错的中文struts2教程[CHM]

    内容: 1、OGNL —— 数据运转的催化...3、Struts2配置详解 4、Struts2中的Action 5、Struts2中的参数传递 6、标签库,永恒的争论话题 7、拦截器详解 8、配置,灵活还是简单? 9、深入plugin 10、在Struts2中使用OGNL

    struts2重定向实例源码

    struts result类型中redirect与redirectAction的使用 包括参数传递。

    一步步学习Struts2

    内容包括ognl,result机制,struts2配置详解,struts2中的action,struts2中的参数传递,标签库,拦截器的详解,深入plugin

    详解struts2的token机制和cookie来防止表单重复提交

    详解struts2的token机制和cookie来防止表单重复提交 今天在做一个投票系统时要实现防止表单重复提交! 当时就想到了用struts2提供的token机制 struts2的token机制防止表单重复提交: 首先需要在提交的jsp页面(要...

    Struts2和Ajax数据交互示例详解

    我们从Web 2.0的随波逐流,Ajax的大放异彩说起,Struts2框架自己整合了对Ajax的原生支持(struts 2.1.7+,之前的版本可以通过插件实现),框架的整合只是使得JSON的创建变得异常简单,并且可以简单的融入到Struts2...

    低清版 大型门户网站是这样炼成的.pdf

    2.1.6 struts 2的处理结果result 45 2.1.7 功能强大的表达式语言ognl 47 2.1.8 struts 2的运行流程分析—helloworld 48 2.1.9 struts 2的异常处理 52 2.2 struts 2配置精要 54 2.2.1 web.xml中struts 2的配置...

    Struts in Action中文版

    2. 深入 STRUTS架构..................................................................................37 2.1. 随便谈谈......................................................................................

    在Tomcat中配置404自定义错误页面详解

    一直使用tomcat,今天想到一个问题,自定义404错误页面, 为了获得很好的用户感受,是不应当向用户暴露404这样的页面的, 问题的出发点是我在Struts2中定义错误页面, 在Struts2中是这样定义的: ...

    struts in Action

    2. 深入STRUTS 架构..................................................................................37 2.1. 随便谈谈.......................................................................................

    java面试题以及技巧

    │ Struts配置文件详解.txt │ 上海税友.txt │ 上海税友软件 面试题.doc │ 公司培训文档-混淆的基本概念.doc │ 基本算法.doc │ 孙卫琴精通struts.基于MVC的.java.web设计与开发.pdf │ 学习Struts提供的和Form...

    java面试题目与技巧1

    │ Struts配置文件详解.txt │ 上海税友.txt │ 上海税友软件 面试题.doc │ 公司培训文档-混淆的基本概念.doc │ 基本算法.doc │ 孙卫琴精通struts.基于MVC的.java.web设计与开发.pdf │ 学习Struts提供的和Form...

    java面试题及技巧4

    │ Struts配置文件详解.txt │ 上海税友.txt │ 上海税友软件 面试题.doc │ 公司培训文档-混淆的基本概念.doc │ 基本算法.doc │ 孙卫琴精通struts.基于MVC的.java.web设计与开发.pdf │ 学习Struts提供的和Form...

Global site tag (gtag.js) - Google Analytics