Servlet概念理解

这是第一次接触Servlet,将一些资料整理了一下,方便理解与记忆;

Servlet(Server Applet),全称Java Servlet,是用Java编写的服务器程序

servlet的命名可以看出sun命名的特点,如Applet=Application+let,表示小应用程序;Scriptlet=Script+let,表示小脚本程序;同样Servlet=Server+let,表示小服务程序

 
主要功能交互式地浏览和修改数据,生成动态Web内容。

Servlet运行于支持Java的应用服务器中, 狭义的Servlet是指Java语言实现的一个接口,广义的Servlet是指任何实现了这个Servlet接口的类,一般情况下,人们将Servlet理解为后者。从实现上讲,Servlet可以响应任何类型的请求,但绝大多数情况下Servlet只用来扩展基于HTTP协议的Web服务器。最早支持Servlet标准的是JavaSoft的Java
Web Server。此后,一些其它的基于Java的Web服务器开始支持标准的Servlet。

Servlet是在服务器上运行的小程序,服务器上需要一些程序,常常是根据用户输入访问数据库的程序。这些通常是使用公共网关接口(CGI)应用程序完成的。然而,在服务器上运行Java,这种程序可使用Java编程语言实现。在通信量大的服务器上,Java
servlet的优点在于它们的执行速度更快于CGI程序。各个用户请求被激活成单个程序中的一个线程,而创建单独的程序,这意味着各个请求的系统开销比较小。

Servlet的主要功能在于交互式地浏览和修改数据,生成动态Web内容。

实现过程:

客户端发送请求至服务器端;

           服务器将请求信息发送至Servlet;

           Servlet生成响应内容并将其传给服务器。响应内容动态生成,通常取决于客户端的请求;

           服务器将响应返回给客户端。

Servlet看起来像是通常的Java程序。Servlet导入特定的属于Java ServletAPI的包。因为是对象字节码,可动态地从网络加载,可以说Servlet对Server就如同Applet对Client一样,但是,由于Servlet运行于Server中,它们并不需要一个图形用户界面。从这个角度讲,Servlet也被称为FacelessObject。

一个servlet就是Java编程语言中的一个,它被用来扩展服务器的性能,服务器上驻留着可以通过“请求-响应”编程模型来访问的应用程序。虽然servlet可以对任何类型的请求产生响应,但通常只用来扩展Web服务器的应用程序。

Server创建一个响应对象,响应客户端请求

Server激活Servlet的service()方法,传递请求和响应对象作为参数                //请求和响应对象作为参数

service()方法获得关于请求对象的信息,处理请求,访问其他资源,获得需要的信息

service()方法使用响应对象的方法,将响应传回Server,最终到达客户端。service()方法可能激活其它方法以处理请求,如doGet()或doPost()或程序员自己开发的新的方法。

        对于更多的客户端请求,Server创建新的请求和响应对象,仍然激活此Servlet的service()方法,将这两个对象作为参数传递给它。如此重复以上的循环,但无需再次调用init()方法。一般Servlet只初始化一次(只有一个对象),当Server不再需要Servlet时(一般当Server关闭时),Server调用Servlet的Destroy()方法。

工作模式

         客户端发送请求至服务器;

         服务器启动并调用Servlet,Servlet根据客户端请求生成响应内容并将其传给服务器

         服务器将响应返回客户端。

生命周期

     1,初始化阶段:调用init()方法

     2,响应客户请求阶段:调用service()方法

     3,终止阶段:调用destroy()方法

加载和实例化Servlet。这项操作一般是动态执行的。然而,Server通常会提供一个管理的选项,用于在Server启动时强制装载和初始化特定的Servlet。

Server创建一个Servlet的实例

一个客户端的请求到达Server

Server调用Servlet的init()方法(可配置为Server创建servlet实例时调用)

Server创建一个请求对象,处理客户端请求

Server创建一个响应对象,响应客户端请求

Server激活Servlet的service()方法,传递请求和响应对象作为参数

Service()方法获得关于请求对象的信息,处理请求,访问其他资源,获得需要的信息

Service()方法使用响应对象的方法,将响应传回Server,最终到达客户端。service()方法可能激活其它方法以处理请求,如doGet()或doPost()或程序员自己开发的新的方法。

对于更多的客户端请求,Server创建新的请求和响应对象,仍然激活此Servlet的service()方法,将这两个对象作为参数传递给它。如此重复以上的循环,但无需再次调用init()方法。一般Servlet只初始化一次(只有一个对象),当Server不再需要Servlet时(一般当Server关闭时),Server调用Servlet的Destroy()方法。

开发理解

JavaServer Pages(JSP)是一种实现普通静态HTML和动态HTML混合编码的技术,JSP并没有增加任何本质上不能用Servlet实现的功能。但是,在JSP中编写静态HTML更加方便,不必再用println语句来输出每一行HTML代码。更重要的是,借助内容和外观的分离,页面制作中不同性质的任务可以方便地分开:比如,由页面设计者进行HTML设计,同时留出供Servlet程序员插入动态内容的空间;

从网络三层结构的角度看JSP和Servlet的区别,一个网络项目最少分三层:data layer(数据层),business
layer(业务层), presentation layer(表现层)。当然也可以更复杂。Servlet用来写business layer是很强大的,但是对于写presentation layer就很不方便。JSP则主要是为了方便写presentation layer而设计的。当然也可以写business layer。写惯了ASP,PHP,CGI的朋友,经常会不自觉的把presentation layer和business
layer混在一起。

根据SUN自己的推荐,JSP中应该仅仅存放与presentation layer有关的东东,也就是说,只放输出HTML网页的部份。而所有的数据计算,数据分析,数据库联结处理,统统是属于business
layer,应该放在Java BEANS中。通过JSP调用Java BEANS,实现两层的整合。

为什么要采用这些组件技术呢?因为单纯的ASP/JSP语言是非常低效率执行的,如果出现大量用户点击,纯SCRIPT语言很快就到达了他的功能上限,而组件技术就能大幅度提高功能上限,加快执行速度。

另外一方面,纯SCRIPT语言将presentation layer和business layer混在一起,造成修改不方便,并且代码不能重复利用。如果想修改一个地方,经常会牵涉到十几页CODE,采用组件技术就只改组件就可以了。

综上所述,Servlet是一个早期的不完善的产品,写business layer很好,写presentation layer就很臭,并且两层混杂。

所以,推出JSP+BEAN,用JSP写presentation layer,用BEAN写business layer。SUN自己的意思也是将来用JSP替代Servlet。这是技术更新方面JSP和Servlet的区别。

可是,这不是说,学了Servlet没用,实际上,你还是应该从Servlet入门,再上JSP,再上JSP+BEAN。

强调的是:学了JSP,不会用Java BEAN并进行整合,等于没学。大家多花点力气在JSP+BEAN上。

编程接口

HTTPServlet 使用一个
HTML 表单来发送和接收数据。要创建一个 HTTPServlet,请扩展 HttpServlet 类,
该类是用专门的方法来处理 HTML 表单
GenericServlet 的一个子类。 HTML 表单是由 <FORM> 和 </FORM> 标记定义的。表单中典型地包含输入字段(如文本输入字段、复选框单选按钮和选择列表)和用于提交数据的按钮。当提交信息时,它们还指定服务器应执行哪一个Servlet(或其它的程序)。
HttpServlet 类包含 init()、destroy()、service()
等方法。其中 init() 和 destroy() 方法是继承的。

(1) init() 方法

在 Servlet 的生命期中,仅执行一次 init() 方法。它是在服务器装入
Servlet 时执行的。 可以配置服务器,以在启动服务器客户机首次访问
Servlet 时装入 Servlet。 无论有多少客户机访问 Servlet,都不会重复执行 init() 。

缺省的 init() 方法通常是符合要求的,但也可以用定制 init() 方法来覆盖它,典型的是管理服务器端资源。
例如,可能编写一个定制 init() 来只用于一次装入 GIF 图像,改进 Servlet 返回 GIF 图像和含有多个客户机请求的性能。另一个示例是初始化数据库连接。缺省的
init() 方法设置了 Servlet 的初始化参数,并用它的 ServletConfig 对象参数来启动配置, 因此所有覆盖 init() 方法的 Servlet 应调用 super.init() 以确保仍然执行这些任务。在调用 service() 方法之前,应确保已完成了 init() 方法。

(2) service() 方法

service() 方法是 Servlet 的核心。每当一个客户请求一个HttpServlet 对象,该对象的service() 方法就要被调用,而且传递给这个方法一个"请求"(ServletRequest)对象和一个"响应"(ServletResponse)对象作为参数。 在 HttpServlet 中已存在 service() 方法。缺省的服务功能是调用与 HTTP 请求的方法相应的 do 功能。例如, 如果 HTTP 请求方法为
GET,则缺省情况下就调用 doGet() 。Servlet 应该为 Servlet 支持的 HTTP 方法覆盖 do
功能。因为 HttpServlet.service() 方法会检查请求方法是否调用了适当的处理方法,不必要覆盖 service() 方法。只需覆盖相应的 do 方法就可以了。

Servlet的响应可以是下列几种类型:

一个输出流,浏览器根据它的内容类型(如text/HTML)进行解释。

一个HTTP错误响应,
重定向到另一个URL、servlet、JSP。

(3)doGet()方法

当一个客户通过HTML 表单发出一个HTTP
GET请求或直接请求一个URL时,doGet()方法被调用。与GET请求相关的参数添加到URL的后面,并与这个请求一起发送。当不会修改服务器端的数据时,应该使用doGet()方法。

(4)doPost()方法

当一个客户通过HTML 表单发出一个HTTP POST请求时,doPost()方法被调用。与POST请求相关的参数作为一个单独的HTTP 请求从浏览器发送到服务器。当需要修改服务器端的数据时,应该使用doPost()方法。

(5) destroy() 方法

destroy() 方法仅执行一次,即在服务器停止且卸装Servlet
时执行该方法。典型的,将 Servlet 作为服务器进程的一部分来关闭。缺省的
destroy() 方法通常是符合要求的,但也可以覆盖它,典型的是管理服务器端资源。例如,如果 Servlet 在运行时会累计统计数据,则可以编写一个 destroy() 方法,该方法用于在未装入 Servlet 时将统计数字保存在文件中。另一个示例是关闭数据库连接。

服务器卸装
Servlet 时,将在所有 service() 方法调用完成后,或在指定的时间间隔过后调用 destroy() 方法。一个Servlet 在运行service() 方法时可能会产生其它的线程,因此请确认在调用 destroy() 方法时,这些线程已终止或完成。

(6) GetServletConfig()方法

GetServletConfig()方法返回一个 ServletConfig 对象,该对象用来返回初始化参数和ServletContext。ServletContext 接口提供有关servlet 的环境信息

(7) GetServletInfo()方法

GetServletInfo()方法是一个可选的方法,它提供有关servlet 的信息,如作者、版

servlet

本、版权。

服务器调用sevlet
的Service()、doGet()和doPost()这三个方法时,均需要 "请求"和"响应"对象作为参数。"请求"对象提供有关请求的信息,而"响应"对象提供了一个将响应信息返回给浏览器的一个通信途径。

javax.servlet
软件包中的相关类为ServletResponse和

ServletRequest,而javax.servlet.http 软件包中的相关类为HttpServletRequest
和 HttpServletResponse。Servlet 通过这些对象与服务器通信并最终与客户机通信。Servlet
能通过调用"请求"对象的方法获知客户机环境,服务器环境的信息和所有由客户机提供的信息。Servlet 可以调用"响应"对象的方法发送响应,该响应是准备发回客户机的。

时间: 2024-11-06 17:14:23

Servlet概念理解的相关文章

实现HTTPS系列第四弹之【TLS ,SSL等概念理解】

博文说明[前言]: 本文将通过个人口吻介绍TLS ,SSL,PKI等相关知识,在目前时间点[2017年5月21号]下,所掌握的技术水平有限,可能会存在不少知识理解不够深入或全面,望大家指出问题共同交流,在后续工作及学习中如发现本文内容与实际情况有所偏差,将会完善该博文内容. 1.第一弹:实现HTTPS系列第一弹之[http,https,www,web等概念简介] 博文链接:http://watchmen.blog.51cto.com/6091957/1922919 2.第二弹:实现HTTPS系列

基本概念理解(二)

基本概念理解 1.bool类型表示真值true和false.可以将算数类型的任何值赋值给bool独享.0值算数类型表示false,任何非0的值都表示true(为什么经常搞反,汗!).也可以直接用false或者true给bool型变量赋值. 2.C++建议每个内置变量都进行初始化.虽然这样做不是必须的,但是会更加容易和安全. 3.和其它变量不同,除非特别说明,在全局作用域中声明的const变量是定义该对象的文件的局部变量.此变量只存在于那个文件中,不能被其它文件访问. 通过指定const变量为ex

计算机网络入门概念理解

计算机网络入门概念理解 下面我来讲解一些关于网络的基础知识,这些知识有利于帮助我们今后学习TCP/IP协议相关知识打好基础. 诞生背景 首先从网络的诞生背景讲起.一开始计算机的运作是独立存在的(独立模式),每个计算机有各自的业务,用户需要在不同的计算机上执行特定的业务逻辑.用户采用卡带的方式将程序和数据输入计算机让计算机进行运算.之后出现了分时系统,分时系统具有"多终端,一主机 "的特点,由于分时系统CPU时间片轮转的特性让用户有了"一人一机"的错觉.70年代后计算

基本概念理解

基本概念理解: 1.编译器:就是将“一种语言(通常为高级语言)”翻译为“另一种语言(通常为低级语言)”的程序.一个现代编译器的主要工作流程:源代码 (source code) → 预处理器 (preprocessor) → 编译器 (compiler) → 目标代码 (object code) → 链接器(Linker) → 可执行程序 (executables) 2.集成开发环境(IDE,Integrated Development Environment )是用于提供程序开发环境的应用程序,

初识JAVA,对servlet的理解

一.WEB开发的简单理解 Web开发是一个指代网页或网站编写过程的广义术语.网页使用 HTML.CSS 和 JavaScript编写.这些页面可能是类似于文档的简单文本和图形.页面也可以是交互式的,或显示变化的信息.编写交互式服务器页面略微复杂一些,但 却可以实现更丰富的网站.如今的大多数页面都是交互式的,并提供了购物车.动态可视化甚至复杂的社交网络等现代在线服务. 通俗的说,web开发就是我们说的做网站.它分为网页部分,和逻辑部分也就是我们说的前台与后台.前台负责与用户的交互,显示数据.用到H

Zigbee 概念理解

1.IEEE802.15.4协议 IEEE802.15.4工作组致力于无线个人区域网络(wireless personal area network, WPAN)的标准化工作,制定的IEEE802.15.4标准规定了WPAN网络的物理层(PHY)和媒体访问层(MAC) 2.ZigBee协议 ZigBee协议由ZigBee Alliance制定. ZigBee协议在IEEE802.15.4标准规定的WPAN网络的物理层(PHY)和媒体访问层(MAC)的基础上又增加了传输层(TL).网络层(NWK)

eeplat开发平台概念理解

最近在学习eeplat的开发,发现当中有很多概念实在让人容易忘记,所以谨以此文记录一笔. eeplat的开发文档里说eeplat是元数据驱动的,这个元数据什么意思,在我理解就是后台的数据库里面的业务表.每个业务都由后台的业务数据库表驱动.比如说我们要管理人员信息,者可以看作是一个业务.那么支撑这个业务的肯定会有一张或好几张数据表,简单的就是一张,比如这个例子.我们会建立一个员工的数据表,里面包括员工的各种信息,包括名字,年龄,编号等等. 其他的概念还有服务,其实就是一些对后台数据的操作,比如 增

Servlet概念

Servlet概念 Servlet是javaWeb的三大组件之一,其他的两种分别是Filter(拦截器),Listener(观察者模式).我们的一个web项目需要部署在web服务器(例如tomcat)上,才能够接收浏览器等客户端的请求.服务器接收到请求之后,实际上是由Servlet组件来进行具体的业务逻辑处理,然后再对客户端进行响应.一个web项目中通常会有多个Servlet组件来处理不同的请求.例如在开发一个管理系统时,用户在进行登录的时候,服务器上将调用登录的Servlet来进行登录逻辑处理

Kubernetes重要概念理解

Kubernetes重要概念理解 kubernetes是目前最主流的容器编排工具,是下一代分布式架构的王者.2018年的kubernetes第一个版本1.10已经发布.下面整理一下,kubernetes的一些基本概念. kubernetes将集群中的机器划分为Master节点和工作节点(Node).其中Master节点上面运行着管理集群的一组进程kube-apiserver.kube-controller-manager,和kube-schedule,还有etcd服务.node作为集群中的工作节