文档章节

Sevlet(Lifecycle)

赵-猛
 赵-猛
发布于 2017/06/04 16:29
字数 773
阅读 9
收藏 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
博文 762
码字总数 463494
作品 0
深圳
技术主管
私信 提问
关于SpringMvc实践的一些体会和总结

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

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

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

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

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

小梅菜鸟
2012/04/26
0
0
细谈eclipse拓展网站项目集锦----my note

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

crossmix
2016/03/22
9
0
spring初始化和spring mvc servlet配置冲突

用springmvc的时候component-scan如果写在spring的配置文件里 servlet的一些bean会扫描不到,如果写到servlet配置里 spring初始化就会报错,两边都写的话会造成一个类重复初始化,为什么sev...

Black-Hole
2015/09/17
1K
9

没有更多内容

加载失败,请刷新页面

加载更多

centos7安装RabbitMQ详细过程

由于RabbitMQ是基于Erlang语言开发,所以在安装RabbitMQ之前,需要先安装Erlang 1、环境: centos 7.1 内核版本3.10.0-229.el7.x86_64 Erlang 19.0.4版本 RabbitMQ 3.6.14版本 2、在线安装E...

秋至丶枫以落
1分钟前
0
0
6个使用KeePassX保护密码的技巧

虽然安全是个深奥的主题,但是你可以遵循几个简单的日常习惯来减小攻击面。本文将解释确保密码信息安全的重要性,并给出如何充分利用KeePassX的建议。 日益互联的数字世界使安全成为一个重要...

Linux就该这么学
3分钟前
0
0
2018最佳GAN论文回顾(下)

继上一篇《2018最佳GAN论文回顾(上)》,我又继续介绍了一个对于GAN的基于样式的生成器体系结构的新论文,提出了一个新的模型来应对这种挑战。 一种用于生成式对抗网络的基于生成器体系结构...

阿里云官方博客
5分钟前
0
0
UnsatisfiedLinkError sawindbg.dll

方法:搜索sawindbg.dll,然后将文件报错的目录下

洛水
41分钟前
2
0
说说不知道的Golang中参数传递

本文由云+社区发表 导言 几乎每一个C++开发人员,都被面试过有关于函数参数是值传递还是引用传递的问题,其实不止于C++,任何一个语言中,我们都需要关心函数在参数传递时的行为。在golang中...

腾讯云加社区
42分钟前
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部