天天看點

詳解Java異常處理——自動異常處理

上篇部落格:詳解Java異常處理——程式設計式異常處理 介紹了程式設計式異常的處理,我們知道,用這種方法,在action中需要寫大量的關于try、catch的代碼。現在我們就使用struts架構的異常處理機制來解決這個問題。

還是使用上篇部落格的執行個體,其中大部分代碼不需要改變,下面隻給出改變的代碼。

目錄結構

詳解Java異常處理——自動異常處理

LoginAction.java

package struts;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;

public class LoginAction extends Action {

	@Override
	public ActionForward execute(ActionMapping mapping, ActionForm form,
			HttpServletRequest request, HttpServletResponse response)
			throws Exception {
		LoginActionForm laf = (LoginActionForm)form;
		String username = laf.getUsername();
		String password = laf.getPassword();
		
		UserManager userManager = new UserManager();
		userManager.login(username, password);
		return mapping.findForward("success");
	}

}

           

這個action中不再需要我們手動書寫try、catch等内容。

struts-config.xml

<?xml version="1.0" encoding="ISO-8859-1" ?>

<!DOCTYPE struts-config PUBLIC
          "-//Apache Software Foundation//DTD Struts Configuration 1.2//EN"
          "http://jakarta.apache.org/struts/dtds/struts-config_1_2.dtd">

<struts-config>
	<form-beans>
		<form-bean name="loginForm" type="struts.LoginActionForm"/>
	</form-beans>
	
	<!-- 這裡是全局的異常處理配置 -->
	<!-- <global-exceptions>
		<exception key="login.user.not.found" type="struts.UserNotFoundException" path="/error.jsp"/>
		<exception key="login.password.error" type="struts.PasswordErrorException" path="/error.jsp"/>
	</global-exceptions> -->
	
	<action-mappings>
		<action path="/login" 
				type="struts.LoginAction"
				name="loginForm"		
				scope="request"
				input="/error.jsp"		
				>
			<exception key="login.user.not.found" type="struts.UserNotFoundException" path="/error.jsp"/>
			<exception key="login.password.error" type="struts.PasswordErrorException" path="/error.jsp"/>
			 
			<forward name="success" path="/login.jsp" />
		</action>
	</action-mappings>
	
	 <message-resources parameter="resources.MessageResources" />
</struts-config>

           

頁面顯示的時候使用<html:errors/>标簽。其餘代碼不變。

運作結果:

詳解Java異常處理——自動異常處理

從結果可以看出,這種方式跟之前的程式設計式異常處理差不多,而我們需要書寫的代碼卻少了好多。其實,這些代碼并不是不需要,而是因為struts架構替我們封裝了,我們不在需要寫那些近似重複的代碼。但這種方式仍然有它的缺陷,我們可以看出,如果我們需要很多不同類型的異常類,那麼我們就需要建立很多類,這樣的結果可不是我們想要的。那麼,有沒有一種方式,既能滿足異常處理的需要,又能避免建這麼多類呢?

答案是肯定的,不過,得等下篇部落格繼續講解了。