用户的请求过来,comcat 会根据虚拟目录先到 webapps 目录查找项目,如果找到了则进入到项目下的 WEB-INF
目录下查找 web.xml
文件,查找到则解析该文件,根据资源路径查找请求资源,如果找到了资源则正常实例化和调用有关的方法,如果找不到则返回 404。
如果找不到 web.xml
文件呢?使用 @WebServlet
注解来映射 url-pattern
,是没有 web.xml
文件的。此时服务器又是如何查找请求资源的呢?
注解本质是接口,@WebServlet("/demo01")
这样的注解,要起作用,tomcat 肯定会自动实现接口 WebServelt
,然后对实现类实例化,再调用实例对象的 urlPatterns()
方法,该方法返回值是一个字符串数组,而数组里面只有一个元素,就是字符串 /demo01
,难道 tomcat 要创建多个 WebServlet
对象,然后再分别调用对象的 urlPatterns()
方法,取出字符串数组里面的元素值,将其和用户的请求资源路径进行相等比较,如果相等则实例化该注解所标注的 Servlet
。