1.servlet映射
<servlet-mapping>
<servlet-name>MyName</servlet-name>
<url-pattern>/hello.html<url-pattern>
</servlet-mapping>
其中,url也可以使用通配符,但是只有两种形式:
1)*.扩展名
2)正斜杠"/"开头,并以"/*结尾"
例如:指定/action/*.xx,在地址栏中输入/action/test.xx是无法匹配的,因为/action/*.xx是一个无效的映射路径。
2.servlet激活器
<servlet-mapping>
<servlet-name>invoker</servlet-name>
<url-pattern>/servlet/*<url-pattern>
</servlet-mapping>
这段内容说明,当访问应用程序下面任何以/servlet/开头的程序时,都会去调用一个注册名为invoker的servlet。
这个注册名为invoker的servlet,在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>
其中load-on-startup设定为随tomcat启动而加载,
而invoker这个servlet的作用就是去激活和调用任何其他的Servlet,故被称为Servlet激活器。
3.servlet的加载
1)当接到某个servlet的请求时,servlet引擎会检查是否已经创建了该servlet的实例对象,如果已经创建了,直接到第4步,否则第2步。
2)创建并装载Servlet的一个实例对象
3)调用servlet的init()方法,执行Servlet的一些初始化工作
4)创建一个用于封装HTTP请求消息的HttpServletRequest对象和一个代表HTTP响应消息的HttpServletResponse对象,然后调用servlet的service()方法,将这两个对象传递进去
5)在一个Web应用程序被停止或者重新启动之前,servlet引擎将卸载其中运行的servlet。在卸载之前,调用servlet的destory()方法,执行servlet的一些清理工作。
如果对某个已经装载的servlet做了修改,除非重新启动服务器,否则内存中运行的仍旧是旧的servlet代码。
tomcat服务器可以设置,当servlet被修改后,是否自动装载,tomcat主目录/conf/server.xml中的Context元素中的reloadable属性,默认为false,就是不自动加载修改的servlet。设定为true,会自动装载。当开发时,可以设定为true,提高开发效率,生产环境中再设定为false,减轻服务器负担。