【问题标题】:Simple HTML form submit error简单的 HTML 表单提交错误
【发布时间】:2013-01-04 12:06:52
【问题描述】:

我正在尝试创建一个简单的 HTML 表单以将数据从 JSP 提交到 Servlet。我收到 404 not found 异常。我的请求网址: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"));
 }

【问题讨论】:

    标签: servlets


    【解决方案1】:

    您的表单操作 URL 错误。它应该留在/myapps 上下文中而不是出去。 404 错误仅仅意味着请求的 URL 没有指向任何有效的资源。如果您仔细观察浏览器地址栏中的请求 URL,您应该已经注意到 /myapps 部分已经消失了。

    相应地修复它:

    <form id="userForm" action="/myapps/more/loginServlet" method="post">
    

    或者就像您目前(根据​​浏览器地址栏中的 URL)已经坐在/myapps/more 中一样:

    <form id="userForm" action="loginServlet" method="post">
    

    或者如果你担心上下文路径的动态性,内联HttpServletRequest#getContextPath()如下:

    <form id="userForm" action="${pageContext.request.contextPath}/more/loginServlet" method="post">
    

    另一种方法是引入 HTML &lt;base&gt; 标签。

    另见:


    与具体问题无关,在学习 servlet 时,您是否绝对肯定您正在阅读正确且最新的教程?您的 web.xml 根声明是一个 Servlet 2.3,已经有十多年的历史了。我们目前已经在使用 Servlet 3.0。从 our servlets wiki page 开始,获取一些理智的 Hello World 示例和理智教程的链接。

    【讨论】:

      【解决方案2】:

      您的应用似乎部署在 myapps 上下文路径中(HTML 页面 URL 为 /myapps/more/test.html)。但是您的表单提交给/more/loginServlet。它应该提交给/myapp/more/loginServlet

      为避免对页面中的上下文路径进行硬编码,请使用 JSTL 标记:

      <form action="<c:url value='/more/loginServlet'/>" ...>
      

      或显式添加上下文路径:

      <form action="${pageContext.request.contextPath}/more/loginServlet" ...>
      

      【讨论】:

        猜你喜欢
        • 2012-09-13
        • 2015-04-20
        • 2021-09-17
        • 1970-01-01
        • 1970-01-01
        • 2013-04-14
        • 2017-08-30
        • 2012-02-08
        相关资源
        最近更新 更多