Struts 异常

       异常处理很重要,异常处理不是定义在验证阶段的,就拿登录这个功能来说吧,假如用户填入的信息都符合规范,通过了验证阶段,但去数据库中查询该用户信息时,发现数据库中没有与其匹配的信息,则会抛出异常,转向错误页面。

1、先来自定义一个异常,该异常继承Exception父类

  1. package com.exception ;    
  2. //自定义异常  
  3. public class MyException extends Exception {  
  4.       
  5.     private String message;        
  6.     public MyException(String message)  
  7.     {  
  8.         super(message);  
  9.         this.message = message ;  
  10.     }  
  11.   
  12.     public String getMessage() {  
  13.         return message;  
  14.     }  
  15.   
  16.     public void setMessage(String message) {  
  17.         this.message = message;  
  18.     }  
  19. }  

2、LoginAction类的部分代码,假设用户输入的账号和密码不是hello,world 则抛出异常

 

  1. public String execute() throws Exception  
  2. {  
  3.     if(!"hello".equals(usename) || !"world".equals(password))  {  
  4.         throw new MyException("用户名或密码错误,您发现了吧!");  
  5.     }        
  6.     return "success" ;  
  7. }  

3、异常分为:局部异常和全局异常

在struts.xml中声明捕捉异常,使其转成自定义错误提示界面。局部异常处理,定义在action标签内: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.    <package name="struts2" extends="struts-default">            
  7.       <!-- name="login" 这个名字可以自己定义 要和 提交表单的那个action名字一致 -->         
  8.       <action name="login" class="com.struts2.LoginAction">                
  9.             <!-- 局部 异常处理 -->  
  10.             <exception-mapping result="myexception1"  
  11.                exception="com.exception.MyException">             
  12.             </exception-mapping>  
  13.             <!-- 异常跳转的界面 -->  
  14.             <result name="myexception1">/error.jsp</result>   
  15.             <!-- name="success"   
  16.                      这个名字要和LoginAction.java 的 execute() 方法的返回值一致   
  17.             -->  
  18.             <result name="success">/result.jsp</result>                
  19.       </action>       
  20.    </package>     
  21. </struts>  

全局异常处理,定义在action标签外: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.    <package name="struts2" extends="struts-default">          
  7.       <!-- 全局 异常处理 -->  
  8.       <global-results>  
  9.           <result name="myexception1">/error.jsp</result>  
  10.       </global-results>          
  11.       <global-exception-mappings>  
  12.           <exception-mapping result="myexception1"  
  13.                exception="com.exception.MyException">             
  14.           </exception-mapping>  
  15.       </global-exception-mappings>         
  16.       <!-- name="login" 这个名字可以自己定义 要和 提交表单的那个action名字一致 -->         
  17.       <action name="login" class="com.struts2.LoginAction">
  18.             <!-- name="success"   
  19.                      这个名字要和LoginAction.java 的 execute() 方法的返回值一致   
  20.             -->  
  21.             <result name="success">/result.jsp</result>                
  22.       </action>      
  23.    </package>     
  24. </struts>  

4、错误页面error.jsp

  1. <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>  
  2. <%@ taglib prefix="s"  uri="/struts-tags"%>    
  3. <html>  
  4.   <body>  
  5.     <!-- 这个exception 是 exception="com.exception.MyException" -->  
  6.     <s:property value="exception.message"/>  
  7.   </body>  
  8. </html>  结:

       局部异常处理比全局异常处理高,并且可覆盖全局异常处理,如果定义了全局异常映射,那么会对所有的Action生效,反之定义了局部异常映射则会对当前Action生效,如果在全局区域和局部区域定义了相同的异常映射,首先去局部异常区域找result结果页面,如果找到了,则直接跳转到错误结果页面,不管全局有没有相同的结果,都被局部所覆盖,如果在局部区域没找到,则去全局区域找。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值