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

上篇博客:詳解Java異常處理——編程式異常處理 介紹了編程式異常的處理,我們知道,用這種方法,在action中需要寫大量的關於trycatch的代碼。現在我們就使用struts框架的異常處理機制來解決這個問題。

 

還是使用上篇博客的實例,其中大部分代碼不需要改變,下面只給出改變的代碼。

 

目錄結構



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/>標籤。其餘代碼不變。


運行結果:



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


答案是肯定的,不過,得等下篇博客繼續講解了。



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章