Spring Boot应用中@Controller无法生效的问题及解决方法
解决@Controller未生效的问题
1. 修复Controller类的语法错误
你的HomeController中导入GetMapping的语句使用了单引号,属于语法错误,会导致编译失败,Spring无法识别该控制器。修改为正确的代码:
package com.learning.SpringBootWeb; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.GetMapping; @Controller public class HomeController { @GetMapping("/") public String home() { return "index"; } }
2. 调整依赖避免版本冲突
单独引入tomcat-jasper可能和Spring Boot自带的Tomcat版本冲突,建议替换为Spring Boot官方提供的JSP支持依赖:
<dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <!-- 改用Spring Boot适配的JSP依赖,自动匹配版本 --> <dependency> <groupId>org.apache.tomcat.embed</groupId> <artifactId>tomcat-embed-jasper</artifactId> <scope>provided</scope> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> </dependencies>
3. 配置JSP视图解析路径
在src/main/resources/application.properties中添加视图解析配置,指定JSP文件的存放路径:
# JSP文件所在目录前缀 spring.mvc.view.prefix=/WEB-INF/jsp/ # JSP文件后缀 spring.mvc.view.suffix=.jsp
同时确保index.jsp文件放在src/main/webapp/WEB-INF/jsp/目录下,目录不存在请手动创建。
4. 确认包扫描范围(可选)
虽然启动类和控制器在同一包下,@SpringBootApplication默认会扫描启动类所在包及其子包,若需显式指定可修改启动类:
@SpringBootApplication(scanBasePackages = "com.learning.SpringBootWeb") public class SpringBootWeb1Application { public static void main(String[] args) { SpringApplication.run(SpringBootWeb1Application.class, args); } }
完成以上修改后重启应用,访问根路径即可正常加载index.jsp页面。
内容的提问来源于stack exchange,提问作者Kireeti Nunna
相关产品推荐
相关产品推荐

