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

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接口的源码:

可以看见servlet就是一个接口;接口就是规定了一些规范,使得一些具有某些共性的类都能实现这个接口,从而都遵循某些规范。
2.3 Servlet容器如何同时处理多个请求访问?

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方法将在多线程中并发的执行,有可能产生线程安全问题 。
网友评论