这是我的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。
什么可能导致此错误?
答案 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>