猿教程 Logo

Struts2拦截器:exception拦截器

在我们的Web应用程序中,任何时候都可能会发生异常。

为了克服这个问题,struts 2提供了全局异常处理的机制,我们可以向用户显示全局结果。

Struts 2自动记录未捕获的异常,并将用户重定向到错误处理程序页面。


了解异常拦截器的内部工作

如果发生异常,它将被包装在ExceptionHolder中,并推送到这个值中,以便我们可以从结果中轻松访问异常对象。

建议将此拦截器作为第一个拦截器,以便它可以处理所有异常,无论是否是由其他拦截器抛出。

异常拦截器的参数

异常拦截器定义了3个参数。 所有都是可选的。

参数描述
logEnabled指定日志应该被启用。 你可以传递true/false。
logLevel指定日志级别。 它可能是trace, debug, info, warn, error, fatal.  默认日志级别是debug。
logCategory指定日志类别,例如。 com.mycompany.app 默认值为com.opensymphony.xwork2.interceptor.ExceptionMappingInterceptor ..

struts2中的异常处理示例

对于异常处理,我们在struts.xml文件中指定了全局结果和全局异常映射。

struts.xml

<?xml version="1.0" encoding="UTF-8" ?>  
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts  
 Configuration 2.1//EN" "http://struts.apache.org/dtds/struts-2.1.dtd">  
<struts>  
<package name="aa" extends="struts-default">  
  
<global-results>  
<result name="myresult">globalresult.jsp</result>  
</global-results>  
  
<global-exception-mappings>  
<exception-mapping result="myresult" exception="java.lang.Exception"></exception-mapping>  
</global-exception-mappings>  
  
<action name="login" class="com.Login">  
<result>welcome.jsp</result>  
<result name="error">error.jsp</result>  
</action>  
  
</package>  
</struts>

package的global-results子元素指定此包的全局结果。

global-result的result子元素指定将作为视图呈现给用户的结果页面。

package的global-exception-mappings子元素指定该包的所有操作的异常映射。

 在这个例子中,我们使用了Exception,它是许多异常类的父类,如IOException,ArithmeticException等。它意味着如果发生任何异常,将会调用指定的结果。

请注意,在全局异常映射之前必须指定全局结果,因为我们在全局异常映射中使用全局结果。


显示异常

我们可以通过打印exception或者exceptionStack在浏览器上显示异常。

exception对象打印异常名称,而exceptionStack打印异常详细信息。

globalresult.jsp

<p>Exception Name: <s:property value="exception" /> </p>  
<p>Exception Details: <s:property value="exceptionStack" /></p>


异常处理的完整示例

完成此示例的其他所需资源如下:

  1. 输入页(index.jsp)

  2. action类(Login.java)

  3. 查看组件(globalresult.jsp,welcome.jsp和error.jsp)


1)创建index.jsp进行输入

这个jsp页面使用struts UI标签创建一个表单。 它从用户接收名称和密码。

index.jsp

<%@ taglib uri="/struts-tags" prefix="s" %>  
  
<s:form action="login">  
<s:textfield name="name" label="Name"></s:textfield>  
<s:password name="password" label="Password"></s:password>  
<s:submit value="login"></s:submit>  
</s:form>

2)创建action类

此action类包含两个字段:名称和密码,一个方法execute。 在这里,如果password匹配"struts",我们将抛出异常self。

Login.java

package com;
public class Login {
private String name,password;
//getters and setters

public String execute(){
	if(password.equals("struts")){
		int a=12/0;//If you comment this, exception will not occur
		return "success";
	}else
		return "error";
}
}

3)创建视图组件

有三个视图组件globalresult.jsp显示异常消息,welcome.jsp显示带有用户名的欢迎消息,error.jsp显示错误消息。

globalresult.jsp

<%@ taglib uri="/struts-tags" prefix="s" %>  
  
Sorry an exception occured!  
<p>Exception Name: <s:property value="exception" /> </p>  
<p>Exception Details: <s:property value="exceptionStack" /></p>  
<form>  
<input type="button" value="back" onclick="history.back()">  
</form>

welcome.jsp

<%@ taglib uri="/struts-tags" prefix="s" %>  
Welcome, <s:property value="name"/>

error.jsp

Sorry username or password error!  
<jsp:include page="index.jsp"></jsp:include>

 



版权声明:本站所有教程均为本站原创或翻译,转载请注明出处,请尊重他人劳动果实。请记住本站地址:www.yuanjiaocheng.net (猿教程) 作者:卿文刚
本文标题: C#环境
本文地址:http://www.yuanjiaocheng.net/Struts/struts-2-exception-handling-exception-interceptor.html