处理Spring中的404错误?
这是我将未映射的请求重定向到404页面的代码
@RequestMapping("/**") public ModelAndView redirect() { ModelAndView mv = new ModelAndView(); mv.setViewName("errorPage"); return mv; }
上面的代码工作正常,但问题是像css和js文件这样的web资源也进入这个重定向方法,并且它没有加载任何文件。 但我已经在我的调度程序servlet中有这个代码,但是spring控制器没有识别这个资源映射。
所以我在请求映射中尝试了一些正则表达式来否定资源url这样的东西
@RequestMapping("/{^(?!.*resources/**)}**") public ModelAndView redirect() { ModelAndView mv = new ModelAndView(); mv.setViewName("errorPage"); return mv; }
但这并没有按预期工作。所以,如果有人能帮助它会很棒:)
我找到了处理404(未映射的链接)的解决方案,我使用SimpleUrlHandlerMapping来执行此操作。
我将以下代码添加到我的调度程序servlet .xml中
errorController
com.xyz.controller.ErrorController类
public class ErrorController extends AbstractController { @Override protected ModelAndView handleRequestInternal(HttpServletRequest arg0, HttpServletResponse arg1) throws Exception { // TODO Auto-generated method stub ModelAndView mv = new ModelAndView(); mv.setViewName("errorPage"); return mv; } }
我发现了以下原因
@RequestMapping("/**")
使用RequestHandlerMapping和
使用SimpleUrlHandlerMapping
RequestHandlerMapping优先于SimpleUrlHandlerMapping,因此这就是我的情况下所有资源请求进入redirect方法的原因。
所以我只是将@RequestMapping("/**")
请求更改为SimpleUrlHandlerMapping,方法是将其配置为上面在我的dipatcher servlet中给出的bean,并在最后映射它并解决了问题。
还要将以下代码添加到web.xml中
404 /WEB-INF/jsp/error.jsp
现在这个简单的解决方案可用于将所有未映射的请求(即404错误)重定向到错误页面:)