【问题标题】:HTTP Status 404 occurs when I pressed submit button [duplicate]当我按下提交按钮时出现 HTTP 状态 404 [重复]
【发布时间】:2017-01-22 05:14:40
【问题描述】:

这是我的html代码:

<form action="Post" method="post"  >

    <label for="semester">Semester</label>
    <input type="text" name="semester" placeholder="Enter the semester">

    <label for="prof-name">Instructor's name</label>
    <input type="text" name="prof-name" placeholder="Enter the instructor's name">

    <label id="course-eval">How was the course?</label>
    <textarea  name="course-evaluation" placeholder="Write everything about the course"></textarea>

    <label for="prof-eval">How was your professor?</label>
    <textarea name="prof-evaluation" placeholder="Write everything about your professor"></textarea>

    <input type="submit" value="Submit" >

</form>

这是我的 servlet 代码:

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    String semester = request.getParameter("semester");
    String name = request.getParameter("prof-name");
    String course = request.getParameter("course-evaluation");
    String prof = request.getParameter("prof-evaluation");

    response.setContentType("text/html;");
    PrintWriter writer = response.getWriter();

    writer.println("<html><head></head><body>");
    writer.println("Semester:"+semester+"<br/>");
    writer.println("Instructor's name:"+name+"<br/>");
    writer.println("How was the course?:"+course+"<br/>");
    writer.println("How was your professor?:"+prof+"<br/>");
    writer.print("</body></html>");
    writer.close();
}

这是我的 web.xml:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee"   xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
  <display-name>skce</display-name>
  <welcome-file-list>
    <welcome-file>cse101.html</welcome-file>
    <welcome-file>cse101.htm</welcome-file>
    <welcome-file>cse101.jsp</welcome-file>
    <welcome-file>default.html</welcome-file>
    <welcome-file>default.htm</welcome-file>
    <welcome-file>default.jsp</welcome-file>
  </welcome-file-list>
  <servlet>
   <servlet-name>Post</servlet-name>
   <servlet-class>com.skce.post.Post</servlet-class>

   <init-param>
    <param-name>semester</param-name>
    <param-value></param-value>
   </init-param>

   <init-param>
    <param-name>prof-name</param-name>
    <param-value></param-value>
   </init-param>

   <init-param>
    <param-name>course-evaluation</param-name>
    <param-value></param-value>
   </init-param>

   <init-param>
    <param-name>prof-evaluation</param-name>
    <param-value></param-value>
   </init-param>
  </servlet>
  <servlet-mapping>
    <servlet-name>Post</servlet-name>
    <url-pattern>/post</url-pattern>
  </servlet-mapping>
  <listener>
    <listener-class>com.skce.post.ContextListener</listener-class>
  </listener>
</web-app>

我得到了 HTTP 状态 404,描述是“请求的资源不可用”。我使用 Apache Tomcat/7.0.73。

什么会导致这个错误?

【问题讨论】:

  • 检查你的 web.xml 文件,你有 url /Post 的 servlet 映射吗?
  • 发送您的web.xml 和站点目录结构
  • 运行html文件是什么意思?尝试访问 html 页面时是否出现错误?或者当你按下提交按钮时?
  • @W-S 当我按下提交按钮时

标签: java tomcat servlets


【解决方案1】:

如果您的表单是 JSP 页面,请使用 taglib 为您的表单生成正确的上下文路径,这样您就不会在表单操作属性中对其进行硬编码。 &lt;c:url/&gt; taglib 将正确的上下文路径添加到您的表单操作。

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>

<form action="<c:url value="/post"/>" method="post"  >
...
</form>

要使用 taglib,您需要将以下依赖项添加到您的 Web 项目中。

<!-- https://mvnrepository.com/artifact/javax.servlet/jstl -->
<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>jstl</artifactId>
    <version>1.2</version>
</dependency>

【讨论】:

    【解决方案2】:
    <form action='post' method="POST">
        ....
    </form>
    

    【讨论】:

    • 没用....
    【解决方案3】:

    我怀疑你的“动作”属性。 'Post' 是您的 servlet 名称吗?尝试提供完整的 URL,例如“/application-name/servletName”。 同样如 cmets 中所述,请确保 web.xml 中的 servlet 映射

    【讨论】:

    • 应用名称是什么意思?你的意思是包名吗?我的 web.xml 看起来对吗?
    • 你好 Doeun,您的应用程序名称是 skce(如您的 web.xml 中所述),'Post' 的 URL 模式是 '/post'(再次来自 web.xml),尝试以下操作,在你的动作属性,action="/skce/post",如果失败,试试这个action="/skce/post/"
    • 您也可以尝试@W-S 给出的答案,它基本上就是我提到的,我推荐他的方式。我的方式有点硬编码。
    【解决方案4】:

    改变

    &lt;form action="Post" method="post"&gt;

    &lt;form action="Post" action = "/post" method="post"&gt;

    为什么?

    在您当前的代码中,您没有在表单上指定action 属性。因此,您的表单发布默认为“self”,这意味着发布请求将使用表单本身的 URL 访问您的 servlet 容器。但是,您没有映射到表单 url 的后处理程序 servlet。所以 Catalina 抛出 404 - 客户端错误。我看到您的 post 处理程序 servlet 已映射到“/post”的 url 模式。因此,为了使这个表单提交工作,您必须在表单操作中使用“/post”。

    【讨论】:

    • 没有解决...
    • @DoeunKim。试试action = "post"(没有正斜杠)。
    • 如果还是不行,请告诉我完整的表单 URL 以及如何呈现表单。
    • 没用。我在哪里可以找到网址?或者我可以把我的文件夹发给你吗?
    • 在浏览器中显示的表单 URL。另外,您的服务器是如何呈现表单的?它是一个简单的 servlet 渲染吗?
    猜你喜欢
    • 1970-01-01
    • 2018-06-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多