zoukankan      html  css  js  c++  java
  • 2018-03-15面试之Servlet的执行过程

    以下内容均参考:http://blog.csdn.net/lcore/article/details/8967528

    一、请描述一下Servlet的执行过程。

      在Servlet框架中所有的Servlet类都必须实现Servlet这个借口,其中定义了三个方法。分别为:

      1.init方法:负责初始化Servlet对象。

      2.service:用于响应客户端的请求

      3.destroy:销毁Servlet对象,释放占用的资源。

      Servlet一共分为4个阶段分别为:

      1.加载阶段:加载并实例化(创建Servlet实例)

      2.初始化阶段:调用init()方法

      3.响应客户请求阶段:调用service()方法、doGet、doPost

      4.终止阶段:调用destroy()方法

      

      加载阶段

      Tomcat从文件系统,远程文件系统或其它网络服务中通过加载器来加载Servlet,并调用Servlet的默认构造方法(不带参数构造器)

      初始化阶段init()方法

      当Servlet容器启动时:读取web.xml配置文件中的信息,构造制定的servlet对象,根据配置文件的信息创建ServletConfig对象,并将其作为参数传递给init()方法进行调用。

      Tomcat启动后:用户首次向某个Servlet对象发送请求,Tomcat会判断内存中是否存在指定的servlet对象,如果没有则会取创建它,然后创建HttpRequest,HttpResponse对象,调用service方法处理用户的请求。

      init方法是在实例化Servlet之后调用的,其参数ServletConfig是在Servlet初始化阶段Tomcat根据web.xml配置信息,和操作系统的相关环境生成并传递给init方法的。  

      响应客户请求阶段service方法

      service()方法是在客户端第一次访问servlet时执行的,其实init方法同样也是在有客户访问servlet的时候才被调用。不过需要特别注意的是讨论init方法在session级别上时,当存在不同的会话访问相同的servlet时,Tomcat会开启一个线程处理这个新的会话,但是此时Tomcat容器不会实例化这个servlet对象,也就是有多个线程在共享servlet实例。换句话说Servlet对象在Servlet容器中是以单例的形式存在的!然而查看其源代码可以发现,Servlet在多线程并未使用同步机制,因此,在并发编程下Servlet是线程不安全的。

      基于HTTP通信协议的HttpServlet在进行客户端响应处理的时候根据客户请求,响应类别的不同分别调用不同的方法,其中最常用的就是doGet、doPost方法,这两个方法是我们在编写Servlet中的主要逻辑处理阶段。

      终止阶段:destroy()方法的调用

      servlet对象在Tomcat服务器Stop、Web项目reload、tomcat容器所在的服务器shutdown时会执行destroy()方法。

  • 相关阅读:
    服务器搭建Git
    BGP协议详解
    以太坊
    燃 * & *
    UML类图解析
    day8.文件操作
    python面试题汇总
    day5.字典
    day5.类型汇总
    day3,4总结程序
  • 原文地址:https://www.cnblogs.com/kongnengjing/p/8576715.html
Copyright © 2011-2022 走看看