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

Spring MVC中点击事件触发时如何将JSP页面注入Div

解决WEB-INF下JSP无法通过AJAX直接加载的问题

我太清楚这个坑了!你遇到的404错误根源很明确:WEB-INF是Java Web项目的受保护目录,浏览器发起的外部请求根本无法直接访问这个目录里的资源——服务器会直接拦截这类请求,这是项目安全层面的设计。直接通过AJAX请求/WEB-INF/views/studentAdmission.jsp肯定不行,得绕个弯,通过后端控制器来转发请求。

下面给你两种常用的解决方案,对应不同的后端技术栈:

方案一:用Spring MVC Controller转发(主流方案)

如果你的项目用Spring MVC,只需要写一个简单的控制器来映射请求,然后转发到目标JSP:

1. 创建Controller类

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;

@Controller
public class StudentAdmissionController {

    // 定义请求映射地址,前端AJAX就请求这个地址
    @GetMapping("/student/admission")
    public String showAdmissionPage() {
        // 这里返回的是JSP的文件名(不需要前缀后缀,视图解析器会自动拼接)
        return "studentAdmission";
    }
}

2. 确保视图解析器配置正确

在Spring的配置文件(比如spring-servlet.xml或者application.yml)里,要配置视图解析器的前缀和后缀,让它能找到WEB-INF下的JSP:

XML配置方式:

<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    <property name="prefix" value="/WEB-INF/views/"/>
    <property name="suffix" value=".jsp"/>
</bean>

YAML配置方式(Spring Boot):

spring:
  mvc:
    view:
      prefix: /WEB-INF/views/
      suffix: .jsp

3. 修改前端AJAX代码

把原来直接请求JSP的路径改成请求Controller的映射地址:

<script>
$(document).ready(function() {
    var contextPath = "<%=request.getContextPath()%>";
    $("#stuAdmn").click(function(){
        // 现在请求的是Controller的映射路径,而不是直接访问JSP
        $("#pageContent").load(contextPath + "/student/admission");
    });
});
</script>

方案二:用传统Servlet转发

如果你的项目还在用传统Servlet,也可以写一个Servlet来处理转发:

1. 创建Servlet类

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

@WebServlet("/student/admission")
public class StudentAdmissionServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // 直接转发到WEB-INF下的JSP文件
        request.getRequestDispatcher("/WEB-INF/views/studentAdmission.jsp").forward(request, response);
    }
}

2. 修改前端AJAX代码

和上面一样,把请求路径改成Servlet的映射地址即可,代码和方案一的前端代码完全一致。

关键提醒

不管用哪种方案,核心逻辑都是:前端请求后端的映射地址,由后端负责把WEB-INF里的JSP内容返回给前端,这样就能绕过WEB-INF的访问限制,同时保证资源的安全性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 09:57:24