详解Java异常处理——编程式异常处理

11 篇文章 0 订阅

 上篇博客:详解Java异常处理——简介 简单介绍了Java异常处理,这篇博客具体讲解Java异常处理过程——编程式异常处理。


编程式异常处理是以前我们经常用到的一种异常处理方法,简单点说,编程式异常处理就是用try、catch的方式截获异常以后,手工对异常进行处理。下面我以一个简单的登录实例为大家演示一下编程式异常处理具体是如何实现的。


目录结构



以下是几个核心类的代码。


UserManager.java 

package struts;
public class UserManager {
	public void login(String username, String password) {
		if (!"admin".equals(username)) {
			throw new UserNotFoundException();
		}
		
		if (!"admin".equals(password)) {
			throw new PasswordErrorException();
		}
		
	}
}


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;
import org.apache.struts.action.ActionMessage;
import org.apache.struts.action.ActionMessages;

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();
		ActionMessages messages = new ActionMessages();
		try {
			userManager.login(username, password);
			
			//创建国际化消息文本
			ActionMessage message = new ActionMessage("login.success", username);
			messages.add("login_success_1", message);

			//传递国际化消息
			this.saveMessages(request, messages);
			return mapping.findForward("success");
		}catch(UserNotFoundException e) {
			e.printStackTrace();
			//创建国际化消息文本
			ActionMessage error = new ActionMessage("login.user.not.found", username); 
			messages.add("error_1", error);
			
			//传递国际化消息
			this.saveErrors(request, messages);
		}catch(PasswordErrorException e) {
			e.printStackTrace();
			//创建国际化消息文本
			ActionMessage error = new ActionMessage("login.password.error");
			messages.add("error_2", error);
			
			//传递国际化消息
			this.saveErrors(request, messages);
		}
		return mapping.findForward("error");
	}

}

login.jsp

<%@ page language="java" contentType="text/html; charset=GB18030"
    pageEncoding="GB18030"%>
<%@ taglib uri="http://struts.apache.org/tags-html" prefix="html"%>   
<%@ taglib uri="http://struts.apache.org/tags-bean" prefix="bean"%>     
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=GB18030">
<title>Insert title here</title>
</head>
<body>
	<%-- <html:errors/> --%>
	<form action="login.do" method="post">
		用户名:<input type="text" name="username"><br>
		密码:<input type="password" name="password"></br>
		<input type="submit" value="登录">
	</form>
</body>
</html>

login_error.jsp

<%@ page language="java" contentType="text/html; charset=GB18030"
    pageEncoding="GB18030"%>
<%@ taglib uri="http://struts.apache.org/tags-html" prefix="html"%>   
<%@ taglib uri="http://struts.apache.org/tags-bean" prefix="bean"%>     
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=GB18030">
<title>Insert title here</title>
</head>
<body>
	<font color="red">
		<html:messages id="msg" property="error_1">
			<bean:write name="msg"/>
		</html:messages>
	</font>
	<font color="blue">
		<html:messages id="msg" property="error_2">
			<bean:write name="msg"/>
		</html:messages>
	</font>
	
</body>
</html>

login_success.jsp

<%@ page language="java" contentType="text/html; charset=GB18030"
    pageEncoding="GB18030"%>
<%@ taglib uri="http://struts.apache.org/tags-html" prefix="html"%>   
<%@ taglib uri="http://struts.apache.org/tags-bean" prefix="bean"%> 
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=GB18030">
<title>Insert title here</title>
</head>
<body>
	<html:messages id="msg" message="true">
		<bean:write name="msg"/>
	</html:messages>
</body>
</html>

国际化资源文件MessageResources.properties

errors.header=<UL>
errors.prefix=<font color="red"><LI>
errors.suffix=</LI></font>
errors.footer=</UL>

login.success={0},Login Success
login.user.not.found=User Not Found,UserName\=[{0}] 
login.password.error=Password Error

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>
	
	<action-mappings>
		<action path="/login" 
				type="struts.LoginAction"
				name="loginForm"		
				scope="request"		
				>
			<forward name="success" path="/login_success.jsp" />
			
			<forward name="error" path="/login_error.jsp"/>
					
			<!-- <forward name="error" path="/login.jsp"/> --> 
		</action>
		
	</action-mappings>
	
	 <message-resources parameter="resources.MessageResources" />
</struts-config>

运行结果如下:


以上就是编程式异常处理的详细过程,我们可以看出,这种方式对异常的处理粒度比较细,实现也较为复杂。它的优点是:可以根据具体的异常自定义处理过程,处理较为灵活。当然,异常处理的方法远不止这一种,有没有更简单的方法呢?有,但是这里的简单是以牺牲处理的灵活性为代价的。所以,我们在选择异常处理方法的过程中,要充分了解自己的需求,在简单和灵活性之间做出判断,选择适合自己业务的异常处理方法。


下篇博客将为大家介绍一种更为简单的异常处理方法。

  • 4
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 12
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值