• Servlet启动运行顺序


      1. 1、web项目执行属性

        1. 启动web项目后,web容器首先回去找web.xml文件,读取这个文件。

        2. 容器会创建一个 ServletContext ( servlet 上下文),整个 web 项目的所有部分都将共享这个上下文。

        3. 容器将 转换为键值对,并交给 servletContext(),<context-pram>使用上下文初始化参数

        4. 容器创建 中的类实例,创建监听器。

        5. 容器加载filter,创建过滤器, 要注意对应的filter-mapping一定要放在filter的后面。依赖servlet。Servlet过滤器和Servlet十分相似,但具有拦截浏览器请求的功能。创建过滤器链,满足业务需求。

        6. 拦截器。

        7. 容器加载servlet,加载顺序按照 Load-on-startup 来执行,<load-on-startup>1</load-on-startup><servlet>

    因此它的完整加载顺序就是 :ServletContext -> context-param -> listener-> filter -> servlet

    不过有一点需要注意的是: spring容器的加载要在servlet之后,因此在有些过滤器当中需要提前用到spring bean的时候,就需要改成 Listener 的方式

    org.springframework.web.context.ContextLoaderListener

    ContextLoaderListener的作用就是启动Web容器时,自动装配ApplicationContext的配置信息。因为它实现了ServletContextListener这个接口,在web.xml配置这个监听器,启动容器时,就会默认执行它实现的方法。

    容器监听器ServletContextListener 是 ServletContext 的监听者,如果 ServletContext 发生变化,如服务器启动时 ServletContext 被创建,服务器关闭时 ServletContext 将要被销毁。

    要求每次访问action都无需加载新的xml文件,利用框架的监听器实现只在服务器启动时加载一次xml配置,用于提高性能。

    2.servlet的运行过程:

    1.浏览器发出请求,被web容器获取到 
    2.Web服务器首先检查是否已经装载并创建了该Servlet的实例对象。如果是,则直接执行第④步,否则,执行第②步。 
    3.装载并创建该Servlet的一个实例对象,调用Servlet实例对象的init()方法。 
    4.创建一个用于封装HTTP请求消息的HttpServletRequest对象和一个代表HTTP响应消息的HttpServletResponse对象,然后调用Servlet的service()方法并将请求和响应对象作为参数传递进去。 
    5.WEB应用程序被停止或重新启动之前,Servlet引擎将卸载Servlet,并在卸载之前调用Servlet的destroy()方法。

    一般情况,servlet是在被请求的时候才去创建的,但是当添加时,就会在初始化的时候创建它,利用这点特性,我们可以初始化创建数据库等等。

    使用servlet时,一般都是继承httpServlet,然后分别实现doGet或者doPost方法,但是在这里面要注意的是,这servlet并不是线程安全的,多线程单实例执行的,当并发访问同一个资源的话,就有可能引发线程安全问题,

    servlet的config对象:

    ServletConfig是Servlet的一个配置对象. 每一个servlet都有一个对应的ServletCofnig。
    ServletConfig是由web服务器创建的,它通过Servlet的init方法传递到了Sevlet中.

    1.可以获取Servlet的名称   getServletName();---web.xml文件中的<servlet-name>的值.
    2.可以获取初始化参数,获取application内容。
        getInitParameter(String name);   根据name获取value,(等于this.getServletConfig().getInitParameter(name))
        getIniteParameterNames();  获取所有的name值,它返回的是一个Enumeration.

    3.可以获取ServletContext上下文对象,即application对象。

        getServletContext().getInitParameter("param0") = this.getServletConfig().getServletContext().

    4.在Servlet中要获取ServletConfig对象,只需要直接调用getServletConfig()就可以。(前三个是ServletConfig方法,后一个是Servlet方法包含,init.service,destory)

    5.继承关系

    HttpServlet extends GenericServlet,

    GenericServlet implements Servlet, ServletConfig, Serializable

    Servlet的生命周期可以分为四个阶段,即装载类及创建实例阶段、初始化阶段、服务阶段和实例销毁阶段。

      1、初始化阶段  调用init()方法。(单线程)

      2、响应客户请求阶段。调用service()方法,由service()方法根据提交的方式选择执行doGet()或者doPost()方法(多线程)

      3、终止阶段  调用destroy()方法

    3.异常情况

    一旦ServletException抛出,Web服务器不会将客户端请求交给该Servlet实例来处理,而是报告初始化失败异常信息给客户端,该Servlet实例将被从内存中销毁。

    如果继承了HttpServlet没有实现任何的doXxx方法或者重新service方法。则会抛出一个异常

     
  • 相关阅读:
    eclipse default handler IHandler interface “the chosen operation is not enabled”
    sublime text 3-right click context menu
    SoapUI Pro Project Solution Collection-Custom project and setup
    SoapUI Pro Project Solution Collection-XML assert
    SoapUI Pro Project Solution Collection-change the JDBC Request behavior
    SoapUI Pro Project Solution Collection-Test Step Object
    SoapUI Pro Project Solution Collection-access the soapui object
    SoapUI Pro Project Solution Collection –Easy develop Groovy Script to improve SoapUI ability
    Eclipse 个人使用配置
    Selenium 致命杀手(有关自动化的通病)
  • 原文地址:https://www.cnblogs.com/shuchen007/p/9246189.html
Copyright © 2020-2023  润新知