我正在尝试调试使用Spring Web 4.1.6的服务器。无论我直接请求什么URL,我都会收到404,请求资源不可用。
在Eclipse上运行Tomcat时,没有输出写入控制台。我不知道在哪里设置断点来了解正在发生的事情,并且可以想到没有调试方法。
我注意到当我向管理端口发送请求时,我确实看到"无效的命令''接收"所以服务器不是完全惰性但是尝试转到为Eclipse配置的http端口上的URL显示没有结果。我认为这意味着像Spring Web这样的东西是吸收"所有的http请求。
编辑:我注意到即使没有任何war文件的Tomcat服务器也会提供404并且没有日志输出,而发送到管理端口的请求会导致输出。所以问题可能是,你如何确定为什么Tomcat为一个应该有效的URL返回404?
编辑(2):有人向我指出,Tomcat确实记录了这些信息,但是在一个单独的文件中。我在.metadata(在Eclipse中)的logs目录下看到多个local_access_log..txt文件。我猜这是Eclipse的默认设置,但Tomcat也可以配置为输出到控制台。所以这毕竟不是那么神秘。答案 0 :(得分:1)
首先,您可以尝试在Spring MVC上启用TRACE日志记录,以查看是否有某些功能。以下是logback的示例:
<logger name="org.springframework.web.servlet.mvc">
<level value="TRACE"/>
</logger>
如果日志中出现某些内容,至少Spring MVC正在发挥作用
另一种调试方法(即使未部署应用程序,但Tomcat已启动)也可以在Tomcat的HttpServletResponse
实现的sendError(int)
和sendError(int, String)
设置断点看看哪些代码设置了404代码。我认为这应该是org.apache.catalina.connector.Response
https://tomcat.apache.org/tomcat-7.0-doc/api/org/apache/catalina/connector/Response.html
这将允许查看谁设置了404:Springn MVC,应用程序中的其他代码或Tomcat本身。
如果您的应用程序已成功部署并收到请求,则可以尽快将自定义筛选器添加到筛选器链。该过滤器只会继续进行链接:
public void doFilter(ServletRequest req, ServletResponse resp,
FilterChain chain) throws IOException, ServletException {
chain.doFilter(req, resp);
}
但它可以让你设置一个断点。如果它触发,您可以在执行代码时进一步完成代码。
如果此断点未触发,请尝试将该过滤器放在过滤器链中,然后使用断点捕获控制并跟踪执行。