HTTP状态:404-Java Servlet

HTTP状态:404-Java Servlet,java,tomcat,servlets,Java,Tomcat,Servlets,这可能是一个很小的问题,但我仍然无法找到解决办法。 我正在使用Apace Tomcat 7.0.54和JAVA 1.7 我在创建html页面并将servlet名称和URL映射添加到web.xml的网页中遇到以下错误 Error message: HTTP Status 404 - /sayhello/ type Status report message /sayhello/ description The requested resource is not available. 下

这可能是一个很小的问题,但我仍然无法找到解决办法。 我正在使用Apace Tomcat 7.0.54和JAVA 1.7

我在创建html页面并将servlet名称和URL映射添加到web.xml的网页中遇到以下错误

 Error message:
 HTTP Status 404 - /sayhello/
 type Status report
 message /sayhello/
 description The requested resource is not available.
下面是我的JAVA代码

// To save as "<TOMCAT_HOME>\webapps\hello\WEB-INF\classes\HelloServlet.java"
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;

public class HelloServlet extends HttpServlet {
   @Override
   public void doGet(HttpServletRequest request, HttpServletResponse response)
         throws IOException, ServletException {

      // Set the response MIME type of the response message
      response.setContentType("text/html");
      // Allocate a output writer to write the response message into the network socket
      PrintWriter out = response.getWriter();

      // Write the response message, in an HTML page
      try {
         out.println("<html>");
         out.println("<head><title>Hello, World</title></head>");
         out.println("<body>");
         out.println("<h1>Hello, world!</h1>");  // says Hello
         // Echo client's request information
         out.println("<p>Request URI: " + request.getRequestURI() + "</p>");
         out.println("<p>Protocol: " + request.getProtocol() + "</p>");
         out.println("<p>PathInfo: " + request.getPathInfo() + "</p>");
         out.println("<p>Remote Address: " + request.getRemoteAddr() + "</p>");
         // Generate a random number upon each request
         out.println("<p>A Random Number: <strong>" + Math.random() + "</strong></p>");
         out.println("</body></html>");
      } finally {
         out.close();  // Always close the output writer
      }
   }
}
//另存为“\webapps\hello\WEB-INF\classes\HelloServlet.java”
导入java.io.*;
导入javax.servlet.*;
导入javax.servlet.http.*;
公共类HelloServlet扩展了HttpServlet{
@凌驾
public void doGet(HttpServletRequest请求、HttpServletResponse响应)
抛出IOException、ServletException{
//设置响应消息的响应MIME类型
response.setContentType(“text/html”);
//分配一个输出编写器将响应消息写入网络套接字
PrintWriter out=response.getWriter();
//在HTML页面中编写响应消息
试一试{
out.println(“”);
out.println(“你好,世界”);
out.println(“”);
out.println(“你好,世界!”);//说你好
//回显客户端的请求信息
out.println(“请求URI:“+Request.getRequestURI()+”

”; out.println(“协议:“+request.getProtocol()+”

”; out.println(“PathInfo:+request.getPathInfo()+”

”; out.println(“远程地址:“+request.getRemoteAddr()+”

”; //根据每个请求生成一个随机数 out.println(“一个随机数:”+Math.Random()+”

”; out.println(“”); }最后{ out.close();//始终关闭输出写入程序 } } }
Web.xml

<?xml version="1.0" encoding="ISO-8859-1"?>
<web-app version="3.0"
  xmlns="http://java.sun.com/xml/ns/javaee"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">

   <!-- To save as "hello\WEB-INF\web.xml" -->

   <servlet>
      <servlet-name>HelloWorld</servlet-name>
      <servlet-class>HelloServlet</servlet-class>
   </servlet>

   <!-- Note: All <servlet> elements MUST be grouped together and
         placed IN FRONT of the <servlet-mapping> elements -->

   <servlet-mapping>
      <servlet-name>HelloWorld</servlet-name>
      <url-pattern>/sayhello</url-pattern>
   </servlet-mapping>

</web-app>

你好世界
HelloServlet
你好世界
/打招呼

这里应该纠正什么?还有一件事,我也尝试执行另一个JAVA数据库servlet。它也没有返回任何内容,并给了我相同的错误。

正如您所说,您将url作为
localhost:8080/sayhello


请尝试此url
http://localhost:8080/projectName/sayhello

您的url中缺少项目名称/上下文路径:

http://localhost:8080/ProjectName/sayhello
您的
值是否位于任何包下?如果是,, 然后给出“PackageName.ServletClassName”。如果不是这样的话,试试看 用
http://localhost:8080/ProjectName/sayhello
。如果是 没有问题,请尝试更改端口(8080)(右键单击 服务器->属性->交换机位置。)。在servers目录下,右键 单击“属性”,然后在“服务器位置”下尝试更改为“使用” tomcat安装“。请尝试不仅在web inf中保留index.html,还保留index.html 也在web内容文件夹中(如果您有index.html文件)


尝试打开“/sayhello”而不是“/sayhello/”。同样的错误。还有一件事,我也尝试执行另一个JAVA数据库servlet。它也没有返回任何内容如果您在某个包中有servlet类,那么在servlet类标记中给出包名。classname@ElliottFrisch“/sayhello/”是什么意思?也就是说,浏览器如何解释它呢?在xml和as注释中有servlet映射。移除其中一个。