我昨天也沿着类似的方式询问了question。在那个问题中,我被建议有一个全局过滤器(我已经有过)。如何在JSP中捕获和抛出错误
所以我有一个JSP像下面
....code...code
..tags...html...code
Object [] res = iBatisDAO.getReport_pging(null,null,0,null); //call to DB
...more code...
...tags...end
在上面的代码,我故意传递null是因为我希望它失败,当它失败我希望它去我们集中的错误页面。我有我的web.xml
<error-page>
<exception-type>com.ibatis.common.jdbc.exception.NestedSQLException</exception-type>
<location>/errorpages/Error.jsp</location>
</error-page>
<error-page>
<exception-type>org.springframework.dao.DataAccessException</exception-type>
<location>/errorpages/Error.jsp</location>
</error-page>
<error-page>
<exception-type>javax.servlet.ServletException</exception-type>
<location>/errorpages/Error.jsp</location>
</error-page>
<error-page>
<exception-type>java.sql.SQLException</exception-type>
<location>/errorpages/Error.jsp</location>
</error-page>
<error-page>
<exception-type>org.springframework.jdbc.UncategorizedSQLException</exception-type>
<location>/errorpages/Error.jsp</location>
</error-page>
'控制'通过我有一个全局过滤器来到上述JSP。它有chain.doFilter()
包裹在try/catch
区块。当exception
发生它重定向到Error.jsp。
当错误发生时...它不会被中央错误页面捕获,也不会被过滤器捕获。我认为过滤器没有捕获它,因为当过滤器'调用'jsp ...那里没有错误。
我知道调用DB在JSP内部是坏的,但我正在处理大量的遗留代码。
在这种情况下,我能做些什么来让错误进入集中错误页面?而且,JSP没有导入错误页面。我不希望导入一个错误页面到所有JSP的选项,我想有一个更通用的解决方案。
它被映射到那个。但是因为发生了异常内部的JSP ...过滤器如何捕获该异常?... – drake 2010-03-10 13:33:46
@drake JSP被转换为一个Servlet。所以它发生在一个servlet中,在'chain.doFilter()'之后处理。请给出由异常生成的堆栈跟踪。 – Bozho 2010-03-10 13:58:38
异常消息是:'org.springframework.jdbc.UncategorizedSQLException:SqlMapClient操作;未归类SQL []的SQLException; SQL状态[null];错误代码[17004];'我在web.xml中捕获的内容。现在我注意到,代码是在chain.doFilter的catch块中进行的,但是,在我尝试执行'response.sendRedirect'时,在该catch块中,它因为响应已经设置而失败。有没有解决的办法? – drake 2010-03-10 16:13:26