我正在尝试创建一个简单的HTML表单来将数据从JSP提交到Servlet。我得到404未找到异常。我的请求网址:http://*****:80**/myapps/more/test.html
<form id="userForm" action="/more/loginServlet" method="post">
<input id="Submit" value="Submit" type="submit">
</form>
的web.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd">
<web-app>
<servlet>
<servlet-name>LoginServlet</servlet-name>
<servlet-class>com.more1.LoginServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>LoginServlet</servlet-name>
<url-pattern>/more/loginServlet</url-pattern>
</servlet-mapping>
</web-app>
Servlet代码
package com.more1;
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("===========================");
// System.out.println(request.getParameter("service_number"));
}
答案 0 :(得分:3)
您的表单操作网址错误。它应该留在/myapps
上下文而不是外出。 404错误仅表示请求的URL未指向任何有效资源。如果您密切关注浏览器地址栏中的请求网址,您应该已经注意到/myapps
部分已经消失。
相应修复:
<form id="userForm" action="/myapps/more/loginServlet" method="post">
或者就像你现在(根据浏览器地址栏中的网址)已经坐在/myapps/more
中一样:
<form id="userForm" action="loginServlet" method="post">
或者如果您担心上下文路径的动态性,内联HttpServletRequest#getContextPath()
如下:
<form id="userForm" action="${pageContext.request.contextPath}/more/loginServlet" method="post">
另一种方法是引入HTML <base>
标记。
无关,你是否绝对肯定你在学习servlet时正在阅读适当的和最新的教程?您的web.xml
根声明是一个已经超过十年的Servlet 2.3声明。我们目前已经在Servlet 3.0上了。从our servlets wiki page开始,获取一些理智的Hello World示例和指向理智教程的链接。
答案 1 :(得分:1)
您的应用似乎部署在myapps
上下文路径中(HTML网页网址为/myapps/more/test.html
)。但是您的表单提交到/more/loginServlet
。它应该提交给/myapp/more/loginServlet
。
要避免对页面中的上下文路径进行硬编码,请使用JSTL标记:
<form action="<c:url value='/more/loginServlet'/>" ...>
或明确地预先添加上下文路径:
<form action="${pageContext.request.contextPath}/more/loginServlet" ...>