我是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);
}
答案 0 :(得分:0)
在struts-config中设置一个异常处理程序,让所有异常都冒出来,并将其记录在那里。这将使您的所有异常捕获和日志记录代码变得不必要。
至于JSP,不要在JSP中做任何容易出错的事情,在动作中做,然后将结果添加到请求属性。
我猜你可能正在使用古老版本的Struts 1,我已经看到了类似的代码,他们必须在动作中捕获异常,显然是因为异常处理程序不适用于早期版本的struts。现在已经修复了,你应该做的第一件事是将应用程序升级到至少1.2,最好是1.3。使用过时版本的Web框架是一件坏事,在您错过的修补程序中有安全补丁,因此您的应用程序可能不安全。
查看您的示例代码,它看起来并不那么糟糕。我没有看到在你的行动中捕捉到不同类型的异常的意义(如果我知道你遗漏了什么,这可能会更清楚),但是我没有看到不好的做法,比如在每一层中记录事物然后重新抛出它们(以便相同的堆栈跟踪重复显示),或者记录异常并返回null(因此调用代码可能不知道任何错误),或者只是在没有跟踪的情况下吃异常。如果你详细说明你想要解决的问题,我或其他人可能会更有帮助。