Servlet总结
一、概念:
Servlet就是运行在服务器端的java小程序,就是一个特殊的java类,用来相应客户端的请求。它必须继承HttpServlet类,客户端请求基本分为两种,通过实现doGet()和doPost()方法来完成相应。
二、Servlet API:
1、init:进行初始化;init 方法被设计成只调用一次。它在第一次创建 Servlet 时被调用,在后续每次用户请求时不再调用。
2、Service:处理客户端的请求。service() 方法是执行实际任务的主要方法。Servlet 容器(即 Web 服务器)调用 service() 方法来处理来自客户端(浏览器)的请求,并把格式化的响应写回给客户端。
每次服务器接收到一个 Servlet 请求时,服务器会产生一个新的线程并调用服务。service() 方法检查 HTTP 请求类型(GET、POST、PUT、DELETE 等),并在适当的时候调用 doGet、doPost、doPut,doDelete 等方法。
3、Destroy:destroy() 方法只会被调用一次,在 Servlet 生命周期结束时被调用。destroy() 方法可以让您的 Servlet 关闭数据库连接、停止后台线程、把 Cookie 列表或点击计数器写入到磁盘,并执行其他类似的清理活动。
三、实现类:
1、GenericServlet:servlet的实现类,重写了接口里的方法;
2、HttpServlet:是sevlet的实现类,同时也是GerenricServlet的子类。作为子类的httpservlet直接对servlce的doGet()和doPost()的方法进行重写就行;
3、servletConfig:代表当前Servlet在web.xml中的配置信息;
a) String getServletName() -- 获取当前Servlet在web.xml中配置的名字
b) String getInitParameter(String name) -- 获取当前Servlet指定名称的初始化参数的值
c) Enumeration getInitParameterNames() -- 获取当前Servlet所有初始化参数的名字组成的枚举
d) ServletContext getServletContext() -- 获取代表当前web应用的ServletContext对象
4、servletContext:WEB容器在启动时,它会为每个WEB应用程序都创建一个对应的ServletContext对象,它代表当前web应用。
servletContext的作用:获取全局的初始化参数,实现资源的共享,获取web资源;
如何获取servletContext?this.getServletConfig.getContext();this.getContext();
5、ServletContextListener接口:监听 ServletContext 对象的生命周期,实际上就是监听 Web 应用的生命周期。
当Servlet 容器启动或终止Web 应用时,会触发ServletContextEvent 事件,该事件由ServletContextListener 来处理。在 ServletContextListener 接口中定义了处理ServletContextEvent 事件的两个方法(contextInitialized,contextDestroyed)。
四、配置文件:
<servlet> <servlet-name>DicDataIniter</servlet-name> <servlet-class>com.init.DicDataIniter</servlet-class> <load-on-startup>2</load-on-startup> </servlet> <servlet> <servlet-name>DicDataIniter</servlet-name> <url-partten>/*</servlet-class> </servlet> |
五、执行顺序:
启动一个WEB项目的时候,WEB容器会去读取它的配置文件web.xml;
1、加载产生Servlet上下文实例,ServletContext;
这个web项目的所有部分都将共享这个上下文。 容器将<context-param>转换为键值对,并交给servletContext。
<context-param> <param-name>paramName</param-name> <param-value>paramValue</param-value> </context-param> |
2、依次加载Servlet的事件监听器,ServletContextListener并依次调用public void contextInitialized(ServletContextEvent sce)方法。加载和调用多个Listener的顺序由在web.xml中配置的依次顺序决定的。
3、依次加载Servlet的过滤器,Filter并依次调用public void init(FilterConfig filterConfig) throws ServletException;方法加载和调用多个filter的顺序由在web.xml中配置的依次顺序决定的。
4、依次加载Servlet,如果在web.xml中的servlet配置了<load-on-startup>1</load-on-startup>则会调用Servlet类中的方法public void init() 方法;
Load-on-startup元素在web应用启动的时候指定了servlet被加载的顺序,它的值必须是一个整数。如果它的值是一个负整数或是这个元素不存在,那么容器会在该servlet被调用的时候,加载这个servlet。如果值是正整数或零,容器在配置的时候就加载并初始化这个servlet,容器必须保证值小的先被加载。如果值相等,容器可以自动选择先加载谁。