Posted on 2008-01-08 21:31
Norvid 阅读(222)
评论(0) 编辑 收藏
本来打算这个blog写些关于脚本编程的内容,可是最近一直在搞java的开发,而且总被一些平时没注意的问题“骚扰”。好吧,我承认,是我基础不扎实……
比如说这个Struts的异常处理,虽然我是知道能根据异常类的类型来导向相应的页面的,可是这样很不好。于是我根据过往的各种经验将Struts的使用总结为以下形式。
// execute纯粹作为转发器与异常捕捉与处理
public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) {
try {
String method = request.getParameter("method");
if (StringUtils.isEmpty(method) || method.equalsIgnoreCase("query")) {
return query(mapping, form, request, response);
} else if (method.equalsIgnoreCase("list")) {
return list(mapping, form, request, response);
} else if (method.equalsIgnoreCase("info")) {
return info(mapping, form, request, response);
} else {
return query(mapping, form, request, response);
}
} catch (Exception error) {
return error(mapping, form, request, response, error);
}
}
/**
* 异常捕获
*/
private ActionForward error(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response,
Exception error) {
logger.error("error: " + error.getMessage());
request.setAttribute("msg", error.getMessage());
request.setAttribute("error", error);
return mapping.findForward("error");
}
/**
* 全部查询
*/
private ActionForward list(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
throws Exception {
return mapping.findForward("query");
}
如上面的代码所示,action的默认入口只是作为一个转发器以及异常捕获点进行相关的异常处理(见error函数)。真正的处理改为由各个功能函数来处理(如list函数)。呵呵,是不是很像DispatchAction类?就是从它想出来的。如果直接使用DispatchAction类的话,每个方法都要自己写异常处理,太繁琐了。弄个转发器只需写一次就行了。
呀,有点跑题了。其实我也就想说其实可以使用web.xml的配置来根据不同的http异常来导向不同的页面……虽然如果注意的话,异常都会在struts的Action层就能完全捕获住了(属于开发阶段中的JSP错误除外)。
web.xml中配置HTTP异常的方法为:
<!-- 根据错误码进行跳转-->
<error-page>
<error-code>500</error-code>
<location>/error.jsp</location>
</error-page>