上篇部落格:詳解Java異常處理——程式設計式異常處理 介紹了程式設計式異常的處理,我們知道,用這種方法,在action中需要寫大量的關于try、catch的代碼。現在我們就使用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架構替我們封裝了,我們不在需要寫那些近似重複的代碼。但這種方式仍然有它的缺陷,我們可以看出,如果我們需要很多不同類型的異常類,那麼我們就需要建立很多類,這樣的結果可不是我們想要的。那麼,有沒有一種方式,既能滿足異常處理的需要,又能避免建這麼多類呢?
答案是肯定的,不過,得等下篇部落格繼續講解了。