1,Result原理

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

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

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

Java代码  
  1. <result-types>
  2. <result-type name="chain" class="com.opensymphony.xwork2.ActionChainResult"/>
  3. <result-type name="dispatcher" class="org.apache.struts2.dispatcher.ServletDispatcherResult" default="true"/>
  4. <result-type name="freemarker" class="org.apache.struts2.views.freemarker.FreemarkerResult"/>
  5. <result-type name="httpheader" class="org.apache.struts2.dispatcher.HttpHeaderResult"/>
  6. <result-type name="redirect" class="org.apache.struts2.dispatcher.ServletRedirectResult"/>
  7. <result-type name="redirectAction" class="org.apache.struts2.dispatcher.ServletActionRedirectResult"/>
  8. <result-type name="stream" class="org.apache.struts2.dispatcher.StreamResult"/>
  9. <result-type name="velocity" class="org.apache.struts2.dispatcher.VelocityResult"/>
  10. <result-type name="xslt" class="org.apache.struts2.views.xslt.XSLTResult"/>
  11. <result-type name="plainText" class="org.apache.struts2.dispatcher.PlainTextResult" />
  12. </result-types>

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

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

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

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

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

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

  

--redirectAction 重定向到一个action

  跳转到其他包的action:

 

Java代码  
  1. <action name="login" class="...">
  2. <!-- Chain to another namespace -->
  3. <result type="chain">
  4. <param name="actionName">dashboard</param>
  5. <param name="namespace">/secure</param>
  6. </result>
  7. </action>

使用redirectAction 带参数

Java代码  
  1. <span style="font-size: 14px; font-family: 'Microsoft YaHei', 微软雅黑, SimHei, tahoma, arial, helvetica, sans-serif;"><action name="temp" class="com.lydia.web.action.TempAction">
  2. <result type="redirectAction">
  3. <param name="actionName">test.action</param>
  4. <param name="name">${name}</param>
  5. </result>
  6. </action></span>

 

--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中配置:

Java代码  
  1. <!-- 生成验证码的Action -->
  2. <action name="createImage"
  3. class="com.netctoss.action.CreateImageAction">
  4. <result name="success" type="stream">
  5. <param name="inputName">
  6. imageStream
  7. </param>
  8. </result>
  9. </action>

CreateImageAction.java

Java代码  
  1. public class CreateImageAction
  2. extends BaseAction {
  3. //ouput
  4. private InputStream imageStream;
  5. public String execute() {
  6. //生成验证码图片
  7. Map<String,BufferedImage> map =
  8. ImageUtil.createImage();
  9. //通过遍历得到唯一生成的验证码
  10. String imageCode =
  11. map.keySet().iterator().next();
  12. //将验证码记录到session,在登录验证时使用
  13. session.put("imageCode", imageCode);
  14. //根据验证码,得到图片
  15. BufferedImage image = map.get(imageCode);
  16. //将图片转换为输入流,由result作输出
  17. try {
  18. imageStream =
  19. ImageUtil.getInputStream(image);
  20. } catch (IOException e) {
  21. e.printStackTrace();
  22. return "error";
  23. }
  24. return "success";
  25. }
  26. public InputStream getImageStream() {
  27. return imageStream;
  28. }
  29. public void setImageStream(InputStream imageStream) {
  30. this.imageStream = imageStream;
  31. }
  32. }
Java代码  
  1. <script language="javascript" type="text/javascript">
  2. function change(imageObj) {
  3. imageObj.src = "createImage?date=" + new Date().getTime();
  4. }
  5. </script>
  6. <tr>
  7. <td class="login_info">验证码:</td>
  8. <td class="width70"><input name="code" type="text" class="width70" /></td>
  9. <td><img src="createImage" alt="验证码" title="点击更换" οnclick="change(this);"/></td>
  10. <td><span class="required"></span></td>
  11. </tr>

BaseAction.java 实现接口SessionAware

Java代码  
  1. /**
  2. *  所有Action的父类,可以将通用的代码
  3. *  提取出来放到父类中。
  4. *  这里,我们让BaseAction实现接口SessionAware,
  5. *  那么继承与BaseAction的Action就相当于实现了
  6. *  这个接口。在实例化Action之后,Struts2会自动
  7. *  调用setSession方法把session注入给Action,
  8. * 这里我们利用全局变量session来接收,Action
  9. * 可以在调用业务方法时使用它来调用session。
  10. */
  11. public class BaseAction implements SessionAware {
  12. protected Map<String, Object> session;
  13. public void setSession(Map<String, Object> session) {
  14. this.session = session;
  15. }
  16. }

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

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

Java代码  
  1. <result name="success" type="json" >
  2. <param name="root">
  3. 指定Action的一个属性名
  4. <param>
  5. </result>

注意: name="root"是固定用法;

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

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

--输出多个属性

    

Java代码  
  1. <result name="success" type="json">
  2. <param name="includeProperties">
  3. 属性名1,属性名2,...
  4. </param>
  5. </result>

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

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

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

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

--输出Action中的所有属性

Java代码  
  1. <result name="success" type="json">
  2. </result>

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

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

Struts2 Result详解相关推荐

  1. struts2配置详解(struts.xml配置详解)

    本文转自:http://www.cnblogs.com/fmricky/archive/2010/05/20/1740479.html struts.xml是我们在开发中利用率最高的文件,也是Stru ...

  2. Struts2之struts2文件下载详解

    一.学习案例:通过在downloadfile.jsp页面点击"下载文件",查看文件是否可以成功下载. 二.案例分析:struts2文件下载只需简单配置即可. a)先在下载页面(do ...

  3. [原创]java WEB学习笔记58:Struts2学习之路---Result 详解 type属性,通配符映射

    本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...

  4. JavaMelody+Spring+struts2配置详解——系统监控

    2019独角兽企业重金招聘Python工程师标准>>> 引言:JavaMelody的目的是监控Java或Java EE应用服务器在QA和生产环境.它不是一个用来模拟用户要求的工具而是 ...

  5. struts2标签详解

    struts2标签讲解 要使用Struts2的标签,只需要在JSP页面添加如下一行定义即可:<%@ taglib prefix="s" uri="/struts-t ...

  6. struts2.xml详解

    <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN&quo ...

  7. Struts2技术详解

    http://www.cnblogs.com/bettertanme/p/3388739.html 1, 当Action设置了某个属性后,Struts将这些属性封装一个叫做Struts.valueSt ...

  8. struts2框架详解

    一.struts2简介 Struts2是一个基于MVC设计模式的Web应用框架,它本质上相当于一个servlet,在MVC设计模式中,Struts2作为控制器(Controller)来建立模型与视图的 ...

  9. Struts2框架详解(二)

    Struts2结果页面配置 全局结果页面 场景:多个action,有相同的方法返回值,且都到同一个结果页面 需求:创建两个action,执行默认的方法execute方法,让两个action的方法都返回 ...

最新文章

  1. FaceBook开源PyTorch3D:基于PyTorch的新3D计算机视觉库
  2. 关于Advisor注入
  3. 数据库MySQL关系模型之基本概念
  4. [转].NET下读取PDF文本
  5. 怎么把分钟转化成秒_怎么利用抖音短视频引流,手把手教你如何玩转抖音流量...
  6. 从JDK 6升级到JDK 7过程中遇到的一个问题(卸载rpm)
  7. 短信认证方案,用手机短信进行上网认证如何实现?
  8. awk 内嵌正则 提取字符串_使用awk提取字符串中的数字或字母
  9. gitlab更新配置无效_Gitlab 快速的搭建
  10. 直播丨如何通过APEX实现数据库自动晨检功能
  11. 旷视申请赴港IPO:阿里蚂蚁金服持股近30%
  12. 《How to Write and Publish a Scientfic Paper》 Chapter 1
  13. MATLAB绘图/数据的可视化
  14. SPSS学习 日记
  15. 手机APP如何访问局域网服务器
  16. 计算机考试当天准考证身份证丢失
  17. 首页大广告展示——淘淘商城(十六)
  18. css实现元素翻转(不是旋转)
  19. osgEarth编译
  20. 开发中常见的算法汇总之-基数排序

热门文章

  1. 【数字信号处理】序列傅里叶变换 ( 傅里叶变换实例 | 矩形窗函数 | 傅里叶变换 | 傅里叶变换幅频特性 | 傅里叶变换相频特性 )
  2. 【报错信息】Google Play 上架报错 ( Your app contains ads that do not comply with our Families ad | 退出亲子同乐计划 )
  3. 【C 语言】字符串拷贝 ( 优化指针操作 )
  4. 【Java 泛型】泛型用法 ( 泛型编译期擦除 | 上界通配符 <? extends T> | 下界通配符 <? super T> )
  5. 【Flutter】屏幕像素适配方案 ( flutter_screenutil 插件 )
  6. 【Google Play】正式版上架流程 ( 创建版本 | 设置国家地区 | 发布正式版 )
  7. 【运筹学】表上作业法 ( 示例 | 使用 “ 最小元素法 “ 找初始基可行解 )
  8. socket_循环发送消息
  9. [bzoj2815] [洛谷P2597] [ZJOI2012] 灾难
  10. C# 中泛型与非泛型?(摘)