Struts2配置异常错误处理(十六)下

简介: Struts2配置异常错误处理(十六)

三.二 配置异常处理


三.二.一 需要用 ExceptionMappingInterceptor


配置异常捕捉捕捉,需要用 ExceptionMappingInterceptor


  <interceptor name="exception" 
class="com.opensymphony.xwork2.interceptor.ExceptionMappingInterceptor"/>


已经配置在基本的拦截器栈里面了


 <!-- Basic stack -->
<interceptor-stack name="basicStack">
    <interceptor-ref name="exception"/>
    <interceptor-ref name="servletConfig"/>
    <interceptor-ref name="prepare"/>
    <interceptor-ref name="checkbox"/>
    <interceptor-ref name="datetime"/>
    <interceptor-ref name="multiselect"/>
    <interceptor-ref name="actionMappingParams"/>
    <interceptor-ref name="params"/>
    <interceptor-ref name="conversionError"/>
    <interceptor-ref name="deprecation"/>
</interceptor-stack>


不需要单独配置拦截器了


三.二.二 配置节点 <exception-mapping >


配置时,需要用到 <exception-mapping> </exception-mapping> 这个节点。


里面有两个属性,一个是 exception, 指明异常类型,是全限定名称,一个是 result, 返回视图。 其中这个result 返回视图,可以是全局result,也可以是局部result.


可以配置全局的异常处理,作为 <global-exception-mapping > 放在package 元素下,


也可以配置局部的异常处理,放在 action 元素下。


三.二.三 创建Action


修改方法 execException, 通过 throws 向外抛出


public String execException() throws Exception{
    if("两个蝴蝶飞".equals(comment)){
      throw new MyException("不能输入这个名字");
    }
    try{
      int c=(Integer.parseInt(comment))/0;
    }catch(NumberFormatException e){  
      //数字转换异常
      throw new NumberFormatException();
    }catch(NullPointerException e){ 
      //空指针异常
      throw new NullPointerException();
    }catch(ArithmeticException e){
      //算术异常
      throw new ArithmeticException();
    }catch(Exception e){
      throw new Exception();
    }
    return "exceptionshow";
  }


三.二.四 配置 struts.xml 文件


<package name="exception" extends="struts-default" namespace="/">
    <!-- 配置全局的result -->
    <global-results>
      <result name="number">/WEB-INF/exception/number.jsp</result>
      <result name="arithmetic">/WEB-INF/exception/arithmetic.jsp</result>
      <result name="npe">/WEB-INF/exception/npe.jsp</result>
      <result name="exception">/WEB-INF/exception/exception.jsp</result>
    </global-results>
    <!-- 配置全局的异常映射 -->
    <global-exception-mappings>
      <exception-mapping result="number" exception="java.lang.NumberFormatException"></exception-mapping>
      <exception-mapping result="npe" exception="java.lang.NullPointerException"></exception-mapping>
      <exception-mapping result="arithmetic" exception="java.lang.ArithmeticException"></exception-mapping>
      <exception-mapping result="exception" exception="java.lang.Exception"></exception-mapping>
    </global-exception-mappings>
    <action name="Exception_*" class="com.yjl.web.action.ExceptionAction" method="{1}">
      <result name="toMyException">/WEB-INF/content/myexception.jsp</result>
      <result name="exceptionshow">/WEB-INF/content/exceptionshow.jsp</result>
      <!-- 配置异常跳转页面 -->
      <result name="number">/WEB-INF/exception/number2.jsp</result>
      <result name="myException">/WEB-INF/exception/myexception.jsp</result>
      <!-- 配置局部的异常映射 -->
      <exception-mapping result="number" exception="java.lang.NumberFormatException"></exception-mapping>
      <exception-mapping result="myException" exception="com.yjl.exception.MyException"></exception-mapping>
    </action>
</package>


三.二.五 编写 jsp 页面


20200420102810423.png


三.二.五.一 编写 /content/number.jsp


<body>
全局number
</body>


三.二.五.二 编写 /content/arithmetic.jsp


<body>
算术异常
</body>


三.二.五.三 编写 /content/npe.jsp


<body>
空指向异常界面
</body>


三.二.五.四 编写 /content/exception.jsp


<body>
其他非常见性异常界面
</body>


三.二.五.五 编写 /content/number2.jsp


<body>
局部number2
</body>


三.二.五.六 编写 /content/myexception.jsp


<body>
自定义异常
</body>


三.二.六 重启服务器,测试运行


输入路径: http://localhost:8080/Struts_Exception/Exception_toException


当输入两个蝴蝶飞时, 会显示自定义异常


2020042010282893.png


2020042010283376.png


当输入非数字,如字母 abc时, 全局和局部都 配置了,以局部为准


20200420102846626.png


20200420102851343.png


当输入正常数字,如 207 时


20200420102856263.png


20200420102900159.png


异常信息处理正确,跳转正确


三.二.七 显示错误信息


如将自定义异常信息给改变了: 重新编写 /content/myexception.jsp 页面


<body>
<!-- 输出异常信息 -->
<s:property value="exception.message"/> <br/>
<!-- 输出信息栈 -->
<s:property value="exceptionStack"/>
</body>


重启服务器,重新输入 两个蝴蝶飞, 就会显示错误信息了


20200420102905389.png


本章节代码链接为:


链接:https://pan.baidu.com/s/1uWATk85QCp7dT5kieG-ksQ 
提取码:3hmb 


谢谢您的观看!!!

相关文章
|
7月前
|
设计模式 开发框架 前端开发
SpringMVC原理分析 | Hello程序
SpringMVC原理分析 | Hello程序
42 0
|
前端开发 Java 应用服务中间件
Struts2配置异常错误处理(十六)上
Struts2配置异常错误处理(十六)
383 0
Struts2配置异常错误处理(十六)上
|
前端开发 API
Struts2实现类型转换器(十五)上
Struts2实现类型转换器(十五)
250 0
Struts2实现类型转换器(十五)上
|
前端开发 Java
Struts2实现类型转换器(十五)下
Struts2实现类型转换器(十五)
124 0
Struts2实现类型转换器(十五)下
|
XML Java Apache
配置struts-2.5.16必需jar包Struts2的特性变动
1、jar包的变动 必需jar包,旧版本:    必需jar包,新版本:    在struts-2.5.16版本的lib目录下没有xwork-core的jar包,原因是被合并到struts-core这个jar里了。
2055 0
|
Java
多模块Struts应用程序的几个问题(及部分解决方法)
Struts从1.1版本开始支持把应用程序分为多个模块,每个模块可以看作独立的应用程序,在带来方便的同时,我也发现了一些问题。比如有一个struts应用程序分了大约十个模块,现在有以下问题不知道大家一般是怎么解决的: 1、因为要进行验证,所以在每个模块对应的资源文件里都要有“errors.
1001 0
|
Java 前端开发 应用服务中间件