1 在这个博客中,我将描述一下web服务器、Servlet容器的基本概念,以及Servlet容器和jvm之间的关系。我想要证明的是Servlet容器不过就是一个java程序。

2 什么是web服务器

在了解什么是Servlet容器前,我们需要先知道什么是web服务器。

web服务器使用http协议传输数据。下面是一个简单的例子:一个用户在浏览器中输入一个url(例如,www.baidu.com),然后它将会获取到一个web页面。因此,web服务器做的事情是发送一个web页面给浏览器。http协议指定了传输的请求和响应的数据格式。

3 什么是Servlet容器

就上面的例子,client/server模式只是传输静态的文件,client告诉server我需要哪个文件,然后server就把它传给client。如果用户想要获取的页面是基于它的输入的,这个基本的静态文件传输功能是不够的。Servlet容器的基本思想是在服务器端使用java动态生成web页面。所以,本质上Servlet容器是server的一部分,是它和Servlet进行交互的。

4 什么是Servlet

Servlet是javax.servlet包定义的一个接口。它生命了一个Servlet生命周期中的三个基本的方法,init()、service()和destroy()。这三个基本方法由每个Servlet所实现,并且在特定的时间由服务器所触发。

4.1 init()方法在Servlet生命周期的初始化阶段被调用。它以javax.servlet.ServletConfig接口对象为参数,来获取web应用的初始化参数。

4.2 service ()方法被每个请求所触发,每个请求在自己的线程中被serviced,也就是说,每次service()方法被调用都是在自己的线程中。Servlet容器为每个请求调用service()方法。service()方法辨别请求的类型,然后把它分发给合适的处理方法。

4.3 destroy()方法在Servlet对象需要被销毁的时候调用。它释放Servlet对象所持有的资源。

Servlet也是运行在JVM上,Servlet容器负责Servlet的创建、执行和销毁。

5 Servlet容器和服务器是怎样处理一次请求的

第一步,web服务器接收到一个http请求;

第二步,web服务器将请求转发给Servlet容器;

第三步,如果对应的Servlet还没有被加载,那么该Servlet将会被动态加载进Servlet容器的地址空间;

第四步,Servlet容器触发Servlet的init()方法,该方法只会在加载的时候触发一次;

第五步,Servlet容器触发Servlet的service()方法来处理http请求,从请求中读取数据并且生成响应。这个Servlet还在Servlet容器的地址空间中,还可以处理其它的http请求;

第六步,web服务器将动态生成的响应返回给客户端。

6 jvm的角色

使用servlet来让jvm在独立的java线程中来处理每个请求是Servlet容器的一个关键的优势。每个servlet是一个具有特殊组件的java类来对应http请求。Servlet容器的主要功能是将请求转发给正确的Servlet处理,然后再把处理的结果交给web服务器。在大多数情况下,Servlet容器运行在一个jvm实例中,但是当Servlet容器需要多个jvm实例时,也有解决方案。

问题,当多个同类型的http请求来了时,Servlet容器中的Servlet对象需要同时服务多个线程的话,线程安全如何保障?

what is Servlet Container[转载]的更多相关文章

  1. What is the difference Apache (Http Server) and Tomcat (Servlet Container)

    The Apache Project The Apache Project is a collaborative software development effort. Its goal is to ...

  2. Web container==Servlet container

    Web container From Wikipedia, the free encyclopedia   (Redirected from Servlet container)     Web co ...

  3. 1.端口被占用问题:Embedded servlet container failed to start. Port 8097 was already in use.

    1.端口被占用问题:Embedded servlet container failed to start. Port 8097 was already in use.netstat -anonetst ...

  4. SpringBoot项目 org.springframework.boot.context.embedded.EmbeddedServletContainerException: Unable to start embedded Jetty servlet container报错

    SpringBoot项目启动报错 ERROR 2172 --- [ main] o.s.boot.SpringApplication : Application startup failed org. ...

  5. MyEclipse2014配置Tomcat开发JavaWeb程序JSP以及Servlet(转载)

    转载地址:http://blog.csdn.net/21aspnet/article/details/21867241 1.安装准备 1).下载安装MyEclipse2014,这已经是最新版本. 2) ...

  6. JavaWeb的学习之Servlet(转载自孤傲苍狼)

    一.Servlet简介 Servlet是sun公司提供的一门用于开发动态web资源的技术. Sun公司在其API中提供了一个servlet接口,用户若想用发一个动态web资源(即开发一个Java程序向 ...

  7. Chapter 2: A Simple Servlet Container

    一.这一章从头构建一个简单的Servlet容器,可以处理Servlet和静态资源(如html文件/图片等). 要处理Servlet,必须遵循javax.servlet.Servlet规范,而处理静态资 ...

  8. Javaweb基础--->Servlet(转载)

    今天看到这篇博客,感觉还不错,拿来借鉴学习一下. 一.Servlet 是什么? Java Servlet 是运行在 Web 服务器或应用服务器上的程序,它是作为来自 Web 浏览器或其他 HTTP 客 ...

  9. servlet container:tomcat jetty and undertow

    1 spring boot内嵌容器支持tomcat.jetty和undertow 但是undertow性能最好,详见: https://examples.javacodegeeks.com/enter ...

随机推荐

  1. Spring Cloud和Dubbo的对比

  2. <Redis> 入门二 五种数据类型的操作、通用key的操作、发布订阅

    文档参考:http://www.redis.net.cn/ string - > key value 简单的keyvalue,常规计数:例如微博数,粉丝数 set     -> key v ...

  3. Python 函数对象-函数嵌套-名称空间与作用域-闭包函数

    今日内容: 1. 函数对象 函数是第一类对象: 指的是函数名指向的值可以被当中数据去使用 1.可以被引用 2.可以当做参数传给另一个函数 3.可以当做一个函数的返回值 4.可以当做容器类型的元素 2. ...

  4. cgi fastcgi php-cgi php-fpm

      参考: 摘至:http://www.cnblogs.com/thinksasa/p/4497567.html 详说fastcgi,php-fpm的区别:http://segmentfault.co ...

  5. 选项B中:int b[][3]={0,1,2,3}

    选项B中:int b[][3]={0,1,2,3};等价于 int b[][3]={0,1,2,3,0,0};    int b[][3]={0,1,2,3,4};         cout<& ...

  6. 【04】< meta > 元素

    < meta > 元素 概要 标签提供关于HTML文档的元数据.元数据不会显示在页面上,但是对于机器是可读的.它可用于浏览器(如何显示内容或重新加载页面),搜索引擎(关键词),或其他 we ...

  7. xtu summer individual-4 D - Martian Strings

    Martian Strings Time Limit: 2000ms Memory Limit: 262144KB This problem will be judged on CodeForces. ...

  8. Node.js & module system

    Node.js & module system Node.js v10.9.0 Documentation https://nodejs.org/api/modules.html#module ...

  9. 【bzoj3747】[POI2015]Kinoman - 线段树(经典)

    Description 共有m部电影,编号为1~m,第i部电影的好看值为w[i]. 在n天之中(从1~n编号)每天会放映一部电影,第i天放映的是第f[i]部. 你可以选择l,r(1<=l< ...

  10. 解方程(codevs 3732)

    题目描述 已知多项式方程: a0+a1x+a2x^2+..+anx^n=0 求这个方程在[1, m ] 内的整数解(n 和m 均为正整数) 输入输出格式 输入格式: 输入文件名为equation .i ...