Struts通过使用“exception”拦截器来使异常处理变得简单。“exception”拦截器被作为默认堆栈的一部分包含其中,所以你不必对它做任何额外的配置。它提供开箱即用的功能可供使用。让我们看一个简单的Hello World示例,在HelloWorldAction.java文件中进行一些修改。在这里我们有意的给HelloWorldAction操作代码中引入一个NullPointer异常。
- package com.w3xue.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="com.w3xue.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。将显示如下页面:

输入值“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="com.w3xue.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。如果现在重新运行程序,将看到以下输出页面:

除此之外,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="com.w3xue.struts2.HelloWorldAction"
- method="execute">
- <result name="success">/HelloWorld.jsp</result>
- <result name="error">/Error.jsp</result>
- </action>
- </package>
- </struts>
转载本站内容时,请务必注明来自W3xue,违者必究。