上篇博客:详解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>
运行结果:
从结果可以看出,这种方式跟之前的编程式异常处理差不多,而我们需要书写的代码却少了好多。其实,这些代码并不是不需要,而是因为struts框架替我们封装了,我们不在需要写那些近似重复的代码。但这种方式仍然有它的缺陷,我们可以看出,如果我们需要很多不同类型的异常类,那么我们就需要新建很多类,这样的结果可不是我们想要的。那么,有没有一种方式,既能满足异常处理的需要,又能避免建这么多类呢?
答案是肯定的,不过,得等下篇博客继续讲解了。