栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

在Spring MVC中渲染视图时如何处理抛出的异常?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

在Spring MVC中渲染视图时如何处理抛出的异常?

一个简单的词:如果您只需要一个“静态”错误页面而没有太多的逻辑和模型准备,那么

<error-page>
在您的页面中放置一个-Tag
就足够了
web.xml
(请参见下面的示例)。

否则,可能会有更好的方法来执行此操作,但这对我们有用:

我们使用servlet

<filter>
web.xml
,捕捉所有的异常,并调用我们自定义的ErrorHandler,春节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
调度程序的过滤器:

<filter>   <filter-name>errorDispatcherFilter</filter-name>   <filter-class>org.example.filter.ErrorDispatcherFilter</filter-class></filter><filter-mapping>  <filter-name>errorDispatcherFilter</filter-name>  <url-pattern>/*</url-pattern>  <dispatcher>ERROR</dispatcher></filter-mapping><error-page>  <error-pre>404</error-pre>  <location>/WEB-INF/jsp/error/dispatch-error.jsp</location></error-page><error-page>  <exception-type>java.lang.Exception</exception-type>  <location>/WEB-INF/jsp/error/dispatch-error.jsp</location></error-page>

doFilter-Implementation如下所示:

@Overridepublic void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {  final HttpServletRequest request = (HttpServletRequest) servletRequest;  // handle pre(s)  final int pre = (Integer) request.getAttribute("javax.servlet.error.status_pre");  if (pre == 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);}


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/407036.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号