【学习笔记】Struts2之配置处理结果
Action只是Struts2控制器的一部分,所以它不能直接生成对浏览者的响应。Action只负责生成响应的视图组件,通常是JSP页面,而Action会为JSP页面提供显示数据。
Action处理完用户的请求后,将会返回一个普通字符串(称之为逻辑视图),Struts2框架收到这个逻辑视图后,把请求转发到对应的视图资源,视图资源将结果呈现给用户。必须在struts.xml文件中完成逻辑视图和物理视图资源的映射,才可以让系统转到实际的视图资源。
一、配置结果
Struts2在struts.xml中使用<result…/>元素来配置结果,根据该元素所在位置的不同,Struts2提供了两个结果。
- 局部结果:将<result…/>作为<action…/>元素的子元素配置。
- 全局结果:将<result…/>作为<global-result…/>元素的子元素配置。
配置<result…/>元素时通常需要指定如下两个属性:
- name:该属性指定所配置的逻辑视图名,缺省值为success。
- type:该属性指定结果类型,缺省值为dispatcher(用于与JSP整合的结果类型),可以通过修改配置文件改变默认的结果类型。
典型的<result…/>配置片段如下:
<action name="abyss" class="abyss.LoginAction" >
<result name="success" type="dispatcher" >
<param name="location">/thank.jsp</param>
</result>
</action>对于不同的结果类型,<param../>元素的name属性的参数是不同的,在此处<param…/>元素的name属性可以为如下两个值:
- location:该参数指定了该逻辑视图对应的实际视图资源。
- parse:该参数指定是否允许在实际视图名称中使用OGNL表达式,该参数默认为true。
通常无须指定parse参数的值,所以常常采用一下简化形式来配置实际视图资源。
<action name="Login" class="abyss.LoginAcion" >
<result name="success" type="dispatcher">/thank.jsp</result>
</action>
二、Struts2支持的结果类型
Struts2支持使用多种视图技术,例如JSP、Velocity和FreeMarker等。
结果类型决定了Action处理结束后,下一步将调用哪种视图资源来呈现处理结果。
Struts2的结果类型要求实现com.opensymphony.xwork2.Result,这是所有结果类型的通用接口,如果我们要自定义结果类型就需要实现该类。
Struts2默认提供了一些结果类型,位于struts-core-2.2.1.jar中的struts-default.xml中,下面是配置片段:
<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>从上面可以看出如果指定了default="true"属性,表示该类型是默认结果类型。
三、Action属性配置视图资源
配置<result…/>元素时,可以使用${属性名}的方式来指定视图资源。${属性名}里的属性名就是对应Action实例里的属性,并且还可以使用完全的OGNL表达式,即${属性名.属性名.属性名}。例如:
<action name="login" class="org.crazyit.app.action.LoginAction">
<result name="success">/${result}.jsp</result>
</action>其中视图资源由LoginAction类中的result属性决定的,如果LoginAction类中没有result属性,则值为null。
四、使用preResultListener
PreResultListener是一个监听器接口,它可以在Action完成控制处理之后,系统转入实际的物理视图之间被回调。(可以理解为,定义一个函数beforeResult(),在页面转到视图资源之前,系统会自动调用该函数)。
PreResultListener监听器可由Action和拦截器添加。一旦为Action添加PreResultListenr监听器,该监听器会自动调用beforeResult()方法;一旦为拦截器添加了PreResultListener监听器,该监听器会对该拦截器所拦截的所有Action起作用。
在Action中添加示例如下:
ActionContext.getContext().getActionInvocation().addPreResultListener(
new PreResultListener(){ @Override
public void beforeResult(ActionInvocation invocation, String resultCode) {
invocation.getInvocationContext().put("extra", new Date()+"由"+resultCode+
"逻辑视图名转入");
} });
【学习笔记】Struts2之配置处理结果的更多相关文章
- 学习笔记_J2EE_SpringMVC_03_注解配置_@RequestMapping用法
@RequestMappingde的用法 摘要: 主要介绍注解@RequestMapping的用法 一.@RequestMapping 简介 在Spring MVC 中使用 @RequestMappi ...
- ASP.NET MVC 学习笔记-7.自定义配置信息 ASP.NET MVC 学习笔记-6.异步控制器 ASP.NET MVC 学习笔记-5.Controller与View的数据传递 ASP.NET MVC 学习笔记-4.ASP.NET MVC中Ajax的应用 ASP.NET MVC 学习笔记-3.面向对象设计原则
ASP.NET MVC 学习笔记-7.自定义配置信息 ASP.NET程序中的web.config文件中,在appSettings这个配置节中能够保存一些配置,比如, 1 <appSettin ...
- go微服务框架kratos学习笔记五(kratos 配置中心 paladin config sdk [断剑重铸之日,骑士归来之时])
目录 go微服务框架kratos学习笔记五(kratos 配置中心 paladin config sdk [断剑重铸之日,骑士归来之时]) 静态配置 flag注入 在线热加载配置 远程配置中心 go微 ...
- Qt5学习笔记(1)-环境配置(win+64bit+VS2013)
Qt5学习笔记(1)-环境配置 工欲善其事必先-不装-所以装软件 久不露面,赶紧打下酱油. 下载 地址:http://download.qt.io/ 这个小网页就可以下载到跟Qt有关的几乎所有大部分东 ...
- MVC缓存OutPutCache学习笔记 (一) 参数配置
OutPutCache 参数详解 Duration : 缓存时间,以秒为单位,这个除非你的Location=None,可以不添加此属性,其余时候都是必须的. Location : 缓存放置的位置; 该 ...
- 树莓派学习笔记——USB wifi配置指南
0 前言 树莓派既能够使用有线网络又能够无线网络,假设使用有线网络不方便的话能够借助USB wifi无线网卡让树莓派也插上无线"翅膀". 可是和使用有线网络即插即用的方式不 ...
- 驱动开发学习笔记. 0.01 配置arm-linux-gcc 交叉编译器
驱动开发读书笔记. 0.01 配置arm-linux-gcc 交叉编译器 什么是gcc: 就像windows上的VS 工具,用来编译代码,具体请自己搜索相关资料 怎么用PC机的gcc 和 arm-li ...
- struts2框架学习笔记2:配置详解
核心配置文件: <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE struts PUBLIC ...
- Struts2学习笔记(三):result配置的各项视图转发类型
Struts 1: <action path="/user" type="org.sunny.user.action.UserAction" ...> ...
- 深度学习笔记------linux下配置安装caffe-cpu only模式
本文适合初学者学习配置caffe的最简单方法.这是我在看了网上各种大神的方法后总结的最傻瓜式的配置方法了. 本人也是在不断地配置caffe过程中受打击与成长@.@ 第一步.配置caffe所需的依赖环境 ...
随机推荐
- 2016 华南师大ACM校赛 SCNUCPC 非官方题解
我要举报本次校赛出题人的消极出题!!! 官方题解请戳:http://3.scnuacm2015.sinaapp.com/?p=89(其实就是一堆代码没有题解) A. 树链剖分数据结构板题 题目大意:我 ...
- C语言的fopen函数(文件操作/读写)
头文件:#include <stdio.h> fopen()是一个常用的函数,用来以指定的方式打开文件,其原型为: FILE * fopen(const char * path, c ...
- HTML5 & 三年二班周杰伦
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- 将 instance 连接到 flat_net - 每天5分钟玩转 OpenStack(88)
上一节我们创建了 "flat_net",本节将在此网络中部署 instance 并验证连通性. launch 新的 instance “cirros-vm1”,选择网络 falt_ ...
- [LeetCode] Distinct Subsequences 不同的子序列
Given a string S and a string T, count the number of distinct subsequences of T in S. A subsequence ...
- [转载]Web前端开发工程师编程能力飞升之路
[背景] 如果你是刚进入web前端研发领域,想试试这潭水有多深,看这篇文章吧:如果你是做了两三年web产品前端研发,迷茫找不着提高之路,看这篇文章吧:如果你是四五年的前端开发高手,没有难题能难得住你的 ...
- SQLite剖析之存储模型
前言 SQLite作为嵌入式数据库,通常针对的应用的数据量相对于DBMS的数据量小.所以它的存储模型设计得非常简单,总的来说,SQLite把一个数据文件分成若干大小相等的页面,然后以B树的形式来组织这 ...
- python学习之路 第三天
1.set集合:去掉重复字段 set.difference()找出不同并创建一个新的集合,不改变原来集合: set.difference_update() 改变原来集合,剔除掉括号内容: set.di ...
- 给空签名包进行签名以及找不到keystore证书链问题的解决方案
转 http://blog.csdn.net/u011106842/article/details/49683865
- android studio 集成微信登录
参考: 1.http://blog.csdn.net/suma_sun/article/details/50752528 2.这个更全面一点 : http://www.jb51.net/article ...