文档章节

Sevlet(Lifecycle)

赵-猛
 赵-猛
发布于 2017/06/04 16:29
字数 681
阅读 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>元素设置线程池中线程的数目)

 

© 著作权归作者所有

共有 人打赏支持
赵-猛
粉丝 5
博文 743
码字总数 451937
作品 0
深圳
技术主管
关于SpringMvc实践的一些体会和总结

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

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

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

雾霾下的精彩
2012/08/14
292
4
CMS中一般是如何调用模板的

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

俊颖
2013/12/16
250
2
我对servlet中的web.xml的理解

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

小梅菜鸟
2012/04/26
0
0
spring初始化和spring mvc servlet配置冲突

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

Black-Hole
2015/09/17
1K
9

没有更多内容

加载失败,请刷新页面

加载更多

tomcat 设置虚拟路径

Tomcat无法管理<Tomcat安装目录>/webapps目录以外的Web应用程序 在server.xml中配置虚拟目录 <Context path="/imgDetail" docBase="/pictureServer/img/resource"/> 配置前访问图片路径:h......

west_coast
19分钟前
0
0
数据结构

wu

盼望明天
33分钟前
2
0
Bash脚本输入参数的使用

Bash脚本输入参数的使用 Bash脚本传入的参数,在脚本中以位置的形式进行访问,即 $n 。例如,$1 为执行脚本的第一个参数,$2 为执行脚本的第二个参数。另外Bash中还提供了一些其它的便捷操作...

小陶小陶
50分钟前
2
0
多线程场景下,触发OOM的线程是否会影响其他线程的工作

public static void main(String[] args) { Thread t1 = new Thread(new Runnable() { @Override public void run() { int i = 0;......

麦馍
54分钟前
3
0
模拟Dubbo的zookeeper一致性Hash发现

接之前一篇<手写zookeeper来模拟dubbo的注册/发现>,使用一致性Hash来进行查找需要寻找的服务. Hash处理接口 public interface HashFunc { public Long hash(Object key);} 一致性Has...

算法之名
今天
16
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部