当前位置: 首页 > news >正文

Servlet 生命周期、工作原理

  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()方法时,这些线程已经终止或完成。

 

Servlet工作原理:

1、首先简单解释一下Servlet接收和响应客户请求的过程,首先客户发送一个请求,Servlet是调用service()方法对请求进行响应的,通过源代码可见,service()方法中对请求的方式进行了匹配,选择调用doGet,doPost等这些方法,然后再进入对应的方法中调用逻辑层的方法,实现对客户的响应。

2、每一个自定义的Servlet都必须实现Servlet的接口,Servlet接口中定义了五个方法,其中比较重要的三个方法涉及到Servlet的生命周期,分别是上文提到的init(),service(),destroy()方法。

 

转载于:https://www.cnblogs.com/zhaoleigege/p/5809676.html

相关文章:

  • POJ 2375
  • 关于SQL镜像配置报错
  • 共享库
  • Oracle 函数返回表实例2种写法实例
  • 重走java--Step 2
  • 高并发系统之队列术
  • servlet 开发出错原因分析
  • java--集合框架
  • 粗浅看Struts2和Hibernate框架
  • Eclipse将引用了第三方jar包的Java项目打包成jar文件的两种方法
  • jquery内容选择器(匹配包含指定选择器的元素)
  • Unity3D Shader入门指南(转)
  • 文件上传大小限制问题
  • 百度地图路线检索(3)
  • 《徐徐道来话Java》(1):泛型的基本概念
  • [ 一起学React系列 -- 8 ] React中的文件上传
  • 345-反转字符串中的元音字母
  • 77. Combinations
  • Cookie 在前端中的实践
  • CSS魔法堂:Absolute Positioning就这个样
  • egg(89)--egg之redis的发布和订阅
  • electron原来这么简单----打包你的react、VUE桌面应用程序
  • Git的一些常用操作
  • IOS评论框不贴底(ios12新bug)
  • JavaScript设计模式之工厂模式
  • Mac转Windows的拯救指南
  • mysql外键的使用
  • puppeteer stop redirect 的正确姿势及 net::ERR_FAILED 的解决
  • 代理模式
  • 使用 Node.js 的 nodemailer 模块发送邮件(支持 QQ、163 等、支持附件)
  • 【干货分享】dos命令大全
  • 通过调用文摘列表API获取文摘
  • # include “ “ 和 # include < >两者的区别
  • #【QT 5 调试软件后,发布相关:软件生成exe文件 + 文件打包】
  • $().each和$.each的区别
  • (007)XHTML文档之标题——h1~h6
  • (Git) gitignore基础使用
  • (八)c52学习之旅-中断实验
  • (分布式缓存)Redis持久化
  • (译) 函数式 JS #1:简介
  • (转)linux自定义开机启动服务和chkconfig使用方法
  • (转)PlayerPrefs在Windows下存到哪里去了?
  • .gitignore文件---让git自动忽略指定文件
  • .NET / MSBuild 扩展编译时什么时候用 BeforeTargets / AfterTargets 什么时候用 DependsOnTargets?
  • .net 使用$.ajax实现从前台调用后台方法(包含静态方法和非静态方法调用)
  • .NET/ASP.NETMVC 深入剖析 Model元数据、HtmlHelper、自定义模板、模板的装饰者模式(二)...
  • .NET/C# 利用 Walterlv.WeakEvents 高性能地中转一个自定义的弱事件(可让任意 CLR 事件成为弱事件)
  • .NET高级面试指南专题十一【 设计模式介绍,为什么要用设计模式】
  • .net解析传过来的xml_DOM4J解析XML文件
  • .NET开发者必备的11款免费工具
  • @RequestParam,@RequestBody和@PathVariable 区别
  • [ vulhub漏洞复现篇 ] AppWeb认证绕过漏洞(CVE-2018-8715)
  • []C/C++读取串口接收到的数据程序
  • [C puzzle book] types
  • [C++][基础]1_变量、常量和基本类型