课程表

Struts2 教程

Struts2 标签

Struts2 集成

工具箱
速查手册

Struts2 异常处理

当前位置:免费教程 » Java相关 » Struts2
Struts提供了一种更简单的方法来处理未捕获的异常,并将用户重定向到专门的错误页面。你可以很轻松地配置Struts为不同的异常显示不同的错误页面。
Struts通过使用“exception”拦截器来使异常处理变得简单。“exception”拦截器被作为默认堆栈的一部分包含其中,所以你不必对它做任何额外的配置。它提供开箱即用的功能可供使用。让我们看一个简单的Hello World示例,在HelloWorldAction.java文件中进行一些修改。在这里我们有意的给HelloWorldAction操作代码中引入一个NullPointer异常。

  1. package com.w3xue.struts2;
  2.  
  3. import com.opensymphony.xwork2.ActionSupport;
  4.  
  5. public class HelloWorldAction extends ActionSupport{
  6. private String name;
  7.  
  8. public String execute(){
  9. String x = null;
  10. x = x.substring(0);
  11. return SUCCESS;
  12. }
  13. public String getName() {
  14. return name;
  15. }
  16.  
  17. public void setName(String name) {
  18. this.name = name;
  19. }
  20. }

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

  1. <%@ page contentType="text/html; charset=UTF-8" %>
  2. <%@ taglib prefix="s" uri="/struts-tags" %>
  3. <html>
  4. <head>
  5. <title>Hello World</title>
  6. </head>
  7. <body>
  8. Hello World, <s:property value="name"/>
  9. </body>
  10. </html>

以下是index.jsp的内容:

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

你的struts.xml应该如下:

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!DOCTYPE struts PUBLIC
  3. "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
  4. "http://struts.apache.org/dtds/struts-2.0.dtd">
  5. <struts>
  6. <constant name="struts.devMode" value="true" />
  7. <package name="helloworld" extends="struts-default">
  8. <action name="hello"
  9. class="com.w3xue.struts2.HelloWorldAction"
  10. method="execute">
  11. <result name="success">/HelloWorld.jsp</result>
  12. </action>
  13.  
  14. </package>
  15. </struts>

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

Hello World输入

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

输出异常

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

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

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

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!DOCTYPE struts PUBLIC
  3. "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
  4. "http://struts.apache.org/dtds/struts-2.0.dtd">
  5. <struts>
  6. <constant name="struts.devMode" value="true" />
  7. <package name="helloworld" extends="struts-default">
  8. <action name="hello"
  9. class="com.w3xue.struts2.HelloWorldAction"
  10. method="execute">
  11. <exception-mapping exception="java.lang.NullPointerException"
  12. result="error" />
  13. <result name="success">/HelloWorld.jsp</result>
  14. <result name="error">/Error.jsp</result>
  15. </action>
  16.  
  17. </package>
  18. </struts>

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

Hello World输出

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

全局异常映射

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

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!DOCTYPE struts PUBLIC
  3. "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
  4. "http://struts.apache.org/dtds/struts-2.0.dtd">
  5. <struts>
  6. <constant name="struts.devMode" value="true" />
  7. <package name="helloworld" extends="struts-default">
  8.  
  9. <global-exception-mappings>
  10. <exception-mapping exception="java.lang.NullPointerException"
  11. result="error" />
  12. </global-exception-mappings>
  13.  
  14. <action name="hello"
  15. class="com.w3xue.struts2.HelloWorldAction"
  16. method="execute">
  17. <result name="success">/HelloWorld.jsp</result>
  18. <result name="error">/Error.jsp</result>
  19. </action>
  20.  
  21. </package>
  22. </struts>
转载本站内容时,请务必注明来自W3xue,违者必究。
 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号