在使用 Tomcat 进行 Java Web 开发的时候,经常会遇到以下 HTTP 404 错误:
错误代码为 HTTP 404(未找到),描述信息是:
“The origin server did not find a current representation for the target resource or is not willing to disclose that one exists.”
此错误表示服务器找不到请求的资源(JSP,HTML,图像等),并返回 HTTP 状态代码404。大多数时候,可以通过更正 URL 来解决此错误。但有的时候并非那么简单。
在这里列出一些可能的原因,以及如何在使用 Tomcat 的 Java Web 开发中修复错误 HTTP 404。
URL 没有任何 Java Servlet 进行处理
检查 servlet 类中的 URL 映射,确保请求的 URL 是由 servlet 处理的。 例如:
@WebServlet("/view_book")
public class ViewBookServlet extends HttpServlet {
...
}
上面的 servlet 可以处理 /view_book。如果请求的 URL 是 /view_books,则服务器将引发 HTTP 404 错误。可以通过更正 URL 或更正 @WebServlet 注解中的 URL 映射来进行修复。
在旧的 Java Web 应用程序中,需要检查 Web 部署描述符文件 web.xml,其中由将 Java servlet 映射到 URL 的配置,如下所示:
ViewBookServlet
/view_book
Java Servlet 转发到不存在的资源
在这种情况下,请求的 URL 由 Java servlet 处理,但是 servlet 随后转发到一个不存在的资源(JSP,HTML…),如下所示:
servlet 类中的代码如下:
String registerForm = "frontend/registerform.jsp";
RequestDispatcher dispatcher = request.getRequestDispatcher(registerForm);
dispatcher.forward(request, response);
可以更正 servlet 中的转发路径来进行修复,并确保转发的资源确实存在。
网址区分大小写
注意,Tomcat 中的 URL 区分大小写,例如 /Register 与 /register 不同。 因此需要检查请求 URL 中的字母并使用正确的大小写。
还要注意 URL 中的 Web 应用程序名称的大小写,例如 http://localhost:8080/BookstoreWebsite/ 与 http://localhost:8080/BookStoreWebsite/ 是不同的。
最后,不应让用户看到服务器呈现的原始 HTTP 404 错误页面。 而是应该设计自己的用户友好型 404 错误页面。