针对一个错误显示不同主题的错误页面

问题描述:

我正在研究J2EE,Spring mvc中的应用程序。针对一个错误显示不同主题的错误页面

应用程序有两个主题。如果java.lang.Exception来处理它。 我在web.xml配置错误页为:任何主题

<error-page> 
    <exception-type>java.lang.Exception</exception-type> 
    <location>/WEB-INF/jsp/uncaughtException.jsp</location> 
</error-page> 

每次显示uncaughtException.jsp。我想为不同的主题展示不同的页面。

我做了以下工作,以显示不同的异常不同的消息,我认为这个技巧可以帮助你。

我每次都用不同的消息重新定向异常,并在同一页面上显示此消息。

@ExceptionHandler(Exception.class) 
     public ModelAndView handleMyException(Exception exception) { 
     ModelAndView mv = new ModelAndView("redirect:errorMessage?error="+exception.getMessage()); 
     return mv; 
       } 

    @RequestMapping(value="/errorMessage", method=RequestMethod.GET) 
    public ModelAndView handleMyExceptionOnRedirect(@RequestParamter("error") String error) { 
     ModelAndView mv = new ModelAndView("uncaughtException"); 
     mv.addObject("error", error); 
     return mv; 
     } 

更新:

您还可以使用SimpleMappingExceptionResolver它可能是你的情况更为有用: 你可以映射每个异常的每一页和默认页面。

<bean id="exceptionResolver" class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver"> 
    <property name="exceptionMappings"> 
     <props> 
      <prop key="org.springframework.dao.DataAccessException">/general/error/500</prop> 
      <prop key="freemarker.core.InvalidReferenceException">/general/error/500</prop> 
      <prop key="NumberFormatException">/general/error/500</prop> 
     </props> 
    </property> 
    <property name="defaultErrorView" value="/general/error/500" /> 
</bean> 

Update 2: I think you need to treat 404 separately. 

<error-page> 
    <error-code>404</error-code> 
    <location>/WEB-INF/pages/404.jsp</location> 
    </error-page> 
+0

感谢这么好的答案。该解决方案是控制器特定的我想要应用程序特定的解决方案来处理应用程序级别的异常请帮忙。 –

+0

查看我的更新,我认为这可能会有所帮助。 –

+0

我也是这么做的。当然,它的作品。参考:http://thinkinginsoftware.blogspot.com/2011/02/handling-errors-in-spring-framework.html –