时间:2021-07-01 10:21:17 帮助过:12人阅读
例如DefaultServlet,在处理请求时,会在Resource中查找当前请求的资源是否存在。
这里用到了一个cache,记录了当前应用的所有资源内容,
在资源中找不到。下图是Tomcat根应用内的资源
这里的response设置完status和message后,整个处理流程结束,错误页面的展示,是根据具体的配置,不同的状态码对应可以对应到不同的页面,这里Tomcat的错误页面,我们前面文章分析过具体实现。(你的错误页面。不,是你的错误页面)
我们再来分析看另一种情况:
比如你在请求manager应用时,应用名称写成了Manager或者manageR,这个时候,和上面处理其实一致,这个应用名称,会被识别为/这个应用的一个资源去处理,所以没有该资源自然是返回404。
再看一种情况:
manager应用下是有404.jsp这个错误页面的,但你直接以下面的形式去请求,还是会得到404
http://localhost:8080/manager/WEB-INF/jsp/404.jsp
这个大家都知道,是Tomcat内对于目录的访问进行了限制。(WEB-INF目录知多少)
再看一种:
你应用内的某个页面,假设是index.jsp内,其本质上要跳转到其它的一个页面,如果是使用sendRedirect还好,跳转后显示具体的路径信息。但假设使用的forward,这个时候,你forward的页面又不存在
这个时候每次请求都会是404,但你看着你请求的页面明明安静的躺在目录里。
所以,再看到请求返回404的时候,要分情况分析,具体是什么原因导致的,是真的资源找不到,还是其它原因。
甚至还有可能是你配置了多个error code对应到同样一个404的错误页面,你每次看到404,也有可能是其它原因。