标签:
Web容器(Container)是Servlet/JSP唯一认得的 HTTP 服务器
以Tomcat为例,容器的角色位置可以用下图来表示:
Web容器(Container)是Servlet/JSP唯一认得的 HTTP 服务器
以Tomcat为例,容器的角色位置可以用下图来表示:
类似于 JVM 介于 Java 程序与实体操作系统之间,Web容器是介于实体 HTTP 服务器与 Servlet 之间,也正如编写 Java 程序必须了解 JVM 与应用程序之间如何互动,编写 Servlet/JSP 也必须知道 Web 容器如何与 Servlet/JSP 互动,如何管理 Servlet 等事实(JSP 最后也是转译、编译、加载为 Servlet,在容器的世界中,真正负责请求、响应的是 Servlet)。
一个请求/响应的的基本例子:
- (1) 客户端(大部分情况下是浏览器)对 Web 服务器发出 HTTP 请求。
- (2) HTTP 服务器收到 HTTP 请求,将请求转由 Web 容器处理,Web容器会剖析 HTTP 请求内容,创建各种对象(如 HttpServletRequest、HttpServletResponse、HttpServletSession等)。
- (3) Web 容器有请求的 URL 决定要使用哪个 Servlet来处理请求(事先有开发人员定义)。
- (4) Servlet 根据请求对象(HttpServeltRequest)的信息决定如何处理,通过响应对象(HttpServletResponse)来创建响应。
- (5) Web容器与 HTTP 服务器沟通,Web服务器将响应转换为 HTTP 响应并传回客户端。
Servlet 是执行在 Web 容器之上,Web容器是有服务器上的 JVM 启动,JVM 本身就是服务器上的一个可执行程序,当一个请求来到时,Web容器会为每个请求分配一个线程(Thread)。
如果有多次请求进来,就只是启动多个线程来进行处理,而不是重复启动多次 JVM。线程就像是进程(Process)中的轻量级流程,由于不用重复启动多个进程,可以大幅减轻性能负担。
然后要注意的是,Web容器可能会使用同一个 Servlet 实例来服务多个请求。也就是说,多个请求下,就相当于多个线程在共享存取一个对象,因此需要注意线程安全(Thread)的问题,避免引发数据错乱。标签:
原文地址:http://www.cnblogs.com/xzgc/p/4190093.html