在本文中,我写了一些关于Web服务器、Servlet容器以及它与JVM的关系的基本概念。我想表达的是,Servlet容器也仅仅不过是一个Java程序。

1. 什么是Web服务器?

想要知道什么是Servlet容器,我们首先要知道什么是Web服务器。

Web服务器使用HTTP协议来传输数据。最简单的一种情况是,用户在浏览器(客户端,client)中输入一个URL(如,www.programcreek.com/static.html),然后就能获取网页进行阅览。因此,服务器完成的工作就是发送网页至客户端。传输过程遵循HTTP协议,它指明了请求(request)消息和响应(response)消息的格式。

2. 什么是Servlet容器?

在这里,我们发现,用户/客户端只能向服务器请求静态网页。如果用户想要根据自己的输入来读取网页,这种方式就不能满足用户的要求。Servlet容器的基本思想是在服务器端使用Java来动态生成网页。因此,Servlet容器是Web服务器和servlet进行交互的必不可少的组件。

Servlet容器就是用来装Servlet的。

3. 什么是Servlet?

Servlet是在javax.serlvet包中定义的一个接口。它声明了servlet生命周期中必不可少的三个方法-init()、service()和destroy()。每个servlet(无论是在SDK中定义的,或是自定义的)都必须实现这三个方法,而且由服务器在特定的时刻调用。

1. init()方法在servlet生命周期的初始化阶段被调用。它传递一个实现了javax.servlet.ServletConfig接口的对象,使得servlet能够从web application中获取初始化参数。

2. servlet初始化收,每接收一个请求,就会调用service()方法。每个请求的处理都在独立的线程中进行。Web服务器对每个请求都会调用一次service()方法。service()方法判断请求的类型,并把它转发给相应的方法进行处理。

3. 当需要销毁servlet对象时,就要调用destroy()方法。该方法释放被占用的资源。

和所有的Java程序一样,servlet运行在JVM中。引入servlet容器是为了处理复杂的HTTP请求。Servlet容器负责servlet的创建、执行和销毁。

4. Servlet容器和Web服务器如何处理一个请求?

1. Web服务器接收到HTTP请求

2. Web服务器将请求转发给servlet容器

3. 如果容器中不存在所需的servlet,容器就会检索servlet,并将其加载到容器的地址空间中

4. 容器调用servlet的init()方法对servlet进行初始化(该方法只会在servlet第一次被载入时调用)

5. 容器调用servlet的service()方法来处理HTTP请求,即,读取请求中的数据,创建一个响应。servlet会被保留在容器的地址空间中,继续处理其他的HTTP请求

6. Web服务器将动态生成的结果返回到正确的地址。

下图标出了上述的六个步骤:

5. JVM扮演的角色

使用servlet,就要允许JVM为处理每个请求分配独立的Java线程,这也是Servlet容器主要的优势之一。每一个servlet都是一个拥有能响应HTTP请求的特定元素的Java类。Servlet容器的主要作用是将请求转发给相应的servlet进行处理,并在JVM处理完请求后,将动态生成的结果返回至正确的地址。在大多数情况下,servlet容器运行在独立的JVM中,但如果容器需要多个JVM,也有相应的解决方案。

相关文章:

1. Servlet重定向至重命名后的文件下载

2. 在Java Servlet中使用Aapache commons FileUpload组件实现文件上传(包含源码)

3. 为什么我们需要诸如Struts 2一类的Java Web框架?

4. 从JAX-WS Web Service中获取ServletContext

原文地址:What is servlet container?

最新文章

  1. 【Android】Android如何一进入一个activity就弹出输入法键盘
  2. 浅谈SDN和NFV之间的关系
  3. java中synchronized关键字的用法
  4. HTML 编辑基础
  5. redis async client 与自有框架集成
  6. 关于c语言二维数组与指针的个人理解及处理办法。
  7. JavaScript 你好!
  8. rabbitmq重装之后无法加入原有cluster的bug解析
  9. 关于Mysql5.7高版本group by新特性报错
  10. android异步任务asyntask详解
  11. [ArcGIS API for JavaScript 4.8] Sample Code-Get Started-layers简介
  12. ES6随手学
  13. numpy地址
  14. Ubuntu 16.04安装Nginx
  15. 自学传说中的php接口编写
  16. Minieye杯第十五届华中科技大学程序设计邀请赛现场同步赛 I Matrix Again
  17. jasperreport
  18. ASP.NET MVC 3 笔记
  19. 多版本python安装第三方库
  20. 背水一战 Windows 10 (68) - 控件(控件基类): UIElement - Pointer 相关事件, Tap 相关事件, Key 相关事件, Focus 相关事件

热门文章

  1. ExtJs学习笔记(1)---ExtJs安装及其使用
  2. node封装mysql模块
  3. redis.Pool 配置
  4. JVM学习资料收集
  5. html5--6-35 列表和表格
  6. DFS Used%: NaN%问题
  7. http的安全方法和幂等性
  8. OpenCV坐标系与操作像素的四种方法
  9. Linux系统的方法论
  10. iOS沙盒(sandbox)机制及获取沙盒路径