在Web应用中,Servlet是一门重要的技术,Servlet是利用Java类编写的服务端程序,与平台架构,协议无关。

         JSP的实质就是Servlet,因为所有的JSP页面传回服务端时要转为Servlet进行编译运行。

         JSP编写HTML页面直观且易调试,所以JSP逐步取代了Servlet在开发页面中的作用。

1,Servlet 是什么?

Servlet就是一种实现了Servlet接口的类,它是由web容器负责创建并调用,它可以被看做是一个位于客户端和服务端的中间层,负责接收和响应用户的请求。并把处理结果返回到客户端显示,是运行在服务端一段程序。

     专业理解:

Servlet是一个Java编写的程序,此程序是基于Http协议的,在服务器端运行的(如tomcat),是按照Servlet规范编写的一个Java类。

在BS架构中,早期的Web服务器只能处理静态资源的请求,也就是无法根据请求进行计算后再生成相应的HTML内容。为了补充Web服务器的这个缺陷,于是增强服务器功能的CGI技术最早产生了。CGI(Common Gateway Interface通用网关接口)也是一种规范,可以使用不同的语言来开发,如Perl,C,Java等都可以。当客户端请求静态资源时,Web服务器会自己处理并返回,当客户端请求动态资源时,Web服务器会把请求转交给扩展程序来处理,并将扩展程序的处理结果返回给客户端。但是CGI技术开发复杂,性能较差,只要有一个请求到达,Web服务器就会单独分配一个进程来进行处理,可移植性不好,所以慢慢就由后来的Servlet技术所取代。

   Servlet技术是使用Java语言开发的一套组件规范,不再像CGI技术那样需要分配单独的进程来处理请求,而是单独分配一个线程来处理,于是大大提升了处理效率。并且Java语言是跨平台的语言,也提升了Web服务器扩展程序的可移植性,已经取代了CGI技术,成为BS架构中的主流技术。所有后续的BS架构中的主流框架本质上都是基于Servlet来实现的。

2,Servlet 提供的功能

(1)对客户端发送的数据进行读取和拦截

     客户端发送一个请求时,一般都会携带一些数据(例如:URL中的参数,页面中的表单,Ajax提交的参数等),当一个Servlet接收到这些请求时,Java Servlet 中的类通过所提供的的方法就能得到这些参数,(例如:方法request.getParameterName(name)用于获得名为name的参数值),也正是这些原因,Servlet可以对发送请求起到拦截作用,他在某些请求前先做一个预处理分析,从而判断客户端是否可以做这些请求(例如:检查访问权限,设定程序的字符集,检查用户角色等),当Servlet有上面这些功能时,一般称为拦截器。

  (2)读取客户端请求的隐含数据

     客户端请求的数据可以分为隐含数据和显示数据:

       隐含数据:一般是不直接跟随于URL中,它存在于请求的来源,缓存数据(Cookie),客户端类型中;

       显式数据:显然是用户可以直观看到的(例如:表单数据,URL参数),

Servlet不仅可以处理显式数据,而且可以处理隐含数据,是个“多面手”;

  (3)运行结果或者生成结果

当一个Web应用程序对客户端发出的请求作出响应时,一般需要很多中间过程,才能得到结果,Servlet就是起到这个中间角色的作用,它协调各组件,各部分完成响应功能,根据不同的请求作出相应的响应并显示结果。

  (4)发送响应的数据

Servlet在客户端作出响应并经过处理得出结果后,会对客户端发送响应的数据,以便让客户端获取请求的结果数据。在Web应用程序中,Servlet的这个作用相当突出,无论现有技术多么突出,都是基于这个技术点出发的。

综上所述,servlet的运行顺序大概如下图所示:    Servlet执行流程

  1.客户端发送请求给服务器。
  2.服务器开始接受,先判断该请求的servlet实例是否存在,如果不存在先装载一个servlet类并创建实例。如果存在则直接调用该servlet的service方法,之后进行判断是调用doGet方法还是doPost方法。
  3.servlet创建实例后,调用init方法进行初始化。之后调用servce方法,判断是调用doGet方法还是doPost方法。
  4.最后判断服务是否关闭,如果关闭则调用destroy方法。
(开始----Servlet实例是否存在----装载Servlet类并创建实例 构造方法----调用init(Servlet)类并创建实例----调用service(Servlet Requst Servlet Response)方法----服务器关闭-----调用Destroy的方法)

    

  访问Servlet流程
    1、提交超链接请求后,服务器会在web.xml中的<servlet-mapping>寻找对应的url(url-pattern)地址,然后得到这个servlet的名称。
    2、得到名称后,在servlet中寻找名称相同的标签,然后得到处理类(servlet-class文件)
    3、进入servlet处理类,根据请求方式(get或者post)执行d(oGet或者doPost)方法

3,Servlet技术的特点

Servlet在开发中带来的优点是:能及时响应和处理Web端的请求,使得一个不懂网页的Java开发人员,也能编写出Web应用程序,只是在开发/修改时比较困难,因此,代码的可读性,比较差,也比较难以维护。但是它具有以下优点:

(1)高效性

Servlet本身就是一个Java类,在运行的时候位于同一个java虚拟机中,可以快速的响应客户端的请求并并生成结果,在一个Web服务器中处理一个请求都是用的是线程而非进程,也就是说在性能开销方面小很多,无需大量启动进程时间,在高并发量访问时,一个进程可以有多个线程,并发时线程在CPU使用的开销代价远小于进程的开销代价。

(2)开发一个Web程序时,从开发顺序上说,比较简单,首先定义一个Servlet类,然后在系统(web.xml)中配置程序,继而发布程序,这样一个web就完成了,在开发过程中,系统提供了大量实用工具,可以处理复杂的HTML表单数据,处理cookie,跟踪网页会话等。

4,servlet的生命周期

分为三个阶段     初始化(包括装载和初始化)   运行      消亡      

    (0)加载和实例化(装载Servlet实例)

装载就是:由Servlet容器装载一个Servlet的类,把它装载到一个java内存中,Servlet容器可以创建一个Servlet对象并与web.xml对应;

      当Servlet容器启动或客户端发送一个请求时,Servlet容器会查找内存中是否存在该Servlet实例,若存在,则直接读取该实例响应请求;如果不存在,就创建一个Servlet实例。

    (1) 初始化

      实例化后,Servlet容器将调用Servlet的init()方法进行初始化(一些准备工作或资源预加载工作)。

    (2)服务

      初始化后,Servlet处于能响应请求的就绪状态。当接收到客户端请求时,Servlet容器将创建HttpServletRequestHttpServletResponse对象调用service(HttpServletRequest request ,HttpServletResponse response)的方法      处理客户端请求,service()方法通过request对象获得请求对象的信息并加以处理,再由response对象对客户端作出响应。

    (3)销毁

      当Servlet容器关闭时,Servlet实例也随时销毁。其间,Servlet容器会调用Servlet 的destroy()方法去判断该Servlet是否应当被释放(或回收资源)。

5,Servlet和JSP的比较

(1)Servlet是Java代码,jsp是页面代码。

   编写Servlet就是编写Java代码,所以应用java中的规范去编写Servlet类就可以了,但是若想在客户端响应结果,就必须在代码中加入大量的Html代码,可想而知,当想要得到一个比较美观,复杂的界面时,html会相当的多,而且繁琐,Jsp是以html代码为主,在页面中适当的嵌入Java代码来处理业务上的逻辑,显然jsp比servlet较易编写而且美观,所以

如果业务中主要以页面为主,选择Jsp技术; 反之,则选择Servlet技术,适合服务器端开发;

(2)Servlet的运行速度快过Jsp

    因为Servlet本身就是一个Java类,编译时直接转化为.class类文件,而jsp需要先编译为Java类,而后在运行,Servlet的运行速度较快; 

jsp与servlet的区别与联系

jsp和servlet的区别和联系:
1.jsp经编译后就变成了Servlet.
  (JSP的本质就是Servlet,JVM只能识别java的类,不能识别JSP的代码,Web容器将JSP的代码编译成JVM能够识别的java类)
  2.jsp更擅长表现于页面显示,servlet更擅长于逻辑控制.
  3.Servlet中没有内置对象,Jsp中的内置对象都是必须通过HttpServletRequest对象,HttpServletResponse对象以及HttpServlet对象得到.
  Jsp是Servlet的一种简化,使用Jsp只需要完成程序员需要输出到客户端的内容,Jsp中的Java脚本如何镶嵌到一个类中,由Jsp容器完成。
  而Servlet则是个完整的Java类,这个类的Service方法用于生成对客户端的响应。 联系:
  JSP是Servlet技术的扩展,本质上就是Servlet的简易方式。JSP编译后是“类servlet”。
  Servlet和JSP最主要的不同点在于:
  Servlet的应用逻辑是在Java文件中,并且完全从表示层中的HTML里分离开来。
  而JSP的情况是Java和HTML可以组合成一个扩展名为.jsp的文件。
  JSP侧重于视图,Servlet主要用于控制逻辑
  Servlet更多的是类似于一个Controller,用来做控制。

理解以下三点即可:

1、不同之处在哪?

    • Servlet在Java代码中通过HttpServletResponse对象动态输出HTML内容
    • JSP在静态HTML内容中嵌入Java代码,Java代码被动态执行后生成HTML内容

2、各自的特点

    • Servlet能够很好地组织业务逻辑代码,但是在Java源文件中通过字符串拼接的方式生成动态HTML内容会导致代码维护困难、可读性差
    • JSP虽然规避了Servlet在生成HTML内容方面的劣势,但是在HTML中混入大量、复杂的业务逻辑同样也是不可取的

  3、通过MVC双剑合璧

  既然JSP和Servlet都有自身的适用环境,那么能否扬长避短,让它们发挥各自的优势呢?答案是肯定的——MVC(Model-View-Controller)模式非常适合解决这一问题。

   MVC模式(Model-View-Controller)是软件工程中的一种软件架构模式,把软件系统分为三个基本部分:模型(Model)、视图(View)和控制器(Controller):

    • Controller——负责转发请求,对请求进行处理
    • View——负责界面显示
    • Model——业务功能编写(例如算法实现)、数据库设计以及数据存取操作实现

在JSP/Servlet开发的软件系统中,这三个部分的描述如下所示:

  1. Web浏览器发送HTTP请求到服务端,被Controller(Servlet)获取并进行处理(例如参数解析、请求转发)
  2. Controller(Servlet)调用核心业务逻辑——Model部分,获得结果
  3. Controller(Servlet)将逻辑处理结果交给View(JSP),动态输出HTML内容
  4. 动态生成的HTML内容返回到浏览器显示

        MVC模式在Web开发中的好处是非常明显,它规避了JSP与Servlet各自的短板,Servlet只负责业务逻辑而不会通过out.append()动态生成HTML代码;

    JSP中也不会充斥着大量的业务代码。这大大提高了代码的可读性和可维护性。

Tomcat 学习总结(1) --Servlet技术的更多相关文章

  1. 《TomCat与Java Web开发技术详解》(第二版) 第五章节的学习总结 ---- Servlet的高级用法

    这一章节主要是介绍了Servlet技术的一些高级用法,如下是我自己的整理归纳 1.下载文件:即获取服务器文件,并把文件写入反馈给客户端 ServletContext.getResourceAsStre ...

  2. Servlet的学习之Filter过滤器技术(1)

    本篇将讲诉Servlet中一项非常重要的技术,Filter过滤器技术.通过过滤器,可以对来自客户端的请求进行拦截,进行预处理或者对最终响应给客户端的数据进行处理后再输出. 要想使用Filter过滤器, ...

  3. [转]Servlet的学习之Filter过滤器技术

    本篇将讲诉Servlet中一项非常重要的技术,Filter过滤器技术.通过过滤器,可以对来自客户端的请求进行拦截,进行预处理或者对最终响应给客户端的数据进行处理后再输出. 要想使用Filter过滤器, ...

  4. java学习笔记—Servlet技术(11)

    如果大家要开发一个动态的网站,那么就必须要学习一种动态的网页开发技术.那么在SUN提供的JavaEE中主要包含两种开发动态网页的技术:Servlet和JSP技术. Servlet技术简介 Servle ...

  5. Java Web之Servlet技术

    1.Servlet基础 针对Servlet技术开发,Sun公司提供了一些列接口和类,其中最重要的是javax.servlet.Servlet接口,两个重要的包是javax.servlet和javax. ...

  6. Java Servlet 技术简介

    Java Servlet 技术简介 Java 开发人员兼培训师 Roy Miller 将我们现有的 servlet 介绍资料修改成了这篇易于学习的实用教程.Roy 将介绍并解释 servlet 是什么 ...

  7. 【Java】Java Servlet 技术简介

    Java 开发人员兼培训师 Roy Miller 将我们现有的 servlet 介绍资料修改成了这篇易于学习的实用教程.Roy 将介绍并解释 servlet 是什么,它们是如何工作的,如何使用它们来创 ...

  8. Tomcat学习总结(7)——Tomcat与Jetty比较

    Jetty 基本架构 Jetty目前的是一个比较被看好的 Servlet 引擎,它的架构比较简单,也是一个可扩展性和非常灵活的应用服务器. 它有一个基本数据模型,这个数据模型就是 Handler(处理 ...

  9. JavaWeb学习总结-04 Servlet 学习和使用

    一 Servlet 1 Servlet概念 Servlet时运行在服务器端的Java程序. Servlet的框架核心是 javax.servlet.Servlet 接口. 所有自定义的Servlet都 ...

随机推荐

  1. 前端三剑客之-html

    web服务本质 import socket def main(): sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) sock.bind ...

  2. Redis 通过 scan 找出不过期的 key

    SCAN 命令是一个基于游标的迭代器(cursor based iterator):SCAN 命令每次被调用之后,都会向用户返回一个新的游标,用户在下次迭代时需要使用这个新游标作为 SCAN 命令的游 ...

  3. 007.MongoDB特殊成员

    一 MongoDB成员 1.1 常见特殊member Secondary存在一些特殊的成员类型: Priority 0 #不能升为主,可以用于多数据中心场景 Hidden #对客户端来说是不可见的,一 ...

  4. Druid-代码段-3-1

    所属文章:池化技术(一)Druid是如何管理数据库连接的? 本代码段对应主流程3,新增连接的守护线程: //DruidDataSource的内部类,对应主流程3,用来补充连接 public class ...

  5. Ovirt 简单配置

    Ovirt是一款开源的虚拟化平台管理 主要组成: 1.OvirtEngine Server 用于管理和分配资源 ,能通过web管理 2.Hosts 提供虚拟化功能,提供CPU资源和内存资源,用于分配给 ...

  6. 图解JVM垃圾内存回收算法

    图解JVM垃圾内存回收算法 这篇文章主要介绍了图解JVM垃圾内存回收算法,由于年轻代堆空间的垃圾回收会很频繁,因此其垃圾回收算法会更加重视回收效率,下面博主和大家来一起学习一下吧 前言 首先,我们要讲 ...

  7. mybatis foreach方法遍历对象

    <delete id="deleteAppUserByIds">    delete from app_userinfo where     <foreach i ...

  8. 将静态页面部署到github.io

    背景:   我的腾讯云服务器是之前利用学生身份(有优惠)买的,现在快到期了,而且服务器上面只有一个引导页(静态页面)还有用,别的项目都没有用了.所以就想找一种不花钱买服务器就可以访问到我的引导页的方法 ...

  9. Luogu P5408 【模板】第一类斯特林数·行

    为什么要做这题呢,当然是有用啊qwq 首先我们考虑非常经典的式子: \[x^{\overline{n}}=\sum_i \left[^n_i\right] x^i\] 然后上倍增: \[x^{\ove ...

  10. super()方法详解

    目录 一.单独调用父类的方法 二.super() 方法基本概念 2.1 描述 2.2 语法 2.3 单继承使用super() 2.4 多继承使用super() 三.注意事项 四.练习 一.单独调用父类 ...