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. java struts全局異常處理
- 6. 如何處理Struts + Spring + Hibernate項目中的異常
- 7. 如何處理異常處理代碼中的異常?
- 8. 如何處理怪異的Struts操作?
- 9. 在Struts 2和Hibernate中的異常處理
- 10. 在struts中聲明/處理的異常xml
- 11. 如何在Hibernate中處理異常?
- 12. 如何在Wicket中處理異常
- 13. 如何在java中處理sql異常?
- 14. 如何在wcf中做異常處理?
- 15. 如何在C#中處理sql異常?
- 16. 如何在junit中處理異常
- 17. 如何在Parallel.Foreach中處理異常?
- 18. 如何處理未處理的異常?
- 19. 如何處理REST異常?
- 20. 如何處理異常
- 21. 如何處理OutOfMemory異常
- 22. 如何處理PDO異常
- 23. 如何處理異常
- 24. 如何處理GORM異常
- 25. 如何處理AllServersUnavailable異常
- 26. 如何處理異常
- 27. 如何處理SharePoint異常?
- 28. 如何處理Hibernate異常?
- 29. 如何處理異常?
- 30. 如何處理異常?
嘗試閱讀關於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