Struts2之异常处理

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


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

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

//自定义异常
public class MyException extends Exception {
	
	private String message;
	
	public MyException(String message)
	{
		super(message);
		this.message = message ;
	}

	public String getMessage() {
		return message;
	}

	public void setMessage(String message) {
		this.message = message;
	}
	

}

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

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

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.      
  6. <struts> 
  7.      
  8.    <package name="struts2" extends="struts-default">     
  9.       
  10.       <!-- name="login" 这个名字可以自己定义 要和 提交表单的那个action名字一致 --> 
  11.       
  12.       <action name="login" class="com.struts2.LoginAction"> 
  13.              
  14.             <!-- 局部 异常处理 --> 
  15.             <exception-mapping result="myexception1" 
  16.                exception="com.exception.MyException">            
  17.             </exception-mapping> 
  18.             <!-- 异常跳转的界面 --> 
  19.             <result name="myexception1">/error.jsp</result> 
  20.               
  21.               
  22.             <!-- name="success"  
  23.                                   这个名字要和LoginAction.java 的 execute() 方法的返回值一致  
  24.             --> 
  25.             <result name="success">/result.jsp</result> 
  26.              
  27.       </action> 
  28.     
  29.    </package>  
  30.  
  31. </struts> 
<?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>
    
   <package name="struts2" extends="struts-default">    
     
      <!-- name="login" 这个名字可以自己定义 要和 提交表单的那个action名字一致 -->
     
      <action name="login" class="com.struts2.LoginAction">
            
            <!-- 局部 异常处理 -->
            <exception-mapping result="myexception1"
               exception="com.exception.MyException">           
            </exception-mapping>
            <!-- 异常跳转的界面 -->
            <result name="myexception1">/error.jsp</result>
             
             
            <!-- name="success" 
                                  这个名字要和LoginAction.java 的 execute() 方法的返回值一致 
            -->
            <result name="success">/result.jsp</result>
            
      </action>
   
   </package> 

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

</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> 
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib prefix="s"  uri="/struts-tags"%>  
<html>
  <body>
    <!-- 这个exception 是 exception="com.exception.MyException" -->
    <s:property value="exception.message"/>
  </body>
</html>

小结:

局部异常处理比全局异常处理高,并且可覆盖全局异常处理,如果定义了全局异常映射,那么会对所有的Action生效,反之定义了局部异常映射则会对当前Action生效,

如果在全局区域和局部区域定义了相同的异常映射,首先去局部异常区域找result结果页面,如果找到了,则直接跳转到错误结果页面,不管全局有没有相同的结果,都被局部所覆盖,如果在局部区域没找到,则去全局区域找。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值