0
A
回答
1
请求。检查http://livingtao.blogspot.com/2007/05/global-exception-handling-for-struts.html此链接或
新的解决方案
我完全放弃在struts-config中的全球异常的方法,并增加了部分到web.xml文件,该文件指示应用服务器将请求转发到指定的URL关于所有未处理的异常。
<error-page>
<exception-type>java.lang.Throwable</exception-type>
<location>/error</location>
</error-page>
然后加入一个servlet和servlet映射到/错误URL
<servlet>
<servlet-name>exceptionHandler</servlet-name>
<servlet-class>com.test.ExceptionHandlerServlet</servlet-class>
<init-param>
<param-name>errorPageURL</param-name>
<param-value>error.html</param-value>
</init-param>
<load-on-startup>3</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>exceptionHandler</servlet-name>
<url-pattern>/error</url-pattern>
</servlet-mapping>
的ExceptionHandlerServlet将记录该异常和浏览器重定向到在servlet配置中定义的URL(的error.html) 。
ExceptionHandlerServlet代码:
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
try {
logger.debug("Handling exception in ErrorHandlerServlet");
Throwable exception = null;
// Check if struts has placed an exception object in request
Object obj = request.getAttribute(Globals.EXCEPTION_KEY);
if (obj == null) {
// Since no struts exception is found,
// check if a JSP exception is available in request.
obj = request.getAttribute("javax.servlet.jsp.jspException");
}
if ((obj != null) && (obj instanceof Throwable)) {
exception = (Throwable) obj;
}
if (logger.isDebugEnabled()) {
logger.debug("Request URI: " + request.getAttribute("javax.servlet.forward.request_uri"));
}
// request uri containing the original URL value will be available
// only on servers implementing servlet 2.4 spec
String requestURI = (String) request.getAttribute("javax.servlet.forward.request_uri");
logger.error("Exception while handling request: " + requestURI, exception);
response.sendRedirect(errorPageURL);
} catch (Exception e) {
// Throwing exceptions from this method can result in request
// going in to an infinite loop forwarding to the error servlet recursively.
e.printStackTrace();
}
}
现在对所有未处理的异常servlet将记录异常。然而,在一些tile JSP中抛出异常的情况下,浏览器将显示一个部分呈现的页面,并且不会重定向到错误页面。
这是由于在呈现整个页面之前,tile会将内容刷新到响应缓冲区。在这种情况下,浏览器会高兴地显示收到的内容,重定向到错误页面将不起作用。
为了防止或减少响应缓冲区的冲洗:
- 设置冲洗属性设置为false在所有瓷砖中插入标签
- 提高响应缓冲区大小,以最大限度地减少自动刷新
这是通过修改tiles布局jsp页面来实现的。
<!-- sets the response buffer size to 64kb -->
<%@ page buffer="64kb"%>
<%@ taglib uri="/WEB-INF/struts-tiles.tld" prefix="tiles"%>
…
<tiles:insert attribute="header" flush="false" />
<tiles:insert attribute="leftnav" flush="false" />
<tiles:insert attribute="body" flush="false" />
<tiles:insert attribute="footer" flush="false" />
在上述代码段中,为了清楚起见,删除了所有html格式。响应缓冲区设置为64千字节,并且应根据应用程序的平均页面大小和增加的内存使用情况的性能影响来决定此值。
相关问题
- 1. 如何在Struts中处理异常
- 2. Java EE/Struts异常处理
- 3. 在Struts中处理异常1 ActionForm
- 4. Struts 2中的全局异常处理
- 5. 如何处理异常处理代码中的异常?
- 6. 如何处理怪异的Struts操作?
- 7. 在Struts 2和Hibernate中的异常处理
- 8. 如何在Wicket中处理异常
- 9. 如何在Hibernate中处理异常?
- 10. 如何在wcf中做异常处理?
- 11. 如何处理未处理的异常?
- 12. 如何处理REST异常?
- 13. 如何处理PDO异常
- 14. 如何处理异常
- 15. 如何处理HttpAsyncClient异常
- 16. 如何处理异常
- 17. 如何处理异常?
- 18. 如何处理Hibernate异常?
- 19. kohana如何处理异常
- 20. WebKit如何处理异常
- 21. 如何处理java.util.concurrent.ExecutionException异常?
- 22. 如何处理AllServersUnavailable异常
- 23. 如何处理异常
- 24. 如何处理SharePoint异常?
- 25. 如何处理异常?
- 26. 在全局异常处理程序中处理线程异常?
- 27. php:在异常处理程序中处理异常?
- 28. 如何在Flex中处理异常Java异常..?
- 29. 在PHP中处理异常
- 30. 在Unity中处理异常
尝试阅读关于Struts 1.3.8中的ActionError类,并尝试阅读本文http://courses.coreservlets.com/Course-Materials/pdf/struts/07-Struts-Exceptions.pdf – RanRag
试试这也http:///www.mkyong.com/struts/struts-global-custom-exception-example/ – RanRag