无法调试控制器错误

Unable to debug the Controller for Error

为什么我无法调试处理错误页面的控制器。我添加的是打印异常消息。我在那部分设置了断点。

显示成功error.jsp。但是断点没有被识别。

这是我的代码。

web.xml

<error-page>
        <error-code>404</error-code>
        <location>/404.htm</location>
    </error-page>
    <error-page>
        <error-code>500</error-code>
        <location>/500.htm</location>
    </error-page>
    <error-page>
        <location>/500.htm</location>
    </error-page>

Controller.java

@RequestMapping("/500.htm")
    public ModelAndView errorFound(HttpServletRequest request,
            HttpServletResponse response, Exception ex) throws ServletException {
        logger.error("ERROR FOUND --> ", ex);
        return new ModelAndView("/common/error");
    }

    @RequestMapping("/404.htm")
    public ModelAndView pageNotFound(HttpServletRequest request,
            HttpServletResponse response, Exception ex) throws ServletException {
        logger.error("PAGE NOT FOUND --> ", ex);
        return new ModelAndView("/common/error");
    }

我正在使用 Eclipse Neon。

你认为我的 IDE 有问题吗?

更新:

1. 即使我删除了上面的控制器功能,错误信息仍然指向error.jsp

2. 代码:dispatcherservlet.xml

class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/>
        <property name="prefix" value="/WEB-INF/jsp/" />
        <property name="suffix" value=".jsp" />
    </bean>

3. 我正在使用 Java 7,Apache 7,Spring 3.1.0

假设您将 jsp 放在 /WEB-INF/jsp/ 文件夹下。将针对 jsp 的错误代码放在 web.xml 中直接显示您的错误页面。无需重定向到任何控制器。所以你不包括任何控制器映射 url 来显示页面。

在这种情况下,如果您的 jsp 位于 /WEB-INF/jsp/,那么您可以将 web.xml 配置为

<error-page>
    <error-code>404</error-code>
    <location>/WEB-INF/jsp/404.jsp</location>
</error-page>
<error-page>
    <error-code>500</error-code>
    <location>/WEB-INF/jsp/500.jsp</location>
</error-page>

如果你想在页面中显示你的异常,那么你需要将你的 Exception.class 配置为通用的。使用 @ControllerAdvice@EnableWebMvc 创建一个 class。
什么是 ControllerAdvice 注释?
来自 spring docs:

A controller advice allows you to use exactly the same exception handling techniques but apply them across the whole application, not just to an individual controller. You can think of them as an annotation driven interceptor.

您的自定义异常处理程序 class 有点像

@ControllerAdvice
@EnableWebMvc
public class CustomExceptionHandler {

    @ExceptionHandler(Exception.class)
    public ModelAndView handleException(Exception exception){
        ModelAndView andView = new ModelAndView();
        andView.addObject("exception",exception);
        andView.setViewName("/common/error");
        return andView;
    }
}