Servlet

246 阅读3分钟

出现背景

随着互联网技术的发展,基于HTTP和HTML的web应用急速增长。早期的web应用主要用于浏览新闻等静态页面,用户通过HTTP协议请求服务 器上的静态页面,服务器上的web服务器软件接收到请求后,读取URI标示的资源,再加上消息报头发送给客户端浏览器,浏览器负责解析HTML,将结果呈 现出来。

然而随着时间发展,用户已经不满足于仅浏览静态页面。用户需要一些交互操作,获取一些动态结果。如果基于HTTP协议实现服务器端软件增强功能太过 复杂,所以需要一些扩展机制来实现用户想要的功能。早期使用的Web服务器扩展机制是CGI(Common Gateway Interface,公共网关接口)。使用这种方法,用户单击某个链接或输入网址来访问CGI程序,web服务器收到请求后,运行该CGI程序,对用户请 求进行处理,紧接着将处理结果并产生一个响应,该响应被返回给web服务器,web服务器对响应进行包装,以HTTP响应的方式返回给浏览器。

CGI程序在一定程度上解决了用户需求。不过还存在一些不足之处,如CGI程序编写困难,响应时间较长,以进程方式运行导致性能受限。于是1997年,sun公司推出了Servlet技术,作为java阵营的CGI解决方案。

servlet

是什么?

  • java 服务器的小程序
  • 基于 java 的 web 组件
  • 作用在 web 服务器中
  • 由 servlet 容器管理

做什么?

  • 实现用户的交互需求,动态生成内容

本质

  • 符合 servlet 标准java 中的类
  • 被编译为平台独立的字节码,可以动态的加入到支持 java 技术的 web 中运行

servlet 容器

是什么?

  • web 或者应用服务器的一部分

做什么?

  • 在发送的请求和响应之上提供网络服务,基于 MIME 格式。
  • 管理 servlet
    • 实例化
    • 调用方法

为什么需要容器?

  • 使得开发者专注于业务逻辑,无需操心与服务器的对话操作
  • 管理 servlet 的生命周期
  • 多线程支持,容器自动为每一个请求创建一个线程,虽然同样需要考虑多线程安全问题,比如同步问题,但这可使得工作减少很多
  • 声明方式实现安全,使用 xml 文件来配置和修改安全性,不必写入 servlet 类中
  • JSP 支持,容器自动翻译 jsp 代码

相较于 CGI 的优势

  • 能够使用 java 类库
  • 拥有 java语言的优点,包括平台独立性和易开发等等
  • 容器提供错误处理和安全
  • 单例多线程
  • 使用的事标准的 API,能够被更多的 web 服务器支持
  • 处理请求使用的是线程,相交于系统进程要节约许多资源。

servlet 容器的分类

根据工作模式分类

  1. 独立 Servlet 容器 基于 java 的 web 服务器,Servlet 容器作为构成 web 服务器的一部分。

  2. 进程内的 Serlvet 容器 不基于 java 的 web 服务器,此时容器由插件和 Java 容器组成,在 web 服务器的内部地址打开一个 JVM,java 容器运行在此,并运行 servlet。当一个 servlet 请求到来时,由插件获得该请求的控制权,将请求交给 Java 容器,Java 容器再将请求交给 Servlet 进行处理。

特点

  • 速度较快
  • 扩展性较差
  1. 进程外的 Servlet 容器 特点
  • 速度较慢
  • 扩展性较好