You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

顶层JSP向WEB-INF下JSP传参遇404及旧版Servlet创建指导

解决方案

一、无需Servlet的实现方式(服务器端转发)

WEB-INF目录下的资源不允许客户端直接访问,这是Java Web的安全规则,所以你用AJAX直接POST到WEB-INF/000010/item.jsp必然返回404。要绕过这个限制,只能通过服务器端的转发操作。

你之前尝试的JSP转发无效,可能是写法有误,正确的实现方式如下:

  1. 修改前端AJAX的请求目标,改为当前index.jsp或者一个专门的转发JSP,而非直接指向WEB-INF下的文件:
var http = new XMLHttpRequest();
// 请求当前index.jsp,或单独的转发页面
http.open("POST", "index.jsp", true);
http.setRequestHeader("Content-type","application/x-www-form-urlencoded");
var params = "newMarkerCoords=" + newMarkerCoords+"&fildmarkertype="+fildmarkertype; 
http.send(params);
  1. 在index.jsp的顶部添加服务器端转发逻辑,当检测到POST请求时,将请求转发到WEB-INF下的item.jsp:
<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%>
<%
// 仅当是POST请求时执行转发
if ("POST".equals(request.getMethod())) {
    // 将请求参数传递到item.jsp
    request.getRequestDispatcher("/WEB-INF/000010/item.jsp").forward(request, response);
    return; // 转发后终止当前页面的执行
}
%>
<!-- 原有的HTML内容继续保留 -->
<html>
...

这样,当你点击提交按钮发送POST请求时,服务器会先接收请求,再内部转发到WEB-INF下的item.jsp,此时item.jsp可以通过request.getParameter("newMarkerCoords")获取参数,同时客户端不会直接访问WEB-INF路径,避免404错误。

二、旧版Servlet的创建步骤(无@WebServlet注解)

如果需要用Servlet处理请求(比如复杂业务逻辑),Servlet 3.0之前的版本需要通过web.xml手动配置,步骤如下:

1. 创建Servlet类

新建一个Java类,继承HttpServlet,重写doPost方法:

import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

public class CoordsServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException {
        // 获取请求参数
        String newMarkerCoords = request.getParameter("newMarkerCoords");
        String fildmarkertype = request.getParameter("fildmarkertype");
        
        // 可在此添加业务处理逻辑
        
        // 转发到WEB-INF下的item.jsp
        try {
            request.getRequestDispatcher("/WEB-INF/000010/item.jsp").forward(request, response);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

2. 在web.xml中配置Servlet映射

找到项目的WEB-INF/web.xml文件,添加以下配置:

<web-app xmlns="http://java.sun.com/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
         version="2.5"> <!-- 对应Servlet 2.5版本,无注解支持 -->

    <!-- 配置Servlet -->
    <servlet>
        <servlet-name>CoordsServlet</servlet-name>
        <servlet-class>com.yourpackage.CoordsServlet</servlet-class> <!-- 替换为你的Servlet完整类名 -->
    </servlet>

    <!-- 配置Servlet映射路径 -->
    <servlet-mapping>
        <servlet-name>CoordsServlet</servlet-name>
        <url-pattern>/coords-submit</url-pattern> <!-- 前端请求的路径 -->
    </servlet-mapping>

</web-app>

3. 修改前端AJAX请求路径

将AJAX的请求目标改为Servlet的映射路径:

var http = new XMLHttpRequest();
http.open("POST", "coords-submit", true); // 对应web.xml中的url-pattern
http.setRequestHeader("Content-type","application/x-www-form-urlencoded");
var params = "newMarkerCoords=" + newMarkerCoords+"&fildmarkertype="+fildmarkertype; 
http.send(params);

这样配置后,前端请求会被Servlet接收处理,再转发到WEB-INF下的item.jsp,同样可以避免404错误。

内容的提问来源于stack exchange,提问作者Mike

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 14:55:21