internalresourceviewresolver是spring mvc中专为安全渲染jsp设计的视图解析器,通过服务器端forward访问web-inf下受保护的jsp文件,避免外部直接请求;其核心配置需设置prefix(如"/web-inf/jsp/")和suffix(如".jsp"),控制器返回逻辑名(如"user/list")后自动拼接为"/web-inf/jsp/user/list.jsp"并由requestdispatcher内部转发加载,确保路径不暴露给客户端。

InternalResourceViewResolver 是 Spring MVC 中专为安全渲染 JSP 设计的视图解析器。它通过服务器端 内部转发(forward) 访问 WEB-INF 下受保护的 JSP 文件,避免外部直接 URL 请求,从根本上防止资源暴露。
核心配置要点
必须设置 prefix 和 suffix,且 prefix 通常指向 /WEB-INF/ 或其子目录(如 /WEB-INF/jsp/),suffix 为 .jsp。这样控制器返回逻辑名(如 "user/list"),解析器自动拼成 /WEB-INF/jsp/user/list.jsp,再由容器内部转发加载。
- 前缀(prefix)不能以
file:、http:等协议开头,必须是 Web 应用内相对路径 - 后缀(suffix)应与实际文件扩展名严格一致,包括点号(
.jsp,不是jsp) - JSP 文件必须放在
WEB-INF目录下或其子目录中,否则无法被 InternalResourceViewResolver 安全访问
XML 配置方式(传统 Spring MVC)
在 spring-servlet.xml 或等效配置文件中声明 Bean:
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"><property name="prefix" value="/WEB-INF/jsp/"></property><property name="suffix" value=".jsp"></property><property name="viewClass" value="org.springframework.web.servlet.view.JstlView"></property></bean>
说明:添加 viewClass="JstlView" 可启用 JSTL 标签支持(如 <if></if>、<message></message>),前提是项目已引入 JSTL 依赖。
Java JDK 25 来自 OpenJDK 官方归档,版本为 JDK 25,本条下载地址已指向官方 Windows x64 zip 安装包直链,适合调试旧项目或兼容旧版 Java 运行环境。
Java 配置方式(Spring Boot 或 JavaConfig)
使用 @Bean 方法注册:
@Bean
public ViewResolver viewResolver() {
InternalResourceViewResolver resolver = new InternalResourceViewResolver();
resolver.setPrefix("/WEB-INF/jsp/");
resolver.setSuffix(".jsp");
resolver.setViewClass(JstlView.class); // 启用 JSTL 支持
return resolver;
}
注意:Spring Boot 2.0+ 默认不内置 JSP 支持,需确保部署为 WAR 包,并在 Servlet 容器(如 Tomcat)中运行;同时显式添加 javax.servlet:jstl 依赖。
为什么这样更安全?
因为 InternalResourceViewResolver 底层调用的是 RequestDispatcher.forward(),整个过程发生在服务端内部,客户端始终只看到原始请求 URL(如 /users),而不会暴露 /WEB-INF/jsp/users.jsp 这类真实路径。任何试图直接在浏览器访问 http://host/WEB-INF/jsp/home.jsp 的行为都会被容器拦截并返回 404 或 403。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










