论坛首页 入门讨论版 企业应用

JAVA内部异常处理机制

浏览 283 次
该帖已经被评为新手帖
作者 正文
最后更新时间:2008-07-07
最近做项目时有一个想法,就是当系统内部异常时,让系统自己捕获异常,然后将异常信息分类,将异常提示友好的展现给用户,比如说当网络中断,提示用户网络中断,数据库连接不上时提示数据库连接异常等,因为我不想在每个业务处理单元写那么多 try catch,所以我想写一个错误处理方法,统一对异常进行处理,暂时还没有想到怎么去下手,还请各位同仁指点,或者哪位以前做过类似的事情,还希望能共享一下,不胜感激!
   
最后更新时间:2008-07-07
定义一个业务异常,继承RuntimeException。
action中,发现这个异常,定向到一个异常界面就可以了。
页面界面想怎么展示就怎么展示。
   
0 请登录后投票
最后更新时间:2008-07-07
能不能说的详细点,最好写点示例代码!
   
0 请登录后投票
最后更新时间:2008-07-07
BaseAction.java
	 * 处理执行Action时发生的不同异常
	 *
	 * @param ex
	 * @param request
	 * @return
	 */
	public ActionForward processException(Exception ex,HttpServletRequest request){
		ActionMessages messages=new ActionMessages();
		if(ex instanceof org.springframework.dao.DataAccessException ){
			logger.debug("数据库访问异常。",ex);
			messages.add(ActionMessages.GLOBAL_MESSAGE,new ActionMessage("errors.data_access"));
			this.saveErrors(request,messages);
			return new ActionForward("ErrorForward","/common_page/inner_error.jsp",false,"/");
		}else if(ex instanceof com.huanghj.action.ApplicationException){
			ApplicationException e=(ApplicationException)ex;
			ActionMessage message =null;
			if(e.getI18NMessageArgs()!=null && e.getI18NMessageArgs().length>0){
				message = new ActionMessage(e.getI18NMessageCode(),e.getI18NMessageArgs());
			}else{
				message = new ActionMessage(e.getI18NMessageCode());
			}
			messages.add(ActionMessages.GLOBAL_MESSAGE,message);
			this.saveErrors(request,messages);
			return new ActionForward("ErrorForward","/common_page/failure.jsp",false,"/");
		}else if(ex instanceof IllegalArgumentException ||
				ex instanceof NumberFormatException ){
			logger.debug("数据转换异常",ex);
			messages.add(ActionMessages.GLOBAL_MESSAGE,new ActionMessage("errors.paramFormat"));
			this.saveErrors(request,messages);
			return new ActionForward("ErrorForward","/common_page/failure.jsp",false,"/");
		}else if(ex instanceof InvocationTargetException){
			if(logger.isDebugEnabled())
				logger.debug("业务方法中抛出异常",ex);
			ApplicationException e=(ApplicationException)((InvocationTargetException)ex).getTargetException();
			ActionMessage message =null;
			if(e.getI18NMessageArgs()!=null && e.getI18NMessageArgs().length>0){
				message = new ActionMessage(e.getI18NMessageCode(),e.getI18NMessageArgs());
			}else{
				message = new ActionMessage(e.getI18NMessageCode());
			}
			messages.add(ActionMessages.GLOBAL_MESSAGE,message);
			this.saveErrors(request,messages);
			return new ActionForward("ErrorForward","/common_page/failure.jsp",false,"/");
		}else {
			logger.debug("未期待的异常。",ex);
			messages.add(ActionMessages.GLOBAL_MESSAGE,new ActionMessage("errors.unknown"));
			this.saveErrors(request,messages);
			return new ActionForward("ErrorForward","/common_page/inner_error.jsp",false,"/");
		}
	}


##--exception--##
errors.data_access=数据库访问错误。
errors.unknown=未知错误,请检查网络是否连通。
errors.notlogin=未登陆或超时。
errors.no_much_permission=您没有权限进行此操作。
errors.badparam=您试图通过非法参数访问系统。
errors.paramFormat=提交数据格式错误
errors.loginFailed=您输入的用户名或密码有误
errors.sendMainError=发送邮件失败
errors.submitAgain=错误!重复操作!
addUserSendMainError=创建用户成功,发送邮件失败
content.is.empty=页面暂未编辑,内容为空


以前项目的代码尽供参考!
   
0 请登录后投票
最后更新时间:2008-07-07
Jerry . \  能不能把这个给贴出来啊 com.huanghj.action.ApplicationException  谢谢
   
0 请登录后投票
最后更新时间:2008-07-09
ApplicationException 继承自RuntimeException
并重写父类的构造方法

给你贴一个吧
public class ApplicationException extends RuntimeException {
	
	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;

	public ApplicationException() {
		// TODO Auto-generated constructor stub
	}

	public ApplicationException(String message) {
		super(message);
		// TODO Auto-generated constructor stub
	}

	public ApplicationException(Throwable cause) {
		super(cause);
		// TODO Auto-generated constructor stub
	}

	public ApplicationException(String message, Throwable cause) {
		super(message, cause);
		// TODO Auto-generated constructor stub
	}

}
   
0 请登录后投票
论坛首页 入门讨论版 企业应用

跳转论坛:
JavaEye推荐