NetBeans中Spring Boot运行JSP报500内部服务器错误
1. 控制器类导入错误
LoginController中存在错误的静态导入:
import static com.fasterxml.jackson.databind.cfg.CoercionInputShape.String;
这行代码将Jackson包内的枚举值静态导入,覆盖了默认引入的java.lang.String类型,导致loginMessage()方法返回值类型完全不符合Spring MVC的要求,请求映射时直接抛出类型异常。
修复:直接删除这行错误导入,同时清理类中所有未使用的导入项(包括@Bean、ModelMap、RequestParam、ResponseBody、RestController、InternalResourceViewResolver相关导入),java.lang.String属于JDK默认加载类,无需手动导入。
2. Maven依赖配置错误
2.1 JSP引擎依赖作用域配置错误
tomcat-embed-jasper是内嵌Tomcat解析JSP的核心依赖,你给该依赖配置了<scope>provided</scope>,代表该依赖仅在编译、测试阶段生效,运行时不会被加载。直接通过main方法启动内嵌Tomcat时,容器没有JSP解析能力,访问JSP必然报错。
修复:删除该依赖的scope配置,使用默认的compile作用域即可,正确配置:
<dependency> <groupId>org.apache.tomcat.embed</groupId> <artifactId>tomcat-embed-jasper</artifactId> </dependency>
2.2 视图技术依赖冲突
pom中同时引入了spring-boot-starter-thymeleaf和JSP相关依赖,Spring Boot自动配置时会优先注册Thymeleaf视图解析器,默认去classpath:/templates/路径下找login.html模板,找不到就抛出异常,不会走到JSP解析流程。
修复:如果确定使用JSP作为视图层技术,直接删除Thymeleaf starter依赖:
<!-- 删除以下依赖块 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-thymeleaf</artifactId> </dependency>
3. JSP存放路径不符合规范
Spring Boot内嵌Tomcat对JSP的扫描路径有强制要求,JSP文件必须存放在src/main/webapp/WEB-INF/jsp/目录下,如果你将WEB-INF目录建在src/main/resources下,容器无法扫描到对应JSP文件,会报资源找不到错误。
修复:在src/main目录下新建webapp目录,逐层创建WEB-INF/jsp子目录,将login.jsp移动到该路径下。
4. 其他校验项
- 本地开发直接通过IDE运行主类启动即可,Spring Boot内嵌Tomcat不支持可执行jar包运行JSP,如果需要打包部署请打war包部署到外部Tomcat容器。
- 当前控制器方法没有向页面传递
name参数,页面中${name}会显示为空,需要传值的话修改控制器方法:
@RequestMapping("/login") public String loginMessage(Model model){ model.addAttribute("name", "新手用户"); return "login"; }
- 提前检查本地MySQL服务是否启动、
musadb库是否存在、数据库账号密码是否配置正确,数据库连接失败也会导致应用启动或请求报错。
所有修改完成后,执行mvn clean compile清理重新构建项目,重启应用后访问http://localhost:8082/login即可正常加载JSP页面。
内容的提问来源于stack exchange,提问作者Humphrey

