Java Servlet 404错误
当Sun的J2EEdeploytool
自动创建的给定.WAR中的页面试图将Servlet加载到相同的.WAR文件中时,什么原因最有可能导致" 404资源未找到"错误?
例如:
HTTP Status 404 - /MyServlet/MyServlettype Status reportmessage /MyServlet/MyServletdescription The requested resource (/MyServlet/MyServlet) is not available.
相关:在这些服务器中,我们期望有多少是特定于服务器的?例如:Sun Java Application Server与Tomcat和Catalina?
解决方案
回答
web.xml中是否存在针对" MyServlet"的有效<servlet-mapping>?那是我过去的头号罪魁祸首
回答
404错误表示找不到请求的资源。正如pkaeding所暗示的,这可能是由于servlet映射在web.xml文件中不正确(或者不存在)所致。不仅必须在web.xml文件中指定Servlet,而且还必须将它们映射到特定的路径(" URL映射")。如果" MyServlet" servlet存在,但未基于应用程序上下文根目录映射到可以用" / MyServlet / MyServlet"解析的路径,则其他任何内容(例如,另一个servlet等)都无法使用该路径解析,应用服务器会抛出404,说明没有任何内容映射到给定的路径。
回答
我只花了大约一个小时就解决了这个问题。 OSX上的Tomcat 5.5.27运行良好,直到我添加了另一个servlet和servlet映射,此时一切都返回了404. 我没有意识到这一点,但是当我添加了新的servlet / servlet映射时对,我会将servlet映射放在servlet条目之前。这是一个容易犯的错误,尽管在不给出任何类似明智错误消息的情况下将整个应用程序全都收拾起来似乎有些极端,但从回顾的角度来看,它还是很有意义的。
回答
Servlet映射是一个常见问题。但是,如果我们在web.xml中有任何筛选器,则可能也是罪魁祸首。要实现的一件事是,过滤器总是在任何servlet开始执行之前在doFilter之前执行代码。 (从技术上讲,过滤器在doFilter之后执行代码)在我们的代码中,我们创建了在某些情况下会返回404的过滤器。有时删除一些或者所有过滤器映射将有助于发现它是否与过滤器映射有关。