Java EE / Struts异常处理

时间:2013-04-22 14:07:28

标签: java exception servlets error-handling struts

我已经开始主要在Struts和Servlets上开发Java EE Web应用程序。大多数代码在Servlet或Struts Action类中都有一个try catch块。

是否必须为每个servlet或操作尝试catch块?我在这种代码模板中看到的唯一优势是stacktrace是日志到应用程序指定的日志框架,如log4j。

如果运行时异常浮动,它将被打印在服务器(Tomcat / Glassfish / Weblogic)日志上。

public class HelloWorldAction extends Action{

    public ActionForward execute(ActionMapping mapping,ActionForm form,
        HttpServletRequest request,HttpServletResponse response)
        throws Exception {

        try {
            // do all the processing here
        } catch (Exception e) {
            // log all exceptions
        }
    }

}


public class HelloWorldExample extends HttpServlet {

   public void doGet(HttpServletRequest request, HttpServletResponse response)
               throws IOException, ServletException {
     try {
        // do all the processing here
    } catch (Exception e) {
        // log all exceptions
    }
   }
}

3 个答案:

答案 0 :(得分:4)

  1. 捕捉Exception几乎不是你真正想做的事情。希望显而易见的是总是有一个try / catch块并不是强制性的 - 它取决于底层代码在做什么,以及你想如何处理它可能抛出的任何异常。

    < / LI>
  2. 捕获Exception会导致无法使用Struts' declarative exception handling

  3. 我建议反对使用过滤器来处理Struts 1中的异常,因为它已经内置了一个机制。如果在框架级别存在异常,它们无论如何都会显示出来,而且它们通常都是表示开发,而不是运行时问题。

    我赞同Andrea的观点:除非你有一个非常好的理由,否则学习Struts 1是没用的。考虑使用Struts 2或Spring MVC进行“传统”框架开发,或Play,Grails,JRuby on Rails等,以获得更现代的方法。

答案 1 :(得分:1)

如果您正在寻找一个可以进行异常记录的地方,您可以创建ServletFilter:

public class ExceptionLoggerFilter implements Filter {

    public void doFilter(ServletRequest req, ServletResponse res, FilterChain filterChain) {
        try {
            filterChain.doFilter(req, res);
        }
        catch(Exception e) { // Log exception }
    }
 }

除非您想以特殊方式处理该特定异常,否则您不应该在任何地方捕获异常。大多数时候,只是噪音妨碍了真实的&#34;码。重要的是你记录异常和足够的上下文信息,你可以找出导致错误的原因。对于用户,您应该只显示一般错误页面。

答案 2 :(得分:0)

您可以在struts-config.xml中指定全局例外。它在整个应用程序中捕获未处理的异常。 您需要实现自己的ExceptionHandler类。然后编写代码想要做的事情。

4.5异常处理程序 http://www.jajakarta.org/struts/struts1.2/documentation/ja/target/userGuide/building_controller.html