1、servlet运行过程:
①web服务器受到浏览器的servlet请求后,web容器首先检查是否装载并创建了该servlet实例对象。
②如果没有,web容器则装载并创建servlet实例对象。如果有,则直接跳到④。
③调用servlet的init方法。
④创建一个封装了http请求消息的httpservletrequest对象,和一个代表http响应消息的httpservletresponse对象,并将这两个对象作为参数,传入service方法。
⑤web应用被停止或者被重启之前,会调用destroy方法。
2、servlet与普通java类区别:
①servlet不能独立运行,完全用servlet引擎来控制和调度。
②通常情况下,servlet使用单例模式,只在第一次访问时创建一次,可多次调用。
3、配置文件中<servlet>标签内增加<load-on-startup>1</load-on-startup>,可在web容器启动时创建servlet,常用于创建必要的数据库表和数据。
4、web.xml找不到的servlet,会由缺省servlet处理。
在tomcat的web.xml文件中,注册了一个名为org.apache.catalina.servlets.DefaultServlet的servlet,并设置为缺省servlet,即路径为"/"
服务器访问的静态html或图片等,实际是在访问这个缺省servlet。
5、默认情况下,servlet是单例多线程。如果servlet中有全局变量,则会引起线程不安全。
为了避免引起线程安全问题,可以实现接口SingleThreadModel,这样将会取消servlet的单例模式,通过创建多个servlet的实例对象来避免线程安全问题发生。
6、servletContext:
web容器在启动时,会为每一个web应用程序都创建一个对应的servletContext对象,它代表当前web应用。
ServletConfig维护了servletContext对象的引用,可以通过getServletContext方式获得servletContext对象。
一个web应用中,只有一个servletContext,因此servlet对象间可以通过servletContext实现通讯。
servletContext对象被称为context域对象。