0

我正在尝试创建一个简单的 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>

小服务程序代码


package com.more1;

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

    System.out.println("===========================");
    // System.out.println(request.getParameter("service_number"));
 }
4

2 回答 2

3

您的表单操作 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<base>标记。

也可以看看:


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

于 2013-01-21T12:31:25.233 回答
1

您的应用似乎部署在上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" ...>
于 2013-01-21T12:33:34.033 回答