三.二 配置异常处理
三.二.一 需要用 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 页面
三.二.五.一 编写 /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
当输入两个蝴蝶飞时, 会显示自定义异常
当输入非数字,如字母 abc时, 全局和局部都 配置了,以局部为准
当输入正常数字,如 207 时
异常信息处理正确,跳转正确
三.二.七 显示错误信息
如将自定义异常信息给改变了: 重新编写 /content/myexception.jsp 页面
<body> <!-- 输出异常信息 --> <s:property value="exception.message"/> <br/> <!-- 输出信息栈 --> <s:property value="exceptionStack"/> </body>
重启服务器,重新输入 两个蝴蝶飞, 就会显示错误信息了
本章节代码链接为:
链接:https://pan.baidu.com/s/1uWATk85QCp7dT5kieG-ksQ 提取码:3hmb
谢谢您的观看!!!