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输出{"":"","":""}
相关推荐
Struts2 Result 配置详解 Struts2 框架中 Result 配置是一种非常重要的配置,它直接影响着应用程序的执行结果。Result 配置通常用于定义 Action 的执行结果,例如将结果.redirect 到一个新的 URL,或者将结果....
本资料包包含的是《Struts2深入详解》一书的源码分析,涵盖了从第一章到第五章的内容,并附带了相关的jar包,方便读者结合理论与实践进行学习。 首先,让我们从第一章开始,Struts2的基础知识。这一章通常会介绍...
### Struts2配置详解 #### 一、总览 在深入了解Struts2的配置细节之前,我们先来简要概述一下Struts2框架的核心特点及其配置文件的基本结构。Struts2是一个基于MVC(Model-View-Controller)设计模式的Java Web...
Struts2框架详解 Struts2是Java Web开发中的一款广泛应用的开源MVC框架,它构建在Apache Struts 1的基础上,提供了更为强大的功能和更好的灵活性。Struts2旨在简化Web应用开发,通过将表现层与业务逻辑层解耦,提高...
学习Struts 2,你需要理解它的核心概念,熟悉Action、Interceptor、Result和配置管理。同时,掌握如何创建和配置Action,编写拦截器,以及如何利用OGNL在视图中动态展示数据。通过实际项目的练习,你可以更好地掌握...
Struts2是一个强大的Java web应用程序框架,用于构建和维护可扩展、易于维护的Web应用程序。它是Apache软件基金会的Apache Struts项目的一部分,基于MVC(Model-View-Controller)设计模式,提供了一种组织应用程序...
本深入详解将探讨Struts2的核心概念、工作原理、优势以及如何在实际项目中应用它。 Struts2是Apache软件基金会的一个开源项目,它在Struts1的基础上进行了许多改进,提供了更灵活的架构、更好的类型安全性和更丰富...
"Struts2 中 Struts.xml 配置文件详解" Struts2 中的 Struts.xml 配置文件是 Struts2 框架的核心配置文件,用于定义应用程序的行为和结构。在 Struts.xml 文件中,我们可以定义 package、action、interceptor、...
### Struts2入门实例教程详解 #### 一、环境搭建与基本配置 在开始学习Struts2框架之前,首先需要确保开发环境的正确搭建。根据提供的文档,所使用的开发工具为MyEclipse6,Web服务器为Tomcat6,Struts版本为...
### Struts2属性文件详解 #### struts.configuration 该属性用于指定加载Struts 2配置文件的配置文件管理器,默认值为`org.apache.struts2.config.DefaultConfiguration`,这是Struts 2默认的配置文件管理器。若...
2. Result标签:用于在Action执行后显示结果页面,如`s:result`。 3. Form标签:用于创建表单,如`s:form`。 4. Field标签:用于处理表单字段,如`s:textfield`、`s:password`、`s:checkbox`等。 5. Iterator标签:...
Struts2的核心组件包括Action、Result、Interceptor(拦截器)、ValueStack(值栈)等。Action是业务逻辑的执行者,Result负责处理Action执行后的结果,Interceptor用于在Action调用前后进行额外的操作,而...
2. **Result类型**: 结果类型定义了Action执行后的动作,比如转发、重定向、渲染视图等。Struts2提供了一些内置的结果类型,如dispatcher(用于转发到JSP页面),redirect(用于HTTP重定向)。 3. **Interceptor...
Struts2是一个流行的Java Web开发框架,用于构建MVC(模型-视图-控制器)架构的应用程序。在Struts2中,标签库是其强大的功能之一,它简化了JSP页面的编写,使得开发者能够更方便地与模型和控制器进行交互。本文将...
### Struts2中的Result与Type详解 #### 一、引言 在Struts2框架中,`Result`和`Type`是两个非常重要的概念。它们主要用于控制Action执行完毕后页面的跳转方式以及如何处理Action返回的结果。通过合理配置`Result`与...
在Struts2中,一个Action类对应一个HTTP请求,处理完请求后,会返回一个Result,决定后续的页面跳转。 2. **配置文件**:Struts2的配置文件通常为struts.xml,用于配置Action、结果类型、拦截器等。它可以是XML格式...