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,容器必须保证值小的先被加载。如果值相等,容器可以自动选择先加载谁。

原文地址:https://www.cnblogs.com/laoxia/p/9185014.html