简单的HTML表单提交错误

时间:2013-01-21 12:26:51

标签: servlets

我正在尝试创建一个简单的HTML表单来将数据从JSP提交到Servlet。我得到404未找到异常。我的请求网址:http://*****:80**/myapps/more/test.html

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

2 个答案:

答案 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" ...>