एक शब्द अग्रिम: अगर आप सिर्फ ज्यादा तर्क और मॉडल तैयार करने के बिना एक "स्थिर" त्रुटि पृष्ठ की जरूरत है, यह आपके web.xml
में एक <error-page>
-Tag डाल करने के लिए (उदाहरण के लिए नीचे देखें) पर्याप्त होना चाहिए।
अन्यथा, वहाँ यह करने के लिए बेहतर तरीके हो सकते हैं, लेकिन यह हमारे लिए काम करता है:
हम web.xml
कि सभी अपवाद लग जाती है और हमारे कस्टम ErrorHandler कॉल में एक सर्वलेट <filter>
उपयोग करते हैं, एक ही हम वसंत के अंदर का उपयोग HandlerExceptionResolver।
<filter>
<filter-name>errorHandlerFilter</filter-name>
<filter-class>org.example.filter.ErrorHandlerFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>errorHandlerFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
क्रियान्वयन ऐसा अनिवार्य रूप से दिखता है:
public class ErrorHandlerFilter implements Filter {
ErrorHandler errorHandler;
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain filterChain) throws IOException, ServletException {
try {
filterChain.doFilter(request, response);
} catch (Exception ex) {
// call ErrorHandler and dispatch to error jsp
String errorMessage = errorHandler.handle(request, response, ex);
request.setAttribute("errorMessage", errorMessage);
request.getRequestDispatcher("/WEB-INF/jsp/error/dispatch-error.jsp").forward(request, response);
}
@Override
public void init(FilterConfig filterConfig) throws ServletException {
errorHandler = (ErrorHandler) WebApplicationContextUtils
.getRequiredWebApplicationContext(filterConfig.getServletContext())
.getBean("defaultErrorHandler");
}
// ...
}
मेरा मानना है कि यह काफी FreeMarker टेम्पलेट्स के लिए एक ही काम करना चाहिए। बेशक अगर आपका त्रुटि दृश्य एक त्रुटि फेंकता है, तो आप विकल्पों में से कम या कम हैं।
भी 404 की तरह त्रुटियों को पकड़ने और इसके लिए मॉडल तैयार करने के लिए, हम एक फिल्टर है कि ERROR
डिस्पैचर के लिए मैप किया गया है का उपयोग करें:
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
final HttpServletRequest request = (HttpServletRequest) servletRequest;
// handle code(s)
final int code = (Integer) request.getAttribute("javax.servlet.error.status_code");
if (code == 404) {
final String uri = (String) request.getAttribute("javax.servlet.error.request_uri");
request.setAttribute("errorMessage", "The requested page '" + uri + "' could not be found.");
}
// notify chain
filterChain.doFilter(servletRequest, servletResponse);
}
क्या ऐसा [कॉन्फ़िगरेशन] (http://developingdeveloper.wordpress.com/2008/03/09/handling-exceptions-in-spring-mvc-part-2/) मदद करेगा? – nobeh
@ नोबेह नोप, दुर्भाग्य से नहीं। यह आलेख बस हैंडलरएक्सप्शन रीसोल्वर सामान के उपयोग को समझाता है। यही वह है जो मैं पहले से ही उपयोग करता हूं लेकिन यह केवल नियंत्रकों में फेंकने वाले अपवादों को कैप्चर करता है, न कि विचारों में। – kayahr