Web容器(一):Web容器简介

Web容器

Web技术的发展史

早期的Web应用主要用于浏览新闻等静态页面,HTTP服务器(比如Apache、Nginx)向浏览器返回静态HTML,浏览器负责解析HTML,将结果呈现给用户。

随着互联网的发展,我们已经不满足于仅仅浏览静态页面,还希望通过一些交互操作,来获取动态结果,因此也就需要一些扩展机制能够让HTTP服务器调用服务端程序。

于是Sun公司推出了Servlet技术。你可以把Servlet简单理解为运行在服务端的Java小程序,但是Servlet没有main方法,不能独立运行,因此必须把它部署到Servlet容器中,由容器来实例化并调用Servlet。

而Tomcat和Jetty就是一个Servlet容器。为了方便使用,它们也具有HTTP服务器的功能,因此Tomcat或者Jetty就是一个“HTTP服务器 + Servlet容器”,我们也叫它们Web容器

其他应用服务器比如JBoss和WebLogic,它们不仅仅有Servlet容器的功能,也包含EJB容器,是完整的Java EE应用服务器。从这个角度看,Tomcat和Jetty算是一个轻量级的应用服务器。在微服务架构日渐流行的今天,开发人员更喜欢稳定的、轻量级的应用服务器,并且应用程序用内嵌的方式来运行Servlet容器也逐渐流行起来。

Web容器与Spring、Web应用等的关系

Servlet技术是Web开发的原点,几乎所有的Java Web框架(比如Spring)都是基于Servlet的封装,Spring应用本身就是一个Servlet,而Tomcat和Jetty这样的Web容器,负责加载和运行Servlet。你可以通过下面这张图来理解Tomcat和Jetty在Web开发中的位置。 在这里插入图片描述

Web容器作用

通信支持 利用容器提供的方法,你可以简单的实现servlet与web服务器的对话。否则你就要自己建立server,监听端口,创建新的流等等一系列复杂的操作。而容器的存在就帮我们封装这一系列复杂的操作。使我们能够专注于servlet中的业务逻辑的实现。

生命周期管理 容器负责servlet的整个生命周期。如何加载类,实例化和初始化servlet,调用servlet方法,并使servlet实例能够被垃圾回收。有了容器,我们就不用花精力去考虑这些资源管理垃圾回收之类的事情。

多线程支持 容器会自动为接收的每个servlet请求创建一个新的java线程,servlet运行完之后,容器会自动结束这个线程。

声明式实现安全 利用容器,可以使用xml部署描述文件来配置安全性,而不必将其硬编码到servlet中。

jsp支持 容器将jsp翻译成java!

Web容器处理流程

1.client点击一个URL,其URL指向一个servlet

在这里插入图片描述

2.容器识别出这个请求索要的是一个servlet,所以创建两个对象:httpservletrequest、httpservletresponse

在这里插入图片描述

3.容器根据请求中的URL找到对应的servlet,为这个请求创建或分配一个线程,并把两个对象request和response传递到servlet线程中

在这里插入图片描述

4.容器调用servlet的service()方法。根据请求的不同类型,service()方法会调用doGet()或者doPost()方法

在这里插入图片描述

5.doGet()方法生成动态页面,然后把这个页面填入到response对象中

在这里插入图片描述

6.线程结束,容器把response对象转换成http响应,传回client,并销毁response和request对象

在这里插入图片描述

Web容器涉及的知识点

Tomcat和Jetty作为工业级的中间件,它们的设计非常优秀,比如面向接口编程组件化骨架抽象类一键式启停对象池技术以及各种设计模式,比如模板方法观察者模式责任链模式等。

 

posted @ 2022-02-16 22:38  huiyii  阅读(1559)  评论(0编辑  收藏  举报