Spring Boot MVC跳转JSP失败,遇无Java编译器配置问题求助
解决Spring Boot中Controller跳转JSP时出现的"No Java compiler available"错误
我之前在搭建Spring Boot MVC应用跳转JSP时也碰到过一模一样的问题,这个错误本质是Spring Boot处理JSP视图时找不到可用的Java编译器,导致无法编译JSP文件。结合你的场景(RestController正常,普通Controller跳转JSP出错),给你几个实用的排查和解决方向:
1. 确认JSP相关依赖是否完整且配置正确
Spring Boot本身对JSP的支持不是默认的,必须手动引入必要的依赖,而且版本和scope的配置很关键:
- 必须引入
tomcat-embed-jasper(负责JSP编译)和jstl(JSP标准标签库),本地开发时不要给tomcat-embed-jasper设置provided的scope,否则本地运行时会缺失依赖。示例配置:<dependency> <groupId>org.apache.tomcat.embed</groupId> <artifactId>tomcat-embed-jasper</artifactId> <!-- 本地开发保留默认compile scope,部署到外部容器时再改为provided --> </dependency> <dependency> <groupId>javax.servlet</groupId> <artifactId>jstl</artifactId> </dependency> - 建议用Spring Boot的parent依赖来管理所有版本,避免手动指定版本导致的兼容性问题。
2. 检查JDK配置是否正确
这个错误提示编译器为null,大概率是项目没有关联到完整的JDK(JRE没有javac编译器):
- 确认IDE(IDEA/Eclipse)中项目的JDK配置:Project Structure里的SDK、Module的Language Level要和你pom.xml中指定的
java.version完全一致。 - 检查系统环境变量
JAVA_HOME是否指向完整的JDK目录,而不是JRE目录,JSP编译必须用到JDK里的javac工具。
3. 验证JSP视图解析器配置
确保你在application.properties/application.yml中正确配置了视图解析路径,而且JSP文件的位置要和配置对应:
- 示例properties配置:
spring.mvc.view.prefix=/WEB-INF/jsp/ spring.mvc.view.suffix=.jsp - JSP文件必须放在
src/main/webapp/WEB-INF/jsp/目录下(如果是Maven项目),这个目录结构不能错,否则Spring找不到对应的视图文件。
4. 排查依赖冲突或编译器依赖缺失
- 对于JDK8及以下版本,Spring Boot需要JDK中的
tools.jar来编译JSP,如果这个jar没有被正确引入,就会出现编译器找不到的问题。可以检查Maven依赖中是否包含这个jar,或者手动添加(不过更推荐通过正确配置JDK来解决)。 - 用
mvn dependency:tree命令查看依赖树,排查是否有容器依赖冲突(比如同时引入了tomcat和jetty的依赖),冲突会导致tomcat-embed-jasper无法正常工作。
5. 检查打包和运行方式
Spring Boot默认的jar打包方式对JSP支持有限,因为jar包结构不包含webapp目录:
- 建议将打包方式改为war,在pom.xml中设置:
<packaging>war</packaging> - 如果是war打包,部署到外部容器时可以把
spring-boot-starter-tomcat的scope设为provided,但本地开发时无需修改,IDE会自动处理嵌入tomcat的运行。
内容的提问来源于stack exchange,提问作者Umair Zahid
相关产品推荐
相关产品推荐

