cod*_*247 9 java spring jsp tiles servlet-filters
我有一个ErrorFilter延伸弹簧GenericFilterBean.如果发生某些错误,我想显示一个用tile装饰的错误页面.
有没有办法从过滤器设置视图名称?
<filter>
<filter-name>errorFilter</filter-name>
<filter-class>com.abc.filter.ErrorFilter</filter-class>
<init-param>
<param-name>errorPage</param-name>
<param-value>/jsp/errorpage.jsp</param-value>
</init-param>
</filter>
Run Code Online (Sandbox Code Playgroud)
这是在配置web.xml和doFilter方法在errorfilter如下:
public void doFilter(ServletRequest req, ServletResponse resp,
FilterChain chain) throws IOException, ServletException {
HttpServletRequest httpReq = (HttpServletRequest) req;
StringBuffer reqUrl = httpReq.getRequestURL();
try {
chain.doFilter(req, resp);
} catch (Exception ex) {
String requestRepresentation = createRequestRepresentation(req);
errorService.handleException(reqUrl.toString(), ex, requestRepresentation);
req.getRequestDispatcher(
getFilterConfig().getInitParameter("errorPage")).forward(req, resp);
} catch (Error er) {
errorService.handleError(reqUrl.toString(), er);
req.getRequestDispatcher(
getFilterConfig().getInitParameter("errorPage")).forward(req, resp);
}
}
Run Code Online (Sandbox Code Playgroud)
当前的错误不是用瓷砖装饰的,所以我想用普通的页眉和页脚来装饰它,并从过滤器中调用该视图名称.
可能吗 ?
编辑: 基本上我们希望能够做类似于Controller-method的事情,即返回"视图名称";
已经尝试过:
必须有一种方法可以用 Spring MVC 来做到这一点,但我认为重定向就足够了。
try {
chain.doFilter(req, resp);
} catch (Exception ex) {
if (response.isCommitted()) {
log(ex); // at least a part of the response is already sent to the client, you can't do much about it
} else {
session.setAttribute("last.exception", ex);
response.sendRedirect(request.getContextPath() + getFilterConfig().getInitParameter("errorPage"));
}
}
Run Code Online (Sandbox Code Playgroud)
PS 不要捕获错误!