Struts2 异常处理

来源:互联网 发布:什么是网络架构 编辑:程序博客网 时间:2024/05/21 07:02
Struts提供了一种更简单的方法来处理未捕获的异常,并将用户重定向到专门的错误页面。你可以很轻松地配置Struts为不同的异常显示不同的错误页面。
Struts通过使用“exception”拦截器来使异常处理变得简单。“exception”拦截器被作为默认堆栈的一部分包含其中,所以你不必对它做任何额外的配置。它提供开箱即用的功能可供使用。让我们看一个简单的Hello World示例,在HelloWorldAction.java文件中进行一些修改。在这里我们有意的给HelloWorldAction操作代码中引入一个NullPointer异常。

package cn.w3cschool.struts2;import com.opensymphony.xwork2.ActionSupport;public class HelloWorldAction extends ActionSupport{   private String name;   public String execute(){      String x = null;      x = x.substring(0);      return SUCCESS;   }      public String getName() {      return name;   }   public void setName(String name) {      this.name = name;   }}

让我们保持HelloWorld.jsp的内容如下:

<%@ page contentType="text/html; charset=UTF-8" %><%@ taglib prefix="s" uri="/struts-tags" %><html><head><title>Hello World</title></head><body>   Hello World, <s:property value="name"/></body></html>

以下是index.jsp的内容:

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"   pageEncoding="ISO-8859-1"%><%@ taglib prefix="s" uri="/struts-tags"%>   <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><title>Hello World</title></head><body>   <h1>Hello World From Struts2</h1>   <form action="hello">      <label for="name">Please enter your name</label><br/>      <input type="text" name="name"/>      <input type="submit" value="Say Hello"/>   </form></body></html>

你的struts.xml应该如下:

<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE struts PUBLIC   "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"   "http://struts.apache.org/dtds/struts-2.0.dtd"><struts><constant name="struts.devMode" value="true" />   <package name="helloworld" extends="struts-default">           <action name="hello"          class="cn.w3cschool.struts2.HelloWorldAction"          method="execute">         <result name="success">/HelloWorld.jsp</result>      </action>   </package></struts>

现在右键单击项目名称,然后单击“Export”>“WAR File”创建WAR文件。然后在Tomcat的webapps目录中部署这个WAR文件。最后,启动Tomcat服务器并尝试访问URL http://localhost:8080/HelloWorldStruts2/index.jsp。将显示如下页面:

Hello World输入

输入值“Struts2”并提交页面。你应该看到以下页面:

输出异常

如上面的例子所示,默认exception拦截器处理异常的工作非常好。现在让我们为异常创建一个专门的错误页面,一个名为Error.jsp的文件,包含以下内容:

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"pageEncoding="ISO-8859-1"%><%@ taglib prefix="s" uri="/struts-tags"%><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><title></title></head><body>   This is my custom error page</body></html>

现在,让我们配置Struts在异常情况下使用此错误页面,修改struts.xml如下:

<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE struts PUBLIC   "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"   "http://struts.apache.org/dtds/struts-2.0.dtd"><struts><constant name="struts.devMode" value="true" />   <package name="helloworld" extends="struts-default">         <action name="hello"          class="cn.w3cschool.struts2.HelloWorldAction"          method="execute">         <exception-mapping exception="java.lang.NullPointerException"         result="error" />         <result name="success">/HelloWorld.jsp</result>         <result name="error">/Error.jsp</result>      </action>   </package></struts>

如上面的例子所示,现在我们已经配置Struts为NullPointerException使用专门的Error.jsp。如果现在重新运行程序,将看到以下输出页面:

Hello World输出

除此之外,Struts2框架还带有一个“logging”拦截器来记录异常。通过启用记录器记录未捕获的异常,我们可以轻松地查看堆栈跟踪记录,并找出哪里出错了。

全局异常映射

我们已经看到了如何处理特定于action的异常。现在,我们可以设置一个全局异常,这将应用于所有的action。例如,为了捕获相同的NullPointerException异常,我们可以在<package...>标签中添加<global-exception-mappings...>标签,并在struts.xml文件的<action...>标签中添加<result...>标签,如下:

<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE struts PUBLIC   "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"   "http://struts.apache.org/dtds/struts-2.0.dtd"><struts><constant name="struts.devMode" value="true" />   <package name="helloworld" extends="struts-default">      <global-exception-mappings>         <exception-mapping exception="java.lang.NullPointerException"         result="error" />      </global-exception-mappings>      <action name="hello"          class="cn.w3cschool.struts2.HelloWorldAction"          method="execute">         <result name="success">/HelloWorld.jsp</result>         <result name="error">/Error.jsp</result>      </action>   </package></struts>
0 0
原创粉丝点击