struts - 为每个层记录(Action,DAO)

时间:2011-08-03 16:05:47

标签: java design-patterns logging log4j struts-1

我是struts的新手,我想了解如何处理应用程序的每个层(JSP / ActionForm,Action,DAO)的日志记录。

我注意到,随着时间的推移,错误日志文件可能过于混乱且对查看不友好。如何改进日志记录模式以分离应用程序的每个层所引发的错误?

我也找不到办法在jsp页面上处理异常。

行动代码模板

public ActionForward perform(ActionMapping mapping, 
                              ActionForm form, 
                              HttpServletRequest request, 
                              HttpServletResponse response) 
   throws IOException, ServletException { 

   try {
         // calls the DAO
   }
   catch (CustomDAOException e) {
     log.error(e);
     // inform application there is an error
   }
   catch (Exception e) {
     log.error(e)
     // inform application there is an error
   }
}

DAO的代码模板

public void update() throw CustomDAOException {
try {
    // Prepare a statement to insert a record
    String sql = "INSERT INTO my_table (col_string) VALUES(?)";
    PreparedStatement pstmt = connection.prepareStatement(sql);

    // Insert 10 rows
    for (int i=0; i<10; i++) {
        // Set the value
        pstmt.setString(1, "row "+i);

        // Insert the row
        pstmt.executeUpdate();
    }
} catch (SQLException e) {
    throw new CustomDAOException(e);
}

1 个答案:

答案 0 :(得分:0)

在struts-config中设置一个异常处理程序,让所有异常都冒出来,并将其记录在那里。这将使您的所有异常捕获和日志记录代码变得不必要。

至于JSP,不要在JSP中做任何容易出错的事情,在动作中做,然后将结果添加到请求属性。

我猜你可能正在使用古老版本的Struts 1,我已经看到了类似的代码,他们必须在动作中捕获异常,显然是因为异常处理程序不适用于早期版本的struts。现在已经修复了,你应该做的第一件事是将应用程序升级到至少1.2,最好是1.3。使用过时版本的Web框架是一件坏事,在您错过的修补程序中有安全补丁,因此您的应用程序可能不安全。

查看您的示例代码,它看起来并不那么糟糕。我没有看到在你的行动中捕捉到不同类型的异常的意义(如果我知道你遗漏了什么,这可能会更清楚),但是我没有看到不好的做法,比如在每一层中记录事物然后重新抛出它们(以便相同的堆栈跟踪重复显示),或者记录异常并返回null(因此调用代码可能不知道任何错误),或者只是在没有跟踪的情况下吃异常。如果你详细说明你想要解决的问题,我或其他人可能会更有帮助。