当我运行以下代码时,我收到一个 Servlet 404 错误 [重复]

Posted

技术标签:

【中文标题】当我运行以下代码时,我收到一个 Servlet 404 错误 [重复]【英文标题】:When I am running the following code, I am receiving an Servlet 404 error [duplicate] 【发布时间】:2021-07-26 11:31:18 【问题描述】:

我正在运行以下代码,它是 html 版本,它显示了姓名和年龄框。

<!-- Main.html -->
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>A First page</title>
</head>
<body>
  <form action="Thanks.jsp" method="get">
    Enter Your Name: <input type="text" name="yourName"><br>
    Enter Your Age&nbsp;&nbsp;&nbsp;&nbsp;:<input type="text" name="yourAge"><br>
    <input type="submit" value="Sumitting">
  </form>
</body>
</html>

但是当我运行相同逻辑的 servlet 版本的代码时,它得到了一个错误

The origin server did not find a current representation for the target resource or is not willing to disclose that one exists. 

代码如下:

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.*;
@WebServlet("/Main")
public class Main extends HttpServlet 
  private static final long serialVersionUID = 1L;
  public Main() 
    super();
  

  protected void doGet(HttpServletRequest request, HttpServletResponse   
    response) throws ServletException, IOException 
    PrintWriter out = response.getWriter();     //Is added
    out.println("<form action=\"http://localhost\" method=\"post\">");
    out.println("Enter Your Name: <input type=\"text\" name " +
      "= \"yourName=\" </input><br>");
    out.println("Enter Your Age&nbsp;&nbsp; : <input " + 
      "type=\"text\" name = \"yourAge=\" </input>");
    out.close();
  

根据@RomanC 的要求添加 web.xml

<?xml version="1.0" encoding="UTF-8"?>
   <web-app xmlns:xsi="w3.org/2001/XMLSchema-instance" 
    xmlns="xmlns.jcp.org/xml/ns/javaee" 
    xsi:schemaLocation="xmlns.jcp.org/xml/ns/javaee 
    xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd" id="WebApp_ID" version="4.0"> 
    
    <servlet> 
        <servlet-name>abc</servlet-name> 
        <servlet-class>yi.Main</servlet-class> 
    </servlet> 
</web-app>

【问题讨论】:

您为获得响应而点击的 URL 是什么? localhost:8080/Project/WEB-INF/classes/yi/Main.java 尝试点击localhost:8080/main 我建议您了解 servlet 的工作原理。您缺少的一点是 servlet 的基础。您使用 URL 的方式不正确。此外,您正在尝试从类 WEB-INF/classes 中访问 Main.java,这表明您还需要学习 Java 基础知识。基本上,一旦 Java 类被编译,就会创建一个包含字节码的 .class 文件。在您的 WAR 文件中,它将是 WEB-INF/classes/main.class 但您不能直接访问它。您将需要访问您为 servlet 指定的 URL。 你能给我看看你的 web.xml 吗? w3.org/2001/XMLSchema-instance" xmlns="xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation=" xmlns.jcp.org/xml/ns/javaee xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd" id="WebApp_ID" version="4.0"> abcyi.Main 【参考方案1】:

确保在 servlet 中添加所有 html 元素(标签)。

试试这个:

  protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException 
        PrintWriter out = response.getWriter();     //Is added

        String htmlTag
                = "<!doctype html public \"-//w3c//dtd html 4.0 " + "transitional//en\">\n";

        out.println(htmlTag
                + "<html>\n"
                + "<head><title>Reg Form</title></head>\n"
                + "<body bgcolor = \"#f0f0f0\">\n"
                + "<h1 align = \"center\">Regform</h1>\n"
                + "<ul>\n"
                + "<form action=\"http://localhost\" method=\"post\">"
                + "Enter Your Name: <input type=\"text\" name = \"yourName\"</input><br><br>\n"
                + "Enter Your Age&nbsp;&nbsp; : <input type=\"text\" name = \"yourAge\" </input>\n"
                + "</ul>\n"
                + "</body>"
                + "</html>");

        out.close();

当您使用@Webservlet Annotation 时,您不需要在 web.xml 中提及 servlet 映射,但如果您正在寻找 xml,仍然需要提及

  <servlet>
        <servlet-name>Main</servlet-name>
        <servlet-class>test.Main</servlet-class>  //test is the Package
    </servlet>
    <servlet-mapping>
        <servlet-name>Main</servlet-name>
        <url-pattern>/Main</url-pattern>
    </servlet-mapping>

运行 Servlet 文件,您将获得准确的 URL。(右键单击 Servlet 并运行文件)

一般是这样的:“http://localhost:8084/NameofYourApplication/Main”

【讨论】:

以上是关于当我运行以下代码时,我收到一个 Servlet 404 错误 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

当我没有收到手动运行代码时,在 Python for 循环中收到 KeyError

从 servlet 运行 C++ exe

我收到一个错误“命令不同步;当我使用mysqli_multi_query时,你现在无法运行此命令

GWT RPC 警告:servlet 有映射,但 web.xml 没有对应的映射

当我尝试运行此代码时,出现以下错误

Servlet 错误:HTTP 状态 405 - 此 URL 不支持 HTTP 方法 GET [重复]