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
相关产品推荐
相关产品推荐

