Servlet的概述

什么是Servlet?

servlet 是基于 Java 的 Web 组件,由容器(Servlet容器)进行管理,来生成动态内容。像其他基于 Java 的组件技术一样,servlet 也是基于平台无关的 Java 类格式,被编译为平台无关的字节码,可以被基于 Java 技术的 Web 服务器动态加载并运行。容器(Container),有时候也叫做 servlet 引擎,是 Web 服务器为支持 servlet 功能扩展的部分。客户端通过 servlet 容器实现的 request/response paradigm(请求/应答模式) 与 Servlet 进行交互。

Servlet与其他技术的对比

从功能上看,servlet 位于Common Gateway Interface(公共网关接口,简称 CGI)程序和私有的服务器扩展如 Netscape Server API(NSAPI)或 Apache Modules 这两者之间。
相对于其他服务器扩展机制 Servlet 有如下优势:

  • 它们通常比 CGI 脚本更快,因为采用不同的处理模型。
  • 它们采用标准的 API 从而支持更多的Web 服务器。
  • 它们拥有 Java 编程语言的所有优势,包括容易开发和平台无关。
  • 它们可以访问 Java 平台提供的大量的 API。

Servlet的历史

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 (中文意思:小程序)
    这是纯客户端(浏览器)方案(基本被flash、ajax和HTMLL5替代),applet就是浏览器中的Java插件,浏览器通过它就能够解释执行WEB服务器发过来的Java代码,从而实现动态。但是,显然这种方案不好,既需要浏览器必须安装插件,又受限于浏览器,所以Java代码不能太多和太复杂。
    比如,如果安装了JRE,虽然IE浏览器会自动启用Java插件,但是你可以轻易禁止。再比如Chrome还需要你手动去安装插件才行,普通用户连Java是什么都不知道他怎么会去装呢?
    IE如下图:
  2. Servlet
    既然浏览器不方便执行Java代码,那自然还是服务端来执行了,所以Servlet出现了,Servlet就是server端的applet的意思。

Servlet的工作原理概述

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

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

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

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

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

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

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日…
赏个包子钱~~