在每个web应用程序的WEB-INF目录下都有一个web.xml文件,其中记录了servlet的一些配置信息,在tomcat的conf目录下也有一个web.xml文件,这个xml文件是所有在该tomcat上部署的web应用程序的基础配置,就是说,每个web应用程序的web.xml都是在 conf/web.xml上的基础上进行扩展和覆盖的。
在一些web应用程序的web.xml文件中可能找到下面的映射:
<servlet-mapping>
<servlet-name>invoker</servlet-name>
<url-pattern>/servlet/*</url-pattern>
</servlet-mapping>
这说明当匹配/servlet/*路径时,会调用一个注册名称为invoker的Servlet。可是在web.xml文件中根本找不到这个 Servlet的注册。这里注意,一个web应用程序的部署描述除了包含在该应用程序内部的web.xml文件中,还包含<tomcat主目 录>\conf目录下的web.xml文件中的全局设置信息,在<tomcat主目录>\conf\web.xml文件中可以看到:
<servlet>
<servlet-name>invoker</servlet-name>
<servlet-class>
org.apache.catalina.servlets.InvokerServlet
</servlet-class>
<load-on-startup>2</load-on-startup>
</servlet>
这样,如果有多个web应用程序要用到这个Servlet,我们不必在每个web应用程序中都单独注册这个servlet,而只需在web.xml文件中 映射其访问路径即可。这个Servlet的作用就是激活和调用任何其他Servlet,被称为Servlet激活器。 <load-on-startup>2</load-on-startup>设置它随Tomcat的启动而加载。所以,在web 应用程序中为Servlet激活器invoker映射的访问路径以"/*"结尾,即使某个Servlet程序没有在web.xml文件中注册,我们只需将 Servlet激活器所映射的访问路径中的通配符(*)替换为这个Servlet的完整类名,就可以通过servlet激活器来调用这个Servlet程 序。