按下提交按钮时出现HTTP状态404

时间:2017-01-22 05:14:40

标签: java tomcat servlets

这是我的HTML代码:

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();
}

这是我的servlet代码:

<?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>

这是我的web.xml:

{{1}}

我得到HTTP状态404,描述是&#34;请求的资源不可用。&#34;我使用Apache Tomcat / 7.0.73。

什么可能导致此错误?

4 个答案:

答案 0 :(得分:0)

更改

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

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

<强>为什么吗

在您当前的代码中,您尚未在表单上指定action属性。因此,您的表单帖子默认为&#34; self&#34;意味着post请求将使用表单本身的URL命中servlet容器。但是,您没有映射到表单url的后处理程序servlet。所以Catalina抛出404 - 客户端错误。我看到你的post handler servlet被映射到&#34; / post&#34;的url模式。因此,为了使此表单提交工作,您必须使用&#34; / post&#34;在你的表格行动中。

答案 1 :(得分:-1)

<form action='post' method="POST">
    ....
</form>

答案 2 :(得分:-1)

我怀疑你的行动&#39;属性。是&#39;发布&#39;你的servlet名字?尝试提供完整的URL,例如&#39; / application-name / servletName&#39;。 同样如评论中所述,确保web.xml中的servlet映射

答案 3 :(得分:-1)

如果您的表单是JSP页面,请使用taglib为表单生成正确的上下文路径,因此您不必在表单操作属性中对其进行硬编码。 <c:url/> 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>