1. 程式人生 > >自定義異常資訊的request儲存

自定義異常資訊的request儲存

對於資訊的判斷處理,有時回出現異常情況,這些異常可能是我們所需要的,這些異常是程式在正常情況下發生的錯誤。

這些錯誤可以當做校驗判斷,以簡化和優化程式碼。一般校驗的地點處位於業務層,由業務層返回異常資訊給控制層,再由控制層轉發到檢視層顯示異常或錯誤提示資訊

1.自定義異常資訊處理類

|—需要繼承Exception |—覆寫Exception的構造方法
/**
 * 使用者業務異常
 * @author qdmmy6
 *
 */
public class UserException extends Exception {

	public UserException() {
		super();
	}

	public UserException(String message, Throwable cause) {
		super(message, cause);
	}

	public UserException(String message) {
		super(message);
	}

	public UserException(Throwable cause) {
		super(cause);
	}
}

2.在業務層中 校驗異常,並儲存異常資訊

public void activatioin(String code) throws UserException {
		/*
		 * 1. 通過啟用碼查詢使用者
		 * 2. 如果User為null,說明是無效啟用碼,丟擲異常,給出異常資訊(無效啟用碼)
		 * 3. 檢視使用者狀態是否為true,如果為true,丟擲異常,給出異常資訊(請不要二次啟用)
		 * 4. 修改使用者狀態為true
		 */
		try {
			User user = userDao.findByCode(code);
			if(user == null) throw new UserException("無效的啟用碼!");
			if(user.isStatus()) throw new UserException("您已經啟用過了,不要二次啟用!");
			userDao.updateStatus(user.getUid(), true);//修改狀態
		} catch(SQLException e) {
			throw new RuntimeException(e);
		}
	}

3.在控制層中捕獲異常,獲取自定義異常資訊,完成檢視轉發

public String activation(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException {
		/*
		 * 1. 獲取引數啟用碼
		 * 2. 用啟用碼呼叫service方法完成啟用
		 *   > service方法有可能丟擲異常, 把異常資訊拿來,儲存到request中,轉發到msg.jsp顯示
		 * 3. 儲存成功資訊到request,轉發到msg.jsp顯示。
		 */
		String code = req.getParameter("activationCode");
		try {
			userService.activatioin(code);
			req.setAttribute("code", "success");//通知msg.jsp顯示對號
			req.setAttribute("msg", "恭喜,啟用成功,請馬上登入!");
		} catch (UserException e) {
			// 說明service丟擲了異常
			req.setAttribute("msg", e.getMessage());//將異常資訊存放在msg屬性中
			req.setAttribute("code", "error");//通知msg.jsp顯示X
		}
		return "f:/jsps/msg.jsp";
	}