文档章节

Sevlet(Lifecycle)

赵-猛
 赵-猛
发布于 2017/06/04 16:29
字数 773
阅读 7
收藏 0

Servlet工作流程

1.客户端browser组装客户端的请求逻辑,构造向服务端发送的请求内容request

http request: method url version + header kvs + 空行 + body


2.由browser向服务器端发送请求request

http request: method url version + header kvs + 空行 + body


3.服务器端由Tomcat服务器提供的Servlet容器解析接收到的请求

parse parameters, build session, build application ... 

 

4.通过Web应用程序的配置文件web.xml,解析到对应执行的JSP/Servlet

对于jsp,先由jsp引擎编译成java servlet文本,继而由java编译器编译成java class字节码文件,然后加载/链接(验证/准备/解析)/类初始化/执行

对于servlet,由于已经编译成了java class字节码文件,直接加载/链接(验证/准备/解析)/类初始化/执行

    sevlet的执行(生命周期,其中124在整个生命周期只会执行一次):

1.实例化该servlet, 一个servlet容器只有该类的一个实例
2.初始化该实例,容器负责调用该servlet实例的 init() 方法,在处理用户请求之前,来做一些额外的初始化工作
3.处理请求,当Servlet容器接收到一个Servlet请求时,便运行与之对应的Servlet实例的 service()方法
4.特定情况下(如jsp或者servlet发生了更新)销毁该servlet实例,servlet容器调用该实例的destroy()方法

   servlet相关组件

listener:application/session/request事件响应程序
filter:拦截并转换请求或者响应
sevlet:依据请求的url, 加载和执行对应的处理代码
(interceptor是struts和spring中的概念,不配置在web.xml中)


    
5.Servlet完成客户端发送的请求逻辑,并完成向客户端发送的响应内容response

http response: version code message + header kvs + 空行 + body

  
6.由Tomcat服务器提供的Servlet容器向客户端浏览器进行响应response。    

http response: version code message + header kvs + 空行 + body


Servlet注意事项

Servlet规范定义,在默认情况下(Servlet不是在分布式的环境中部署),Servlet容器对声明的每一个Servlet,只创建一个实例
Servlet容器维护了一个线程池来服务多个客户请求同时访问同一个Servlet
Servlet容器使用一个调度者线程(Dispatcher Thread)来管理工作者线程(Worker Thread)。
当容器接收到一个访问Servlet的请求,调度者线程从线程池中选取一个工作者线程,将请求传递给该线程,然后由这个线程执行Servlet的service()方法 
(在Tomcat,可以在server.xml文件中通过<Connnector>元素设置线程池中线程的数目)
(在Jetty中,可以在/etc/jetty.xml配置
<Set name="ThreadPool">  
  <New class="org.mortbay.thread.QueuedThreadPool">  
    <Set name="minThreads">10</Set>  
    <Set name="maxThreads">200</Set>  
    <Set name="lowThreads">20</Set>  
    <Set name="SpawnOrShrinkAt">2</Set>  
  </New> 
</Set> )

 

© 著作权归作者所有

共有 人打赏支持
上一篇: Servlet(Filter)
下一篇: Akka(Framework)
赵-猛
粉丝 6
博文 760
码字总数 462089
作品 0
深圳
技术主管
私信 提问
关于SpringMvc实践的一些体会和总结

一直以来都在用java的springmvc,没有深入去探究关于spring以及mvc的一些内在的工作过程,今天利用休息时间,仔细阅读了一下我们的源码,并结合搜索引擎,明白了几个之前解决了问题,还没理解原理的...

xiaobo137
2016/10/29
49
0
velocity 模板 文件找不到

结构如下: web.xml 配置如下 : 现在用sevlet 的方式 访问 blacklist.vm 出现找不到 这个文件 错误

雾霾下的精彩
2012/08/14
292
4
我对servlet中的web.xml的理解

今天看到Servlet的web.xml配置,作一下总结,也加深一下印象: xml文件是的字符是区分大小写的,还有在一起工作的的不能够调换位置. <servlet> <sevlet-name>:指是你为你的servlet命一个名,就个名...

小梅菜鸟
2012/04/26
0
0
CMS中一般是如何调用模板的

我使用的是Sevlet+Spring+HiberNate+FreeMaker+Lucence 的架构

俊颖
2013/12/16
250
2
细谈eclipse拓展网站项目集锦----my note

使用eclipse有一些时间啦,也试着开发一些网站project,不是很熟,也用zend studio,后放弃啦。 我的一些经验 1, 使用eclipse开发jsp网站项目,入门篇 let's start 启动Eclipse,新建一个项...

crossmix
2016/03/22
9
0

没有更多内容

加载失败,请刷新页面

加载更多

CentOS 安装PHP5和PHP7

安装PHP5 下载解压二进制包 [root@test-a src]# cd /usr/local/src/[root@test-a src]# wget http://cn2.php.net/distributions/php-5.6.32.tar.bz2[root@test-a src]# tar jxvf php-5.6......

野雪球
今天
3
0
windows上类似dnsmasq的软件Dual DHCP DNS Server

官网地址:http://dhcp-dns-server.sourceforge.net/官网定向的下载地址:https://sourceforge.net/projects/dhcp-dns-server/files/ 设置参考地址:http://blog.51cto.com/zhukeqiang/18264......

xueyuse0012
今天
3
0
LinkedHashMap源码解析

前言 HashMap中的元素时无序的,也就是说遍历HashMap的时候,顺序和放入的顺序是不一样的。 如果需要有序的Map,就可以采用LinkedHashMap. LinkedHashMap通过维护一个包含所有元素的双向链表,...

grace_233
今天
3
0
初识flask

文档 0.10.1版本 http://www.pythondoc.com/flask/index.html 1.0.2版本 https://dormousehole.readthedocs.io/en/latest/ 安装flask $ pip3 install flaskCollecting flask Downloading......

yimingkeji
昨天
5
0
Akka系统《sixteen》译

Actor是一个封装状态(state)和行为(behavior)的对象,它们只通过交换消息通信(放入收件人邮箱的邮件)。从某种意义上说,Actor是最严格的面向对象编程形式,但它更适合将他们视为人:在与Act...

woshixin
昨天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部