Servlet的历史与规范

本文详细介绍了Servlet的历史,从CGI到Servlet的诞生,再到Servlet的工作原理和其发展历程。接着深入讲解Servlet规范,包括Servlet概述、Servlet Interface、Request、Servlet Context、Response、Filtering以及请求映射等关键概念,帮助读者理解Servlet在Web开发中的重要作用和使用方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、Servlet历史

1. Servlet的由来

  • 背景
    上世纪90年代,随着Internet和浏览器的飞速发展,基于浏览器的B/S模式随之火爆发展起来。
    最初,用户使用浏览器向WEB服务器发送的请求都是请求静态的资源,比如html、css等。
    但是可以想象:根据用户请求的不同动态的处理并返回资源是理所当然必须的要求。

  • CGI
    必须要满足上述需求,所以CGI(Common Gateway Interface)出现了。CGI程序使用C、Shell Script或Perl编写,CGI是为特定操作系统编写的(如UNIX或Windows),不可移植,CGI程序对每个请求产生新的进程去处理。步骤如下:

    1. WEB服务器接收一个用户请求;
    2. WEB服务器将请求转交给CGI程序处理;
    3. CGI程序将处理结果返回给WEB服务器;
    4. WEB服务器把结果送回用户;
      这里写图片描述
  • Java
    与此同时,Java语言也在迅速发展。必然的,Java要支持上述需求。
    Java有两种方案来实现动态需求,它们都属于JavaEE技术的一部分。

    1. applet
      这是纯客户端(浏览器)方案,applet就是浏览器中的Java插件,浏览器通过它就能够解释执行WEB服务器发过来的Java代码,从而实现动态。但是,显然这种方案不好,既需要浏览器必须安装插件,又受限于浏览器,所以Java代码不能太多和太复杂。

      比如,如果安装了JRE,虽然IE浏览器会自动启用Java插件,但是你可以轻易禁止。再比如Chrome还需要你手动去安装插件才行,普通用户连Java是什么都不知道他怎么会去装呢?
      IE如下图:

      这里写图片描述

    2. Servlet
      既然浏览器不方便执行Java代码,那自然还是服务端来执行了,所以Servlet出现了,Servlet就是server端的applet的意思。

2. Servlet的工作原理

其实Servlet的工作原理基本类似上面的CGI,不过Servlet比CGI更好。

  1. WEB服务器接收一个用户请求;

  2. WEB服务器将请求转交给WEB服务器关联的Servlet容器;

  3. Servlet容器找到对应的Servlet并执行这个Servlet;

  4. Servlet容器将处理结果返回给WEB服务器;

  5. WEB服务器把结果送回用户;

3. Servlet的发展

  1. Servlet诞生后,SUN公司很快发现了Servlet编程非常繁琐,这是因为:

    • Servlet代码中有大量冗余代码,每个Servlet都有一模一样的或基本近似的代码,比如out输出你可能就得写成百遍;
    • 开发Servlet必须精通网页前端和美工,你得非常不直观的在Servlet中写前端代码,这使得实现各种页面效果和风格非常困难。
  2. 所以,SUN借鉴了Microsoft的ASP,正式提出JSP(Servlet1.1),已期望能代替Servlet。但是很快,SUN发现JSP也有问题:

    • 前端开发人员需要看JSP中大量的令他困惑的后端代码;
    • 同样,Servlet开发人员也得在复杂的前端代码中找到其能写Servlet代码的地方;
  3. 所以,Servlet1.2出现了,这个版本的Servlet倡导了MVC思想:

    • JSP(V):将后端代码封装在标签中,使用大量的标签,JSP只用来写前端代码而不要有后台代码;
    • Servlet(C):Servlet完成Controller的功能再加上部分代码逻辑;
    • Model(M):Servlet将数据发送给Model,Model包括部分代码逻辑,最主要的Model也代表着被组织好的用于返回的数据。最终,Model数据会被显示在JSP上(V)。

基本上到这里Servlet的大方向已经固定了,随之,成熟的发展至今 - 2016年5月26日…


↑以上,是关于Servlet的历史部分。↓下面来讲一讲Servlet规范中重要知识点。


声明:以下内容归纳自官方Servlet规范和JavaEE规范等文档。

二、Servlet规范

下载地址
Servlet规范官方地址:JSR 340: Java Servlet 3.1 Specification(中文版网上有人翻译了,可以自己搜索找找)
可以自己下载阅读,最终版final是2013年5月28发布的Servlet3.1。

1. Servlet概述

Servlet有两种意思:

  1. 广义上是:基于Java技术的Web组件,被容器托管,用于生成动态内容。

    再详细点说,Servlet是JavaEE组件中的 -> Web组件的 -> 一种。
    (其它两种是JavaServer Faces和JavaServer Page)

  2. 狭义上说:是JavaEE API中的一个interfacejavax.servlet.Servlet

Servlet 容器/引擎:

  1. Servlet容器也可以叫引擎,Container/Engine,用于执行Servlet

  2. 容器是以内嵌或者附加组件的形式存在于Web服务器或者应用服务器中的。

  3. 容器本身(不依赖Web服务器)就提供了基于请求/响应发送模型的网络服务,解码基于MIME的请求,格式化基于MIME的响应。

  4. 所有容器必须实现HTTP协议的请求/响应模型。其它协议不强求,如HTTPS。




下面开始说一下规范的核心要点。
请注意:我不是要完整的阐述Servlet规范,毕竟你可以直接看规范。这里我只是要记录我认为重要的点。

为了方便描述,先声明一些名词:

  • web.xml = 部署描述符(Deployment Descriptor )
  • 容器 = Servlet Container/Engine



2. Servlet Interface

Servlet生命周期:

Servlet的生命(周期)是由容器管理的,换句话说,Servlet程序员不能用代码控制其生命。

  1. 加载和实例化:
    时机取决于web.xml的定义,如果有<load-on-startup>x</load-on-startup>则在容器启动时,反之则在第一次针对这个Servlet的请求发生时。

  2. 初始化:
    实例化后会立马进行初始化。也就是执行init方法。

  3. 请求处理:
    初始化后,Servlet就可以接受请求了。

    • 基本方式是执行Servlet接口中的service方法。

    • 当然,API也提供了HttpServlet抽象类,其中有doGetdoPost等特殊方法。

    • 注意:任意的容器按照规范必须实现上述几种方法,所以你的代码写在这几个方法中都可以。

  4. 终止服务:

    1. 容器会在合适的时候销毁某个Servlet对象,这个策略取决于容器的

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值