Struts 2异常处理-异常拦截器

  1. Struts 2异常处理
  2. Struts 2中的异常处理示例
在我们的Web应用程序中, 随时可能会发生异常。
为了克服这个问题, Struts 2提供了一种全局异常处理机制, 可以在其中向用户显示全局结果。
Struts 2自动记录未捕获的异常, 并将用户重定向到错误处理程序页面。
了解异常拦截器的内部工作
如果发生异常, 则将其包装在ExceptionHolder中并推送到valuestack中, 以便我们可以轻松地从结果中访问异常对象。
建议将此拦截器设置为第一个拦截器, 以便无论其他拦截器是否抛出该异常, 它都可以处理所有异常。异常拦截器的参数为异常拦截器定义了3个参数。所有都是可选的。
Parameter Description
logEnabled 指定应启用或禁用日志。你可以传递对或错。
logLevel 指定日志级别。它可能是跟踪, 调试, 信息, 警告, 错误, 致命的。默认日志级别为调试。
logCategory 指定日志类别, 例如。 com.mycompany.app。默认值为com.opensymphony.xwork2.interceptor.ExceptionMappingInterceptor.。
Struts 2中的异常处理示例
对于异常处理, 我们在struts.xml文件中指定global-result和global-exception-mappings。
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>

程序包的global-results子元素指定此程序包的global-result。
global-result的result子元素指定将作为视图呈现给用户的结果页面。
程序包的global-exception-mappings子元素为该程序包的所有操作指定异常映射。
【Struts 2异常处理-异常拦截器】global-exception-mapping的exception-mapping子元素映射给定异常类型的给定结果。在此示例中, 我们使用的Exception是许多异常类(例如IOException, ArithmeticException等)的父类。这意味着如果发生任何异常, 将调用指定的结果。
注意, 因为我们在global-exception-mappings中使用global result, 所以必须在global-exception-mappings之前指定global-results。显示异常
我们可以通过打印exception或exceptionStack在浏览器上显示异常。
异常对象显示异常名称, exceptionStack显示异常详细信息。
globalresult.jsp
< p> Exception Name: < s:property value="http://www.srcmini.com/exception" /> < /p> < p> Exception Details: < s:property value="http://www.srcmini.com/exceptionStack" /> < /p>

异常处理的完整示例
完成此示例所需的其他资源如下:
  1. 输入页面(index.jsp)
  2. 动作类(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="http://www.srcmini.com/login"> < /s:submit> < /s:form>

2)创建动作类
该动作类包含两个字段名称和密码, 以及一个执行方法。在这里, 如果密码匹配strut, 我们将抛出异常自我。
这是一个虚拟的示例, 如果你在execute方法中注释提到的行, 则不会发生异常。
Login.java
package com; public class Login { private String name, password; //getters and setterspublic 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="http://www.srcmini.com/exception" /> < /p> < p> Exception Details: < s:property value="http://www.srcmini.com/exceptionStack" /> < /p> < form> < input type="button" value="http://www.srcmini.com/back" onclick="history.back()"> < /form>

welcome.jsp
< %@ taglib uri="/struts-tags" prefix="s" %> Welcome, < s:property value="http://www.srcmini.com/name"/>

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

下载此示例(使用不带JAR的Eclipse IDE开发)
下载此示例(使用Myeclipse IDE开发)

    推荐阅读