Servlet的生命周期 与CGI的区别

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

对于Servlet,服务器只创建每个servlet的单一实例,每个用户请求都会引发新的线程-----将用户请求将会给相应的doGet/doPost进行处理。那么,servlet是如何进行创建和销毁的?

当首次创建servlet时,它的init方法会得到调用,在这之前首先是服务器加载相应的servlet。init是放置一次性代码 的地方,在这之后,针对每个用户请求,都会创建一个线程,该线程调用前面创建的实例的service方法。多个并发请求一般会导致多个线程的同时调用 service(尽管可以实现特殊的接口,如 SingleThreadModel,规定任何时间只允许单个线程运行)。在调用service方法后,根据service方法收到的HTTP请求的类型,调用doGet,doPost,若其他doXxx方法,最后,如果服务决定缷载某个service,它会首先调用servlet的destroy方法。

service方法 

服务器每次接收到对servlet的请求,都会产生一个新的线程,调用service方法,service方法检查HTTP请求的类型(GET,POST,PUT,DELETE等)并相应地调用doGet,doPost,doPut,doDelete等方法,GET请求起因于正常的URL请求,或没有指定method="post"的表单请求。POST请求起因于特别将POST列为method的HTML表单,其他HTTP请求都由定制客户生成。

如果我们需要在servlet中等同地处理POST和GET请求,我们有可能会不去实现doPost doGet方法,而是直接配覆写service方法。但是这样做不是一个好的思想,我们应该在doPost方法中调用doGet或相反。

public void doPost(HttpServletRequest request,HttpServletResponse response)throws ServletException,IOException{

  

   doGet(request,response);

}

public void doGet()throws ServletException,IOException{   // 相应的业务处理方法代码 

}

这样做有几处优点:首先,我们还可以添加doPut,doTrace等方法,支持HTTP请求方法;其次,可以通过添加getLastModified方法加入对修改日期的支持。


destroy方法

服务器可以会决定移除之前载入的servlet实例,这时候它会调用servlet的destroy方法,从而使得servlet有机会关闭数据库连接、停止后台运行的线程、将cookie列表和点击计数写入到磁盘,并执行其他清理活动。在这里,要注意的是 web服务器可能会崩溃;所以我们不应该将destory机制作为向磁盘上保存状态的惟一机制。如果服务器执行诸如点击计数,或对cookie值(表示特殊的访问 )的列表进行累加等活动,应该主动地定期将数据写到磁盘上。


Servlet 与CGI的区别:

与CGI的区别在于servlet处于服务器进程中,它通过多线程方式运行其service方法,一个实例可以服务于多个请求,并且其实例一般不会销毁,而CGI对每个请求都产生新的进程,服务完成后就销毁,所以效率上低于servlet。

转载于:https://my.oschina.net/u/938966/blog/107654

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/404086.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

自动化打包资源混淆集成python实践----资源混淆

前面自动化打包资源混淆集成python实践----打包一文讲述了四种打包方案,以及美团打包方案、apk注释添加渠道号方案的实现。这里讲集成资源混淆。 1、资源混淆带来的好处: 1)对资源文件起一定的保护作用,使其不能知其名不知意&…

[ECMAScript] 说说你对Babel的了解?

[ECMAScript] 说说你对Babel的了解? 1.将es6/7/8/9/10转换为es5 2.将jsx转换为js 个人简介 我是歌谣,欢迎和大家一起交流前后端知识。放弃很容易, 但坚持一定很酷。欢迎大家一起讨论 主目录 与歌谣一起通关前端面试题

[win7] 去除将窗口拖到屏幕边缘时“自动最大化”

在win7中将一个窗口拖到屏幕的边缘,这个窗口将会自动以最大化方式显示,这对于那些需要同时查看两个窗口中内容的用户来说就是个恶梦!因为屏幕大小是有限的,为了同时查看两个窗口中的内容,就要将这两个窗口以合适的方式…

优秀技术人才需具备能力

1、工作经验。工作经验是通过对具体工作和与工作相关的知识与问题进行不断反思,总结其内在规律,并不断的进行创新和积累,形成知识和具体能力的过程。通过工作经验我们可以知道他曾经具体做过什么事情,做成功了什么事情。 一个应聘…

[ECMAScript] 说说你对async/await的理解?

[ECMAScript] 说说你对async/await的理解? async函数返回的是一个promise对象,它可以用then方法添加回调函数。 当函数执行的时候一旦遇到await就会阻塞后面的代码,等待promise的resolve() 作为await的返回结果。 个人简介 我是歌谣&#…

python中实现定时器Timer

实现定时器最简单的办法是就是循环中间嵌time.sleep(seconds), 这里我就不赘述了 # encoding: UTF-8 import threading #Timer(定时器)是Thread的派生类, #用于在指定时间后调用一个方法。 def func():print hello timer! timer …

对当前目录及子目录下的所有源码文件及Makefile打包

自己认为一个比较有用的bash脚本,方便开发人员将修改过的源文件及Makefile文件打包并带到其他地方去使用 #!/bin/shif test $# -lt 1; thendestFilebasename $PWD elsedestFile$1 fifind . -name "*.h" -o -name "*.hh" -o -name "*.hpp&q…

nib和xib的区别

nib 是NeXT Interface Builder的缩写。xib 是 xml nib 文件&#xff0c;于2007年 Leopard (and Xcode 3.0) 版本中更新。 以源码方式打开查看&#xff1a;< ?xml version"1.0" encoding"UTF-8"?>78410F2521…… 相同点&#xff1a;NIB 和 XIB 都是…

[ECMAScript] 你喜欢es6的哪些特性?

[ECMAScript] 你喜欢es6的哪些特性&#xff1f; 展开操作符 解构赋值 字符串插值 方法属性 find findIndex Includes Promise ESM 个人简介 我是歌谣&#xff0c;欢迎和大家一起交流前后端知识。放弃很容易&#xff0c; 但坚持一定很酷。欢迎大家一起讨论 主目录 与歌谣一…

iOS 应用程序的国际化

什么事应用程序的国际化? 就是不同国家之间使用的语言不一样,中国人的应用程序显示的汉字,美国人的应用程序是英文. 接下来我们就来实现应用程序的国际化: 1.首先我们新建一个工程,命名为:Internationalization-Demo; 2.添加语言(配置语言):(英文和中文) 3.目前&#xff0c;应…

关于sizeof在不同平台下的值

sizeof在不同平台的值并不一样&#xff0c;大家注意下: /*Ubuntu12_x64环境下:sizeof()返回值类型是long unsigned intsizeof(long) 8sizeof(void) 1sizeof(void*) 8Win7_x64, VC2010环境下&#xff08;目标机器: 32位&#xff09;:sizeof(long) 4sizeof(void) 0sizeof(vo…

Eclipse3.7 Indigo 字体设置为Courier New

Eclipse版本&#xff1a;Indigo Service Release 2 打开c:/windows/fonts()确认该字体存是否存在。 1.C:/windows/fonts/Courier New 右键 ->显示 (window7 C:\Windows\Fonts) window7系统到这一步 问题可能已解决了 重新打开Eclipse Window->preference-->Colors a…

[ECMAScript] 说说你对class的理解

[ECMAScript] 说说你对class的理解 语法糖&#xff0c;本质上还是function 个人简介 我是歌谣&#xff0c;欢迎和大家一起交流前后端知识。放弃很容易&#xff0c; 但坚持一定很酷。欢迎大家一起讨论 主目录 与歌谣一起通关前端面试题

数据库包装成类

<?phpclass DBDA {public $host "localhost"; //服务器地址public $uid "root"; //数据库的用户名public $pwd "123"; //数据库的密码//执行SQL语句&#xff0c;返回相应结果的函数//$sql是要执行的SQL语句//$type是SQL语句的类型&#x…

获得H.264视频分辨率的方法

From: http://www.cnblogs.com/likwo/p/3531241.html 在使用ffmpeg解码播放TS流的时候&#xff08;例如之前写过的UDP组播流&#xff09;&#xff0c;在连接时往往需要耗费大量时间。经过debug发现是av_find_stream_info&#xff08;已抛弃&#xff0c;现在使用的是avformat_fi…

[ECMAScript] es6对函数做了哪些优化?

[ECMAScript] es6对函数做了哪些优化&#xff1f; 1.函数参数可以设置默认值function getUserCompanyName(namedefaultUser,companydefaultCompany){ return namecompany } 2.属性简写,属性的key和value相同可以进行简写 3.rest参数(剩余参数) 4.箭头函数 ()>{} 个人简介 …

C#命名空间与类名的冲突

今晚写一个聊天客户端的程序&#xff0c;花了很长时间设计界面&#xff0c;然后在我定义P2PClient类的时候用到了类TcpClient,这是一个有关收发数据的类&#xff0c;但是我定义项目名的时候用了TcpClient,这样在我使用类TcpClient时&#xff0c;vs就总是提示错误&#xff0c;后…

Web服务器性能估算

1 【引题】 但凡写过技术方案的都知道&#xff0c;在技术方案最终落实到工程实施部署时&#xff0c;必须编制出当前解决方案需要部署的IT设备及环境&#xff0c;包括&#xff1a;需要的网络环境、端口、带宽、组网方式、网络安全保障措施&#xff1b;需配置的服务器设备性能…

用实例分析H264 RTP payload

From: http://blog.csdn.net/zblue78/article/details/5948538 H264的RTP中有三种不同的基本负载&#xff08;Single NAL,Non-interleaved,Interleaved) 应用程序可以使用第一个字节来识别。 在SDP中也说明了本次会话的属性 SDP 参数 下面描述了如何在 SDP 中表示一个 H.264 流…

[ECMAScript] module、export、import分别有什么作用?

[ECMAScript] module、export、import分别有什么作用&#xff1f; import导入模块功能。import导入的只是一个只读引用&#xff0c;等到脚本执行时根据引用才到模块里去取值。这也就是import可以按需加载的原因。 export 指定输出的代码 module 要在js中使用ES6的import。<…