怎么在Spring中通过Java对Tomcat进行配置
怎么在Spring中通过Java对Tomcat进行配置?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。
添加Tomcat
依赖
<!-- 自己编译的版本--><dependency> <groupId>org.apache</groupId> <artifactId>apache-tomcat-9.0.36-class="lazy" data-src</artifactId> <version>1.0-SNAPSHOT</version></dependency>
首先需要一个tomcat
启动类
public class TomcatRun {private static final int PORT = 8080;private static final String CONTEXT_PATH = "/com/yu";public static void main(String[] args) {Tomcat tomcat = new Tomcat(); // 设置监听端口tomcat.setPort(PORT);tomcat.getHost().setAppBase("."); // 这里 Connector 不存在,自动创建一个 Connector,并将 tomcat 的端口赋值给 Connectortomcat.getConnector();tomcat.addWebapp(CONTEXT_PATH, new File("class="lazy" data-src/main/webapp").getAbsolutePath());try {tomcat.start();} catch (LifecycleException e) {e.printStackTrace();}tomcat.getServer().await();}}
也可以自己创建一个Connector
指定端口
// 手动创建 connector// Connector connector = new Connector();// connector.setPort(PORT);// tomcat.getService().addConnector(connector);
创建Spring
配置
public class MyWebApplicationInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {@Overrideprotected Class<?>[] getRootConfigClasses() {return new Class[]{RootConfig.class};}@Overrideprotected Class<?>[] getServletConfigClasses() {return new Class[]{AppConfig.class};}@Overrideprotected String[] getServletMappings() {return new String[]{"/*"};}@Overrideprotected Filter[] getServletFilters() {return new Filter[]{//new CharacterEncodingFilter(StandardCharsets.UTF_8.name())};}}
这里就结束了。。。
问题来了Tomcat
是怎么启动Sping
的?
实现了Servlet3.0的容器(例如Tomcat)会扫描classpath*下面的META-INF/services/javax.servlet.ServletContainerInitializer
文件,里面指定ServletContainerInitializer
的实现,另外还有一个注解HandlesTypes
表达对某个类感兴趣,在调用onStartup方法时会将HandlesTypes
指定接口的实现类传递进来。
例如:Spring
中的ServletContainerInitializer
实现类SpringServletContainerInitializer
会调用WebApplicationInitializer
的onStartup
方法,也就是上面定义的MyWebApplicationInitializer
父类的onStartup
,这里就会相继完成AnnotationConfigWebApplicationContext
和DispatcherServlet
的初始化
@HandlesTypes(WebApplicationInitializer.class)public class SpringServletContainerInitializer implements ServletContainerInitializer {@Overridepublic void onStartup(@Nullable Set<Class<?>> webAppInitializerClasses, ServletContext servletContext)throws ServletException {List<WebApplicationInitializer> initializers = new LinkedList<>();if (webAppInitializerClasses != null) {for (Class<?> waiClass : webAppInitializerClasses) {// Be defensive: Some servlet containers provide us with invalid classes,// no matter what @HandlesTypes says...if (!waiClass.isInterface() && !Modifier.isAbstract(waiClass.getModifiers()) &&WebApplicationInitializer.class.isAssignableFrom(waiClass)) {try {initializers.add((WebApplicationInitializer)ReflectionUtils.accessibleConstructor(waiClass).newInstance());}catch (Throwable ex) {throw new ServletException("Failed to instantiate WebApplicationInitializer class", ex);}}}}if (initializers.isEmpty()) {servletContext.log("No Spring WebApplicationInitializer types detected on classpath");return;}servletContext.log(initializers.size() + " Spring WebApplicationInitializers detected on classpath");AnnotationAwareOrderComparator.sort(initializers);for (WebApplicationInitializer initializer : initializers) { // 调用WebApplicationInitializer实现类的onStartup方法initializer.onStartup(servletContext);}}}
到此这篇关于Spring通过Java配置集成Tomcat的文章就介绍到这了,更多相关Spring配置集成Tomcat内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!
看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注编程网行业资讯频道,感谢您对编程网的支持。
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341