Struts2中配置处理结果及异常处理
来源:互联网 发布:网络摄像头 监控软件 编辑:程序博客网 时间:2024/05/01 21:42
当Action处理用户请求结束后,控制器应该使用哪个视图资源生成响应呢?
这就必须使用<result…/>元素进行配置,该元素定义逻辑视图名和物理视图资源之间的映射关系。
理解处理结果
浏览者、控制器和视图资源之间的顺序图:
Action处理完用户请求后,并未直接将请求转发给任何具体的视图资源,而是返回一个逻辑视图(普通字符串),Struts2框架收到这个逻辑视图后,把请求转发到对应的视图资源,视图资源将处理结果呈现给用户。
配置结果
Struts2的Action处理用户请求结束后,返回一个普通字符串---逻辑视图名,必须在struts.xml文件中完成逻辑视图和物理视图的映射,才可让系统转到实际的视图资源。
Struts2的两种配置:
局部结果:将<result…/>作为<action…/>元素的子元素配置。
全局结果:将<result…/>作为<global-results…/>元素的子元素配置。
<result…/>元素需要指定两个属性:
name:该属性指定所配置的逻辑视图名。
type:该属性指定结果类型。
<result…/>片段:
<action name="login" class="org.crazyit.app.action.LoginAction"><!-- 定义三个逻辑视图和物理资源之间的映射 --><result name="success" type="dispatcher"> <param name=”location”>/thank_you.jsp</param></result></action>
<result…/>最简片段:
<action name="login" class="org.crazyit.app.action.LoginAction"><!-- 定义三个逻辑视图和物理资源之间的映射 --><result> /thank_you.jsp</result></action>
省略默认:
如果我们省略了<result…/>元素的name属性,系统将采用默认的name属性值,默认的name属性值为success。
如果我们省略了<result…/>元素的location参数,系统将会把<result…>…</result>中间的字符串当成实际视图资源;name属性默认值:success;type属性默认值:dispatcher。
结果类型
Struts2的结果类型要求实现com.opensymphony.xwork2.Result,这个结果是所有结果类型的通用接口。如果我们需要自己的结果类型,我们应该提供一个实现该接口的类,并且在struts.xml文件中配置该结果类型。
struts2-core-2.2.1.jar里的struts-default.xml文件默认提供了一系列的结果类型。
chain:Action链式处理结果类型
dispather:用于JSP整合的结果类型(默认)
redirect:用于直接跳转到其他URL的结果类型
redirect-action:用于直接跳转到其他Action的结果类型
stream:用于向浏览器返回一个InputStream(一般用于文件下载)
freemarker:用于FreeMarker整合的结果类型
plaintext:用于显示某个页面的原始代码的结果类型
chart:用于整合JFreeChart的结果类型
jsf:用于JSF整合的结果类型
httpheader:用于控制特殊的HTTP行为的结果类型
jasper:用于JasperReports整合的结果类型
tiles:用于Tiles整合的结果类型
velocity:用于Velocity整合的结果类型
xslt:用于XML/XSTL整合的结果类型
plaintext结果类型
用于输出资源视图源代码。
如果结果页面代码中包含了中文字符,使用plainText结果类型必须指定charSet参数,该参数指定输出页面所用的字符集。
使用plainText结果类型时可指定如下两个参数
location:指定实际的视图资源。
charSet:指定输出页面时所用的字符集。
redirect结果类型
dispatcher是将请求forward到指定的JSP资源;redirect是重定向到指定的视图资源,重定向的话浏览器的URL会刷新,请求参数、请求属性和前一个Action的处理结果全部丢失。
配置一个redirect,可以指定如下两个参数:
location:该参数指定Action处理完用户请求后跳转的地址。
parse:该参数指定是否允许在location参数值中使用表达式,该参数默认true。
redirectAction结果类型
redirectAction使用ActionMapperFactory提供的ActionMapper来重定向请求。
当需要让一个Action处理结束后,直接将请求重定向到另一个Action时,我们应该使用这种结果类型。
配置redirectAction,可以指定如下两个参数:
actionName:该参数指定重定向的Action名。
namespace:该参数指定需要重定向的Action所在的命名空间
通配符和属性配置结果
1.通配符示例:
<action name="crud_*" class="lee.CrudAction" method=”{1}”><!-- 定义三个逻辑视图和物理资源之间的映射 --><result name=”input”> /input.jsp</result><result> /{1}.jsp</result></action>
例如有一个crud_create.action的请求,系统将调用lee.CrudAction类的create方法来 处理用户请求。当Action处理用户请求结束后,配置了两个结果:当处理结果为input 跳转到/input.jsp;处理结果为success跳转到create.jsp。
2.属性配置结果示例:
<action name="delete" class="org.crazyit.app.action.SkillAction"><!-- 定义三个逻辑视图和物理资源之间的映射 --><result name="error">/empmanager/editSkill.jsp</result><result type=”redirect”>edit.action?skillName=${currentSkill.name}</result></action>
在上面的配置片段中,使用${currentSkill.name}表达式来指定结果视图资源。对于上面的表达式语法,要求在对应的Action实例里应该包含currentSkill属性且currentSkill属性必须包含name属性---否则,${currentSkill.name}表达式值将为null。
全局结果
<global-results><result name="success">/${target}.jsp</result></ global-results >
优先级:局部>全局
PreResultListener
一旦为Action添加了PreResultListener监听器,该监听器就可以在应用转入实际物理视图之前回调该监听器的beforeResult()方法;一旦为拦截器添加了PreResultListener监听器,该监听器会对该拦截器所拦截的所有Action起作用。
配置Struts2的异常处理
Action中的execute方法
public String execute() throws Exception{if (getUsername().equalsIgnoreCase("user")){throw new MyException("自定义异常");}if (getUsername().equalsIgnoreCase("sql")){throw new java.sql.SQLException("用户名不能为SQL");}if (getUsername().equals("crazyit.org")&& getPassword().equals("leegang") ){setTip("哈哈,服务器提示!");return SUCCESS;}else{return ERROR;}}
<?xml version="1.0" encoding="GBK"?><!DOCTYPE struts PUBLIC"-//Apache Software Foundation//DTD Struts Configuration 2.1.7//EN""http://struts.apache.org/dtds/struts-2.1.7.dtd"><struts><package name="lee" extends="struts-default"><!-- 定义全局结果映射 --><global-results><!-- 定义当sql、root两个逻辑异常都对应exception.jsp页 --><result name="sql">/exception.jsp</result><result name="root">/exception.jsp</result></global-results><!-- 定义全局异常映射 --><global-exception-mappings><!-- 当Action中遇到SQLException异常时,系统将转入name为sql的结果中--><exception-mapping exception="java.sql.SQLException" result="sql"/><!-- 当Action中遇到Exception异常时,系统将转入name为root的结果中--><exception-mapping exception="java.lang.Exception" result="root"/></global-exception-mappings><action name="login" class="org.crazyit.app.action.LoginAction"><!-- 定义局部异常映射, 当Action中遇到MyException异常时,系统将转入name为my的结果中--><exception-mapping exception="org.crazyit.app.exception.MyException"result="my"/><!-- 定义三个结果映射 --><result name="my">/exception.jsp</result><result name="error">/error.jsp</result><result name="success">/welcome.jsp</result></action><action name=""><result>.</result></action></package></struts>
如上述例子,配置中的异常与Action中的异常相同。
- Struts2中配置处理结果及异常处理
- Struts2-配置异常处理
- struts2--全局结果集和异常处理配置
- struts2中异常处理
- 配置Struts2的异常处理
- 配置Struts2的异常处理
- struts2配置之全局result及异常处理
- struts2配置之全局result及异常处理
- 4、struts2异常处理及全局异常与结果剖析、struts2模型驱动及分层体系架构
- struts2异常处理,global-results定义全局结果处理
- struts2异常处理,global-results定义全局结果处理
- 配置处理结果---struts2学习笔记
- struts2学习之---配置处理结果
- struts2处理结果类型
- struts2 处理结果类型
- struts2:处理结果类型
- struts2 处理结果
- 异常处理及convention---struts2学习笔记
- webkit开发环境的搭建
- rails 迁移的相关知识
- poj 1091 跳蚤 (数论,容斥原理)
- ******************** 野指针和内存泄露 ********************
- WPF依赖属性的当前值(Current Value),基值(Base Value)和本地值(Local Value) .
- Struts2中配置处理结果及异常处理
- tomcat dm 连不上数据库
- Redis安装与配置
- poj3243
- AIDL绑定到对方进程后,进程被杀后的现象调研
- Divein _ Trim函数的实现,去除字符串前后空格
- 读图:邮件营销vs社交媒体营销背后不可不知的事实
- ******************** const ********************
- wamp出现问题,logs/httpd.pid overwritten -- Unclean shutdown of previous Apache run?