码迷,mamicode.com
首页 > 其他好文 > 详细

struts2学习笔记(6)------配置struts2中的异常处理

时间:2014-05-31 17:46:04      阅读:209      评论:0      收藏:0      [点我收藏+]

标签:c   style   class   blog   code   java   

我们平常的异常处理是直接在方法中手动捕捉异常,当捕捉到特定异常后,返回特定逻辑视图名。这样的缺点是代码与异常处理耦合太多,一旦要改变异常处理方式,需要修改代码!

      struts2提供给了一种更好的方式来处理异常------声明式的方式管理异常处理,我们可以通过再方法里将出现的异常throw出去,抛给struts2框架处理,然后再struts2中默认开启着异常映射功能,该功能在struts-default.xml中配置的一个拦截器,如下:

<interceptor name="exception" class="com.opensymphony.xwork2.interceptor.ExceptionMappingInterceptor" /> 
然后根据struts.xml配置的异常映射,转入指定的视图资源。


如何配置声明式异常处理

使用exception-mapping元素配置,该元素有两个属性:

exception:该属性指定该异常映射所设置的异常类型,一般是包名+异常名

result:该属性指定当Action出现该异常时,系统应该返回的result的逻辑视图名,跟result元素的name属性要对应。

异常映射根据<exception-mapping>出现的位置不同,分为两类:

局部异常映射:将exception-mapping元素作为action元素的子元素

全局异常映射:将exception-mapping元素作为global-exception-mappings元素的子元素配置。跟全局result类似,全局异常映射也是针对所有的Action的,如果局部跟全局配置了同一个异常类型,那么局部的会覆盖全部的。。。。

如果想要在页面上输出异常信息,可以使用struts2提供的标签:

<s:property value="exception"/>:输出异常对象本身。

<s:property value="exceptionStack" /> :输出异常堆栈信息。

还可以使用<s:property value="exception.message" />输出异常的message信息。

看一个小例子,对LoginAction改造。如下:

public class LoginAction{
	private String uname;
	private String pwd;
	public String getUname() {
		return uname;
	}
	public void setUname(String uname) {
		this.uname = uname;
	}
	public String getPwd() {
		return pwd;
	}
	public void setPwd(String pwd) {
		this.pwd = pwd;
	}
	
	public String login() throws Exception{
		if("user".equals(getUname())){
			throw new Exception("自定义异常····");
		}else if("sql".equals(getUname())){
			throw new java.sql.SQLException("用户名不能为sql");
		}else if("zhangsan".equals(getUname())&&"123".equals(getPwd())){
			ActionContext.getContext().getSession().put("username", uname);
			return "success";
		}else{
			return "error";
		}
	}
}

如果用户名是sql或者user都会抛出异常,否则走正常的登陆流程。。。

然后重点来了,在struts.xml配置对这俩异常的处理,如下:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
	"-//Apache Software Foundation//DTD Struts Configuration 2.1.7//EN"
	"http://struts.apache.org/dtds/struts-2.1.7.dtd">
<struts>
	<!-- 这句用来配置动态方法调用 -->
  <constant name="struts.enable.DynamicMethodInvocation" value="true" />
  <!-- 开发者模式 -->
   <constant name="struts.devMode" value="true" /> 
  	<package name="user" extends="struts-default" >
  	<!-- 全局result -->
  	<global-results>
  		<result name="show">/show.jsp</result>
  	</global-results>
  	<!-- 声明式异常处理全局配置 -->
  	<global-exception-mappings>
  		<exception-mapping result="show" exception="java.sql.SQLException"></exception-mapping>
  	</global-exception-mappings>
		<action name="loginAction" class="com.test.action.LoginAction" method="login">
		<!-- 声明式异常局部配置 -->
			<exception-mapping result="error" exception="java.lang.Exception"></exception-mapping>
			<result name="success">/success.jsp</result>
			<result name="error">/error.jsp</result>
		</action>
	</package>
</struts>	

如果是java.lang.Exception,就会跳转到error.jsp,如果是java.sql.SQLException,就会跳转到show.jsp


你可以在jsp上使用这几句话,打印出它的异常信息和堆栈信息:

<h1>异常信息:<s:property value="exception.message" /></h1>
    <h2><s:property value="exceptionStack" /></h2>

经测试,完美运行如下:

bubuko.com,布布扣





struts2学习笔记(6)------配置struts2中的异常处理,布布扣,bubuko.com

struts2学习笔记(6)------配置struts2中的异常处理

标签:c   style   class   blog   code   java   

原文地址:http://blog.csdn.net/jihaixiao8/article/details/27647579

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!