今天在学习 SpringMVC,万事开头难,没想到这么难,最基本的 Hello World
竟然困了我半个小时,主要问题出在 Tomcat 10 版本不适应和 Maven 依赖的范围上,报错为: Servlet.service() for servlet jsp threw exception java.lang. NullPointerException
,下面是具体解决方案
刚开始在写依赖时就发现书上的 groupId
为 javax
,我之前就吃过这样的亏啊,为了让其适配我的 Tomcat 10,惯性思维的就将其改成了 jakarta
,结果在写 Controller
类时候的方法只能识别 javax
,总不能又去改源码吧,没办法将依赖换成这样
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>4.0.1</version>
</dependency>
<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>javax.servlet.jsp-api</artifactId>
<version>2.3.3</version>
</dependency>
果不其然,在执行 Tomcat 服务器时一直报错说配置文件中的 org.springframework.web.servlet.DispatcherServlet
不是个 Servlet,没办法只能再换方法了
心想 Maven 不是可以打 Tomcat 插件嘛,当即糊上依赖代码
<build>
<plugins>
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.2</version>
</plugin>
</plugins>
</build>
运行继续报错: Servlet.service() for servlet jsp threw exception java.lang. NullPointerException
,去 StackOverflow 上一看说是必须将范围设置成 provided
,然后运行可以显示,后来抱着试一试的心态换回正常的 Tomcat 运行,结果还是不行
PS:最终换回了 Tomcat 9.052 版本