栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

Tomcat如何在没有web.xml的情况下完全引导应用程序?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Tomcat如何在没有web.xml的情况下完全引导应用程序?

Servlet
3.0添加了可插入性机制。它的工作方式是,在加载您的应用程序时,它将扫描类路径中名为

javax.servlet.ServletContainerInitializer
inside
的文件
meta-INF/services
。在这里,实现者应该具有实现的名称,servlet容器可以在其中加载它。您可以在
spring-web
jar中看到此文件。它
org.springframework.web.SpringServletContainerInitializer
列为初始化程序的实现。

Spring初始化程序的工作方式是,它

WebApplicationInializer
由servlet容器传递所有的实现(在类路径上)。那么servlet容器如何知道传递这些实现?如果查看inializer的源代码,将会看到

@HandlesTypes(WebApplicationInitializer.class)public class SpringServletContainerInitializer implements ServletContainerInitializer {

它是

@HandlesType
注释。所有类
甚至注释1中列出的
@HandlesTypes
将获得由servlet容器拾起,并传递到
SevletContainerInitializer
通过一个回调方法参数

void onStartup(java.util.Set<java.lang.Class<?>> c, ServletContext ctx)

Set
参数包含servlet容器在扫描时拾取的所有实现。您可以浏览源代码,以了解Spring对这些实现的作用。它基本上只是调用
onStartup
所有inializer的,并传入
ServletContext


1.这听起来有点不清楚(上面的解释在切线上可能有点偏离),所以我将其作为附加内容发布在这里。想象一下,

@HandlesType
相反是

@HandlesTypes({WebApplicationInitializer.class, Controller.class})public class SpringServletContainerInitializer implements ServletContainerInitializer {

这意味着servlet容器还将扫描用注释的类

@Controller
,并将它们传递到
onStartup
Spring初始化程序的。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/569877.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号