美文网首页
Java web 入门——1.Tomcat/Servlet之间的

Java web 入门——1.Tomcat/Servlet之间的

作者: 卓三阳 | 来源:发表于2019-11-24 12:32 被阅读0次

1.web服务器处理http请求

客户端直接打交道是“容器”,比如常用的tomcat。客户端的请求直接打到tomcat,它监听端口,请求过来后,根据url等信息,确定要将请求交给哪个servlet去处理,然后调用那个servlet的service方法,service方法返回一个response对象,tomcat再把这个response返回给客户端。

Tomcat 容器
Tomcat 容器.png

Tomcat容器(container)等级分为4个等级,由外到内,分别为engine、host、servlet容器、context容器。
servlet容器管理context容器,一个context容器对应一个web工程。


2.Servlet

2.1 什么是Servlet

Servlet是在服务器上运行的小程序。一个Servlet就是一个Java类,并且可以通过“请求-响应”编程模型来访问的这个驻留在服务器内存里的Servlet程序。一般由web容器(例如tomcat)来管理servlet的生命周期

2.2 Servlet生命周期:

1.调用 init() 方法初始化
2.调用 service() 方法来处理客户端的请求
3.调用 destroy() 方法释放资源,标记自身为可回收
4.被垃圾回收器回收

在idea中打开servlet接口的源码:


image

可以看见servlet就是一个接口;接口就是规定了一些规范,使得一些具有某些共性的类都能实现这个接口,从而都遵循某些规范。

2.3 Servlet容器如何同时处理多个请求访问?
image

Servlet容器默认是采用单实例多线程的方式处理多个请求

1.当web服务器启动的时候(或客户端发送请求到服务器时),Servlet就被Servlet容器加载并实例化(只实例化一次);
2.容器初始化Servlet主要就是读取配置文件(例如tomcat,可以通过servlet.xml的设置线程池中线程数目,初始化线程池通过web.xml初始化每个参数值等等);
3.当请求到达时,Servlet容器通过调度线程(Dispatchaer Thread) 调度线程池中等待执行的线程(Worker Thread)给请求者;
4.线程执行Servlet的service方法;
5.请求结束,线程空闲,等待被调用。

优点:

1.Servlet单实例,减少了产生servlet的开销;
2.通过线程池来响应多个请求,提高了请求的响应时间。

缺点:

1.如果是同一个Servlet响应多个请求,那么Servlet的service方法将在多线程中并发的执行,有可能产生线程安全问题 。

相关文章

网友评论

      本文标题:Java web 入门——1.Tomcat/Servlet之间的

      本文链接:https://www.haomeiwen.com/subject/qujkwctx.html