1. Servlet 生命周期:Servlet 加载--->实例化--->服务--->销毁。
  2. init():在Servlet的生命周期中,仅执行一次init()方法。它是在服务器装入Servlet时执行的,负责初始化Servlet对象。可以配置服务器,以在启动服务器或客户机首次访问Servlet时装入Servlet。无论有多少客户机访问Servlet,都不会重复执行init()。
  3. service():它是Servlet的核心,负责响应客户的请求。每当一个客户请求一个HttpServlet对象,该对象的Service()方法就要调用,而且传递给这个方法一个“请求”(ServletRequest)对象和一个“响应”(ServletResponse)对象作为参数。在HttpServlet中已存在Service()方法。默认的服务功能是调用与HTTP请求的方法相应的do功能。
  4. destroy(): 仅执行一次,在服务器端停止且卸载Servlet时执行该方法。当Servlet对象退出生命周期时,负责释放占用的资源。一个Servlet在运行service()方法时可能会产生其他的线程,因此需要确认在调用destroy()方法时,这些线程已经终止或完成。

Tomcat 与 Servlet 是如何工作的:

步骤:

  1. Web Client 向Servlet容器(Tomcat)发出Http请求
  2. Servlet容器接收Web Client的请求
  3. Servlet容器创建一个HttpRequest对象,将Web Client请求的信息封装到这个对象中。
  4. Servlet容器创建一个HttpResponse对象
  5. Servlet容器调用HttpServlet对象的service方法,把HttpRequest对象与HttpResponse对象作为参数传给 HttpServlet 对象。
  6. HttpServlet调用HttpRequest对象的有关方法,获取Http请求信息。
  7. HttpServlet调用HttpResponse对象的有关方法,生成响应数据。
  8. Servlet容器把HttpServlet的响应结果传给Web Client。

Servlet工作原理:

1、首先简单解释一下Servlet接收和响应客户请求的过程,首先客户发送一个请求,Servlet是调用service()方法对请求进行响应的,通过源代码可见,service()方法中对请求的方式进行了匹配,选择调用doGet,doPost等这些方法,然后再进入对应的方法中调用逻辑层的方法,实现对客户的响应。在Servlet接口和GenericServlet中是没有doGet()、doPost()等等这些方法的,HttpServlet中定义了这些方法,但是都是返回error信息,所以,我们每次定义一个Servlet的时候,都必须实现doGet或doPost等这些方法。

2、每一个自定义的Servlet都必须实现Servlet的接口,Servlet接口中定义了五个方法,其中比较重要的三个方法涉及到Servlet的生命周期,分别是上文提到的init(),service(),destroy()方法。GenericServlet是一个通用的,不特定于任何协议的Servlet,它实现了Servlet接口。而HttpServlet继承于GenericServlet,因此HttpServlet也实现了Servlet接口。所以我们定义Servlet的时候只需要继承HttpServlet即可。

3、Servlet接口和GenericServlet是不特定于任何协议的,而HttpServlet是特定于HTTP协议的类,所以HttpServlet中实现了service()方法,并将请求ServletRequest、ServletResponse 强转为HttpRequest 和 HttpResponse。

创建Servlet对象的时机:

  1. Servlet容器启动时:读取web.xml配置文件中的信息,构造指定的Servlet对象,创建ServletConfig对象,同时将ServletConfig对象作为参数来调用Servlet对象的init方法。
  2. 在Servlet容器启动后:客户首次向Servlet发出请求,Servlet容器会判断内存中是否存在指定的Servlet对象,如果没有则创建它,然后根据客户的请求创建HttpRequest、HttpResponse对象,从而调用Servlet 对象的service方法。
<servlet><servlet-name>Init</servlet-name><servlet-class>org.xl.servlet.InitServlet</servlet-class><load-on-startup>1</load-on-startup>
</servlet>

关于项目开发部署可以看下这个Java小型项目开发视频教程

servlet工作原理_Servlet 生命周期、工作原理相关推荐

  1. JavaWeb第一讲 Servlet的工作原理及生命周期

    Servlet的工作原理及生命周期 (一)Tomcat容器模型 Servlet的运行离不开Tomcat,那我们先弄清楚Tomcat的容器模型. 由上图可以看出,在Tomcat下有一个Container ...

  2. 2011年9月19日 面试重点:asp.net运行原理和生命周期

    面试重点:asp.net运行原理和生命周期 1.ispostback回调机制 isPostBack=false !IsPostBack==ture 当前页面是第一次加载 IsPostBack 由于用户 ...

  3. 【Spring系列】- Bean生命周期底层原理

    Bean生命周期底层原理

  4. 深刻理解Servlet运行机制和生命周期

    servlet 运行在servlet 容器中,其生命周期由容器来管理.servlet 的生命周期通过 javax.servlet.Servlet接口中的init(),servce(),和destory ...

  5. Servlet系列学习笔记1 --- Servlet工作原理和生命周期

    目录 一.Servlet API概述 二.Servlet工作原理 三.Servlet接口 四.Servlet的生命周期 五.ServletRequest 六.ServletResponse Servl ...

  6. PHP的工作原理和生命周期

    表层分析 php是以请求/响应为周期运行服务端应用程序,当请求进入应用程序,流程如下: php的每一个请求都会重复以上的交互. 底层分析 php的运行模式有两种:web模式和cli模式.无论是哪种公众 ...

  7. Kubernetes各组件工作原理 Pod 生命周期

    一.kubernets 组件工作原理 - 概述: 在集群管理方面,kubernetes 将集群中的机器分为 Master(主)节点和一些 node(工作)节点.在 Master 节点上运行这一些集群管 ...

  8. oauth2.0授权协议中刷新令牌refresh token的工作原理及生命周期分析

    在学习oauth2.0协议的时候,对于刷新令牌refresh token感觉很困惑.主要是为啥需要刷新令牌,以及刷新令牌是如何工作的,技术细节是啥?比如通过refresh token可以让access ...

  9. servlet运行原理和生命周期

    servlet的生命周期分为3个阶段: 1初始化阶段:调用init方法 2响应客户请求阶段:调用service()方法 3终止阶段:调用destroy方法 servlet初始化阶段: 在下列时刻ser ...

最新文章

  1. ansible自己总结(playbook)
  2. 批量修改多目录下相同文件名的文件内容
  3. 电气:通过转移因子算法求解潮流
  4. 有序链表插入 java_Java 实现有序链表
  5. C++类的数组元素查找最大值问题
  6. Exynos4412 所用内存 —— DDR2
  7. BI报表分析和数据可视化,推荐这三个开源工具!
  8. 【Windows】DACL SACL
  9. Android 自定义Dialog 去除阴影
  10. 求每个月最后一天mysql函数_计算指定年月的最后一天的自定义MYSQL函数_MySQL
  11. php期末考试分数分布情况,考试成绩分析
  12. 土建中级工程师考试用书电子版_真的!2020年湖南土建中级职称考试用书是没有指定的教材?...
  13. 个人笔记-Minecraft阿里云服务器搭建
  14. bada学习之HelloWorld篇
  15. 前端面试必备知识点总结(持续更新)
  16. LCD1602液晶显示模块
  17. 【MATLAB】图像二值化(imbinarize函数)
  18. 机器学习在制冷与空调方面的应用
  19. “中国第一程序员” 求伯君的传奇经历
  20. 英国essay写作思路

热门文章

  1. linux svn missingargument -m,缺少參數-m在windows powershell中使用svn。
  2. PHP设计模式之装饰模式(Decorator)
  3. android图片gif动画效果,android中类似于gif 实现图片的动画效果
  4. image控件显示图片_Unity之Image amp; Raw Image
  5. java bean 绑定,在 Java 应用程序中绑定 Bean 和数据
  6. undertale人物_【undertale】传说之下精美人物图包 (Frisk篇)
  7. run cuda samples ubuntu_NVIDIA cuDNN v8 deb方法安装教程(Linux/Ubuntu)
  8. UART接口算法移植加密芯片的调试技巧——通讯调试
  9. 技术网站 --websystique.com
  10. Redis、Redis+sentinel安装(Ubuntu 14.04下Redis安装及简单测试)