Spring Boot视图渲染异常:未解析Spring标签与EL表达式
你遇到的这个问题是Spring Boot整合JSP时的典型坑——JSP里的EL表达式(比如${name})和Spring标签没被解析,直接以原始文本返回了。我来帮你一步步排查解决:
1. 先补全必要的依赖
Spring Boot的嵌入式Tomcat默认不带JSP解析组件,必须手动添加两个关键依赖。如果是Maven项目,在pom.xml里加上:
<!-- JSP解析核心依赖 --> <dependency> <groupId>org.apache.tomcat.embed</groupId> <artifactId>tomcat-embed-jasper</artifactId> <scope>provided</scope> </dependency> <!-- JSTL标签库依赖 --> <dependency> <groupId>javax.servlet</groupId> <artifactId>jstl</artifactId> </dependency>
如果是Gradle项目,对应配置是:
providedRuntime 'org.apache.tomcat.embed:tomcat-embed-jasper' implementation 'javax.servlet:jstl'
2. 修改项目打包方式
Spring Boot的jar打包格式不支持JSP(可执行Jar的类加载机制无法识别webapp目录下的JSP文件),所以必须把pom.xml里的打包方式改成war:
<packaging>war</packaging>
3. 调整配置类,避免自动配置冲突
你的ApplicationConfigurerAdapter上标注了@EnableWebMvc,这个注解会完全禁用Spring Boot的Web自动配置,很可能导致视图解析器的自定义配置和默认配置冲突。建议直接去掉@EnableWebMvc,Spring Boot已经帮我们配置好了大部分Web相关内容。
另外,你既在配置类里定义了InternalResourceViewResolver,又在application.properties里配置了视图前缀后缀,两者选其一即可。推荐保留application.properties的配置(更符合Spring Boot的自动配置风格),同时简化配置类:
@Configuration public class ApplicationConfigurerAdapter extends WebMvcConfigurerAdapter{ @Override public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) { configurer.enable(); } }
4. 确认JSP页面没有禁用EL表达式
检查你的helloWorld.jsp,确保没有添加<%@ page isELIgnored="true" %>(如果有就删掉),你的当前代码里没有这个问题,这一步可以跳过。
最后重启项目测试
做完以上调整后,重启Spring Boot应用,再次请求http://localhost:8080/home/hello/Stefano,应该就能看到渲染后的Hello Stefano了。
内容的提问来源于stack exchange,提问作者Stefano Sambruna

