情况说明:SpringMVC注解版环境搭建的时候,启动时未加载我的WebApplicationInitializer.
import cn.itcast.springmvctest.web.config.AppConfig;
import jakarta.servlet.ServletContext;
import jakarta.servlet.ServletException;
import jakarta.servlet.ServletRegistration;
import org.springframework.web.WebApplicationInitializer;
import org.springframework.web.context.support.AnnotationConfigWebApplicationContext;
import org.springframework.web.servlet.DispatcherServlet;
//tomcat启动会加载该类。可以基于此实现注解版springmvc
public class AppStarter implements WebApplicationInitializer {
//tomcat启动调用该方法
@Override
public void onStartup(ServletContext servletContext) throws ServletException {
//创建web的ioc容器
AnnotationConfigWebApplicationContext context = new AnnotationConfigWebApplicationContext();
context.register(AppConfig.class);//注册配置类
//添加DispatcherServlet
DispatcherServlet dispatcherServlet = new DispatcherServlet(context);
ServletRegistration.Dynamic appServlet = servletContext.addServlet("app", dispatcherServlet);
appServlet.setLoadOnStartup(1);//启动顺序
appServlet.addMapping("/*");//映射路径
}
}
原因:ServletContainerInitializer
类之间存在差异- javax. servlet和-jakarta. servlet。tomcat 9.0以及之前版本对应的是javax. servlet,tomcat 10对应的是jakarta. servlet。而spring6.0源码使用的是jakarta.servlet.ServletContainerInitializer,也就是后者。所有必须用tomcat10才行,而我一开始一直使用tomcat9导致一直不会进入该方法。
还有新建gradle模块的时候也需要注意,否则也会导致启动时不加载WebApplicationInitializer。可以参照以下文章搭建
spring源码环境搭建,测试springmvc_springmvc 源码 搭建调试_shuzhou12的博客-CSDN博客
tomcat9和tomcat10区别
浅识Tomcat10和Tomcat9的区别_tomcat9和10区别_yames01的博客-CSDN博客
错误:Task 'wrapper' not found in project ':xxxxxxxx'
重启。重启不行则删除.idea文件重新打开idea
这一个问题就困扰了我一天半,果然还需多加学习🤦♂️