• Struts2 异常处理


    Struts提供了一个更简单的方式来处理未捕获的异常,并将用户重定向到一个专门的错误页面。您可以轻松地Struts配置到不同的异常有不同的错误页面。

    Struts的异常处理所使用的“exception”拦截容易。“exception”拦截器作为默认的栈的一部分,所以不必做任何额外的配置。它可为准备使用的盒。让我们看到了一个简单的Hello World示例进行一些修改在HelloWorldAction.java文件。在这里,我们特意推出了一个空指针异常在我们HelloWorldAction动作代码。

    package com.yiibai.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.yiibai.struts2.HelloWorldAction" 
             method="execute">
             <result name="success">/HelloWorld.jsp</result>
          </action>
    
       </package>
    </struts>

    现在右击项目名称,并单击Export > WAR File创建一个WAR文件。然后部署此WAR在Tomcat的webapps目录下。最后,启动Tomcat 服务器和尝试访问URL http://localhost:8080/HelloWorldStruts2/index.jsp。这会给出以下画面:

    Hello World Input

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

    Exception Output

    在上面的例子所示,默认的异常拦截器做了非常出色的处理异常。现在,让我们创建一个专用的错误页面,我们的例外。创建一个文件名为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>

    Let us now configure Struts to use this this error page in case of an exception. Let us modify thestruts.xml as follows:

    <?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.yiibai.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使用专用error.jsp的NullPointerException异常。如果现在重新运行该程序,现在看到下面的输出:

    Hello World Output

    此外,Struts2 框架自带的“日志”拦截记录异常。使记录器记录的未捕获异常,我们可以很容易地看堆栈跟踪和工作出了什么错误。

    全局异常映射:

    我们已经看到了我们可以处理特定的异常行动。我们可以设置一个例外,全局将适用于所有的行动。例如,要捕获 NullPointerException异常,我们可以添加<global-exception-mappings...>标签里面<package...>标签和其<result...>标签应加在<行动.. >标记在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">
    
          <global-exception-mappings>
             <exception-mapping exception="java.lang.NullPointerException"
             result="error" />
          </global-exception-mappings>
    
          <action name="hello" 
             class="com.yiibai.struts2.HelloWorldAction" 
             method="execute">
             <result name="success">/HelloWorld.jsp</result>
             <result name="error">/Error.jsp</result>
          </action>
    
       </package>
    </struts>
  • 相关阅读:
    Spring学习(1):侵入式与非侵入式,轻量级与重量级
    集群结构、分布式结构、单机结构
    使用Idea工具创建Maven WebApp项目
    文件上传:CommonsMultipartResolver
    Memcached
    Window下部署MySql数据库
    HashCode详解
    JDK源码分析:Object.java
    二进制运算
    关于打印日志几个方法的列举
  • 原文地址:https://www.cnblogs.com/borter/p/9502195.html
Copyright © 2020-2023  润新知