java - tomcat如何识别注解指定的servlet?

标签 java tomcat servlets

在 servlet 3.0 之前,servlet 需要通过提供 url 模式和 servlet 类在 web.xml 中进行配置。每当发送对 servlet 的请求时,tomcat 都会在 web.xml 中搜索 servlet 类,并根据请求的类型调用 doget 或 dopost。 在 servlet 3.0 中,我们可以使用 @WebServlet 等注释在 servlet 类本身中配置 servlet。 我的问题是在这种情况下 tomcat 如何识别 servlet 类,因为在 web.xml 中没有为 servlet 指定映射。

提前致谢。

最佳答案

Tomcat 扫描 Web 应用程序以查找类文件(在 WEB-INF/classes 下和 JAR 中)。然后将类文件传递给 Apache Commons Byte Code Engineering Library (BCEL) 的经过大量编辑、重命名的包的本地副本。 Tomcat 的 BCEL 版本经过优化,仅处理 Tomcat 感兴趣的字节码部分(注释、父类(super class)(如果有)、已实现的接口(interface)),并尽可能快地跳过其余​​部分。 BCEL 直接从磁盘读取类文件。

Tomcat 对来自 BCEL 的结果做了一些仔细的缓存,这样即使对于最复杂的类层次结构,每个类也只处理一次,如果注释(包括从 super 继承的那些),则不需要后处理来获取完整列表类)对于任何类。

注释扫描还会检查与 SCI 的 @HandlesTypes 注释的匹配。

无论您如何扫描每个类的注解都非常昂贵(这也是我不喜欢此特定功能的原因之一)。 Tomcat 的实现在达到它现在使用的高效实现之前经历了几次迭代。

关于java - tomcat如何识别注解指定的servlet?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23776644/

相关文章:

java - 无法使用Java在Windows cmd上显示unicode字符

eclipse - 无法创建 HelloWorld 网络服务

tomcat - PHP/Java 桥 java.lang.NoSuchMethodException

java - 创建文件/文件夹

java - 如何使用 java 驱动程序框架在集合中复制 mongodb 文档

java - 如何打包 java web 应用程序

java - 登录和注销的误区

java - 为什么 html 标签在 servlet 中不起作用?

java - 将 HttpServletRequest 类注入(inject) Service 类的风险

java - 如何覆盖 <String, Object> 的两个映射的 equals ?