Servlet是什么,第1张

Servlet(Server Applet)是Java Servlet的缩写,称为小服务程序或服务连接器。用Java编写的服务器端程序独立于平台和协议,主要功能是交互浏览和生成数据,生成动态Web内容。

Servlet(Server Applet)是Java Servlet的缩写,称为小服务程序或服务连接器。用Java编写的服务器端程序独立于平台和协议,主要功能是交互浏览和生成数据,生成动态Web内容。

Servlet是什么,Servlet是什么,第2张

狭义的Servlet指的是Java语言实现的接口,广义的Servlet指的是实现这个Servlet接口的任何类。一般人们把Servlet理解为后者。Servlet运行在支持Java的应用服务器上。原则上,servlet可以响应任何类型的请求,但是在大多数情况下,servlet只用于扩展基于HTTP协议的Web服务器。

JavaSoft的Java Web Server是第一个支持Servlet标准的。从那以后,其他一些基于Java的Web服务器开始支持标准servlets。

课程

Servlet是运行在服务器上的小程序。这个词是在Java applet的环境中创建的,Java applet是一个小程序,作为一个单独的文件与网页一起发送。它通常用于在客户端运行,结果是为用户计算或根据用户交互定位图形等服务。

服务器上需要一些程序,经常根据用户输入访问数据库。这些通常使用通用网关接口(CGI)应用程序来完成。但是在服务器上运行Java,这个程序可以用Java编程语言实现。在流量大的服务器上,JavaServlet的优势是比CGI程序快。每个用户的请求在单个程序中作为一个线程被激活,而不需要创建单独的进程,这意味着在服务器端处理请求的系统开销将显著降低。

实施程序

对Servlet技术最早的支持是JavaSoft的Java Web Server。此后,其他一些基于Java的网络服务器开始支持标准的Servlet API。Servlet的主要功能是交互浏览和修改数据,生成动态Web内容。这个过程是:

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

服务器向Servlet发送请求信息;;

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

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

Servlet看起来像普通的Java程序。Servlet导入属于Java Servlet API的特定包。因为它们是对象字节码,所以可以从网络上动态加载。可以说,servlets就像小程序到客户端到服务器。但是,因为servlets在服务器中运行,所以它们不需要图形用户界面。从这个意义上说,Servlet也叫做FacelessObject。

Servlet是Java编程语言中的一个类,用于扩展服务器的性能,服务器托管可以通过“请求-响应”编程模型访问的应用程序。虽然Servlet可以响应任何类型的请求,但它们通常只用于扩展网络服务器的应用程序。

名字

Servlet的命名可以看出sun命名的特点,比如Applet代表小应用;Scriptlet = Script+Applet,表示小脚本程序;同理,Servlet = Service+Applet就是小服务程序。

生存期

客户端请求Servlet;

将Servlet类装入内存;

实例化并调用init()方法初始化Servlet;

Service () (doGet()或doPost()是根据不同的请求方法调用的,除了doHead(),doPut(),doTrace(),doDelete(),doOptions(),destroy())。

加载并实例化Servlet。该操作通常是动态执行的。但是,服务器通常会提供一个管理选项,以便在服务器启动时强制加载和初始化特定的Servlet。

服务器创建一个Servlet实例

第一个客户端的请求到达服务器

服务器调用Servlet的init()方法(可以配置为在服务器创建Servlet实例时调用,并且

客户端请求到达服务器

服务器创建一个请求对象来处理客户端请求

服务器创建一个响应对象来响应客户端请求

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

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

service()方法使用响应对象的方法将响应发送回服务器,最后发送到客户端。Service()方法可以激活其他方法来处理请求,比如doGet()或者doPost()或者程序员自己开发的新方法。

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

下图显示了一个典型的Servlet生命周期方案:

1.到达服务器的第一个HTTP请求被委托给Servlet容器。

2.servlet容器在调用service()方法之前加载Servlet。

3.然后Servlet容器处理多个线程生成的多个请求,每个线程执行单个Servlet实例的service()方法。

工作模式

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

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

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

对比

与小程序的比较

相似之处:

*它们不是独立的应用程序,也没有main()方法。

*它们不是由用户或程序员调用,而是由另一个应用程序(容器)调用。

*它们都有一个生命周期,包括init()和destroy()方法。

差异:

* Applet有很好的图形界面(AWT),和浏览器一起运行在客户端。

* Servlet没有图形界面,运行在服务器端。

对比CGI

与传统的CGI和许多其他类似CGI的技术相比,Java Servlet更高效、更易用、更强大、更便携、更便宜。在未来的技术发展中,Servlet可能会完全取代CGI。

在传统的CGI中,每个请求都启动一个新的过程。如果CGI程序执行时间短,启动进程的开销可能会超过实际执行时间。在Servlet中,每个请求都由一个轻量级的Java线程处理(而不是一个重量级的操作系统进程)。

在传统的CGI中,如果对同一个CGI程序有n个并发请求,那么CGI程序的代码会在内存中重复加载n次。对于servlet,有n个线程处理请求,只需要一个servlet类代码。Servlet在性能优化上也比CGI有更多的选择。

*方便

Servlet提供了大量的实用程序例程,比如自动解析和解码HTML表单数据、读取和设置HTTP头、处理Cookie、跟踪会话状态等等。

*强大

在Servlet中,很多用传统CGI程序难以完成的任务都可以轻松完成。比如Servlet可以直接与Web服务器交互,而普通CGI程序则不能。Servlet还可以在程序间共享数据,便于实现数据库连接池等功能。

*便携性好

Servlet是用Java写的,Servlet API有完善的标准。因此,为IPlanet企业服务器编写的Servlet可以移植到Apache、MicrosoftIIS或WebStar上,而无需做任何实质性的更改。几乎所有主流服务器都直接或者通过插件支持Servlet。

*节省投资

不仅个人或小型网站有很多便宜甚至免费的Web服务器,对于现有的服务器,如果不支持Servlet,添加这些功能往往是免费的(或者只需要很少的投资)。

对比JSP

很多人不知道JSP和Servlet在应用上有什么区别。简单来说,SUN首先开发了Servlet,功能强大,系统设计先进。但是还是用老的CGI方法输出HTML语句,一句一句的输出,写修改HTML非常不方便。

Java Server Pages(JSP)是一种实现常见静态HTML和动态HTML混合编码的技术,JSP本质上不添加任何Servlet无法实现的功能。但是用JSP写静态HTML更方便,不再需要用println语句输出每一行HTML代码。更重要的是,随着内容和外观的分离,页面制作中不同性质的任务可以很容易的分离出来:比如HTML设计是由页面设计人员来完成的,空是留给Servlet程序员插入动态内容的。

后来SUN引入了类似ASP的嵌入式JSP,将JSP TAG嵌入到HTML语句中,大大简化和方便了网页的设计和修改。ASP、PHP、JSP等新的网络语言都是马赛克语言。这就是JSP和Servlet的区别。

从三层网络结构的角度看JSP和Servlet的区别,一个网络项目至少分为三层:数据层、业务层和表示层。当然可以更复杂。Servlet对于写业务层非常强大,但是对于写表示层非常不方便。JSP主要是为了方便编写表示层而设计的。也可以写业务层。习惯了ASP、PHP、CGI的朋友,往往会不自觉地把表示层和业务层混在一起。

根据SUN自己的推荐,JSP应该只存储与表示层相关的东西,也就是说应该只放输出的HTML网页。而所有的数据计算、数据分析、数据库连接处理都属于业务层,应该放在Java BEANS中。Java BEANS由JSP调用,实现两层的集成。

微软最近推出的DNA技术是ASP+COM/DCOM技术。完全类似于J SP+BEANS,所有表示层由ASP完成,所有业务层由COM/DCOM完成。集成是通过调用实现的。

使用这些组件技术只是因为ASP/JSP语言效率非常低。如果大量用户点击,纯SCRIPT语言很快就会达到功能极限,组件技术可以大大提高功能极限,加快执行速度。

另一方面,纯SCRIPT语言将表示层和业务层混在一起,修改不方便,代码不能重用。如果要修改一个地方,往往涉及十几页代码。使用组件技术,只能更改组件。

综上所述,Servlet是早期不完善的产品。写业务层很好,写表示层很臭,两层混在一起。

所以引入了JSP+BEAN,表示层用JSP写,业务层用BEAN写。SUN自己的意思是以后用JSP代替Servlet。这就是JSP和Servlet在技术更新上的区别。

但是,这并不是说学习Servlet没有用。其实应该先从Servlet开始,再到JSP,再到JSP+BEAN。

强调一下,学了JSP就不能用Java BEAN集成了,说明没学过。每个人都在JSP+BEAN上付出了更多的努力。

我们可以看到,当ASP+COM和JSP+BEAN采用组件技术时,所有的组件都是先编译,然后存储在内存中,然后快速执行。所以,经常吹嘘的Servlet/JSP的速度优势,即在执行之前先在内存中编译,就没有了。

相反,ASP+COM+IIS+NT是紧密集成的,应该会有更大的速度优势。再者,ASP+COM+IIS+NT效率很高,虽然有很多bug。

那么,为什么要用JSP+BEAN呢?因为Java前途无量。随着操作系统的竞争,应用软件的开发人员必须找到一种通用的开发语言来进行开发,Java称霸世界的时候到了。

本文简要分析了JSP和Servlet的区别以及Java Web开发的发展。随着机器速度的提高,Java的速度劣势可以很快克服。

版本介绍

版本日期JAVA EE/JDK版本功能Servlet 4.0年10月Java EE 8 HTTP 2 Servlet 3.1 2013年5月Java EE 7无阻塞I/O,HTTP协议升级机制Servlet 3.0 2009年12月Java EE 6,Java SE 6可插拔性,开发方便,异步Servlet,安全性,文件上传servlet 2.5年10月Java ee 5,Java se 5需要Java se 5,支持批注servlet 2.4年11月J2EE 1.4,J2SE 1.3可扩展标记语言使用可扩展标记语言模式小服务程序2.3 2001年8月J2EE 1.3,J2SE 1.2添加过滤器小服务程序2.2 1999年8月J2EE 1.2,J2SE 1.2成为J2EE的一部分,引入了独立的网络应用程序。战争文件Servlet 2.1在1998年11月没有指定第一个官方规范。增加了请求调度器,servlet contextservlet 2.0 JDK 1.1部分Java servlet开发工具包2.0 servlet 1.0 1997年6月

添加功能

Servlet 2.2:

介绍了自包含网络应用程序的概念。

servlet 2.3:

:2000年10月发布

Servlet API 2.3中最重要的变化是添加了过滤器

Servlet 2.3增加了过滤器和过滤器链的功能。引入了上下文和会话侦听器的概念,当上下文或会话被初始化或将要被释放时,以及当属性被绑定或未绑定到上下文或会话时,侦听器可以监视类。

servlet 2.4:

2003年11月推出

Servlet 2.4增加了几个有趣的特性,但是没有突出的新内容。相反,它花了更多的精力来审查和澄清一些现有的功能,并检查一些不精确的地方。

Servlet 2.4增加了新的最低要求、新的监控请求的方法、新的处理响应的方法、新的国际化支持、RequestDispatcher的几个进程、新的请求监听器类、会话描述以及新的基于模式并具有J2EE元素的发布描述符。本文档规范进行了全面、严格的修订,去除了一些可能影响跨平台发布的不明确因素。总之,这个规范增加了四个新类,七个新方法,一个新常量,不再建议使用一个类。

注意:改为Schema后,主要加强了两个功能:

(1)元素没有按顺序设置;

(2)更强有力的核查机制。

主要体现:

A.检查元素的值是否是合法值

B.检查元素的值是合法的文字字符还是数字字符

C.检查Servlet、Filter、EJB-ref和其他元素的名称是否是单一的

2.添加过滤器的四个设置:请求、转发、包含和错误。

添加请求侦听器、事件和请求属性侦听器、事件。

4.取消SingleThreadModel接口。当Servlet实现SingleThreadModel接口时,可以保证同一时间只有一个线程可以执行Servlet。

5.& lt欢迎文件列表。它可以是一个Servlet。

6.6增加了一些新方法。ServletRequest接口。

公共字符串GetLocalName();

公共字符串GetLocalAddr();

public int GetLocalPort();

public int getRemotePort()

Servlet 2.5:

Servlet 2.5于2005年9月发布

介绍Servlet 2.5中的一些变化;

1)基于最新的J2SE 5.0。

2)支持标注。

3)web . XML中的几种配置比较方便。

4)去掉了几个限制。

5)优化了一些例子

在不同版本的Servlet中,对侦听器的更改如下:

(1) Servlet 2.2和jsp1.1

添加侦听器:httpsessionbindinglistener

添加事件:HttpSessionBindingEvent

(2) Servlet 2.3和jsp1.2

添加侦听器:servletcontextlistener,servletcontextattributelistener

,HttpSessionListener,HttpSessionActivationListener,HttpSessionAttributeListener

添加事件:servletcontextevent、servletcontextattributeevent、http会话事件

(3) Servlet 2.4和jsp2.0

添加侦听器:servletrequestlistener,servletrequestattributelistener

添加事件:servletrequestevent,servletrequestattributeevent

Servlet 3.0

Servlet 3.0作为Java EE 6规范体系的成员,是随着Java EE 6规范一起发布的。该版本基于以前的版本(Servlet 2.5),提供了几个新功能来简化网络应用程序的开发和部署。几个特性的引入让开发人员非常兴奋,赢得了Java社区的好评:

异步处理支持:有了这个特性,Servlet线程不再需要一直阻塞,直到业务处理完毕,然后可以输出响应,最后Servlet线程结束。接收到请求后,Servlet线程可以将耗时的操作委托给另一个线程,并返回容器,而不生成响应。鉴于业务处理耗时,这将大大减少对服务器资源的占用,提高并发处理速度。

添加了注释支持:这个版本添加了几个注释来简化Servlet、Filter和Listener的声明,这使得web.xml部署描述文件从这个版本开始不再是强制性的。

可插拔支持:熟悉Struts2的开发人员会记住Struts 2与包括Spring在内的各种常见框架通过插件的集成特性。将相应的插件打包成JAR包放在类路径下,Struts2运行时可以自动加载这些插件。Servlet 3.0提供了类似的功能,开发者可以通过插件轻松扩展现有Web应用的功能,而无需修改原有的应用。

Servlet 4.0

从3.1到4.0,将是对Servlet协议的一个很大的改变,改变的关键点在于对HTTP/2的支持。HTTP2将是自上世纪末HTTP1.1标准化以来HTTP协议的第一个新版本。相比HTTP1.1,HTTP2会带来很多增强。在提案草案中,成伟列出了HTTP2的一些新特性,他希望在Servlet 4.0 API中实现,并向用户公开。这些新功能如下:

1.请求/响应复用2。流优先级3。服务器推送4。http 1.1从HTTP 1.1升级

规格

1.简化开发

2.易于部署

3.支持Web2.0原则

为了简化开发过程,Servlet 3.0引入了注释,使得web部署描述符web.xml不再是必须的选择。

可插拔性

当使用任何第三方框架时,比如Struts、JSF或Spring,我们需要在web.xml中添加相应的Servlet条目。这使得web描述符变得繁琐且难以维护。Servlet3.0新的可插拔特性使网络应用程序模块化,易于维护。web片段实现的可嵌入性减轻了开发人员的负担,不需要在web.xml中配置很多Servlet条目。

异步处理异步处理

另一个显著的变化是Servlet 3.0支持异步处理,这对AJAX应用程序非常有用。当一个Servlet创建一个线程来处理某些请求时,比如查询数据库或消息连接,这个线程必须等到获得所需的资源后才能执行其他操作。异步处理通过运行线程来执行其他操作来避免这种阻塞。

除了这里提到的特性之外,还对现有的应用编程接口进行了其他一些增强。文章末尾的部分将一个接一个地详细探讨这些特性。

除了这些新特性之外,Servlet 3.0还对现有的API进行了一些改进,我们将在本文末尾介绍这些改进。

注释在servletservlets中使用注释

Servlet 3.0的主要变化之一是支持注释。使用注释来定义Servlet和过滤器使得没有必要在web.xml中定义相应的条目..

@WebServlet

@WebServlet用于在web应用程序中定义一个Servlet。这个注释可以应用于继承HTTP的HttpServlet。这个标注中有很多属性,比如名字、urlPattern、initParams,我们可以通过用户的属性来定义Servlet的行为。必须指定urlPattern属性。

编程接口

HTTPServlet使用一个HTML表单来发送和接收数据。要创建一个HTTPServlet,扩展HttpServlet类,它是GenericServlet的一个子类,以一种特殊的方式处理HTML表单。HTML表单是由

init()方法

init()方法在Servlet的生命周期中只执行一次。它在服务器加载Servlet时执行。您可以将服务器配置为在服务器启动或客户端首次访问Servlet时加载Servlet。无论有多少客户端访问Servlet,init()都不会被重复执行。

默认的init()方法通常满足要求,但它也可以被自定义的init()方法覆盖,通常是管理服务器端资源。比如可以写一个自定义的init()只加载一次GIF图像,提高Servlet返回GIF图像和包含多个客户端请求的性能。另一个例子是初始化数据库连接。默认的init()方法设置Servlet的初始化参数,并使用它的ServletConfig对象参数启动配置,因此所有覆盖init()方法的Servlet都应该调用super.init()以确保这些任务仍然可以执行。在调用service()方法之前,请确保init()方法已完成。

(2)服务()方法

Service()方法是Servlet的核心。每次客户请求一个HttpServlet对象,都会调用该对象的service()方法,并发出& # 8221;请求& # 8221;(ServletRequest)对象和一个& # 8221;回应& # 8221;(ServletResponse)对象作为参数。HttpServlet中已存在Service()方法。默认的服务函数是调用HTTP请求的方法对应的do函数。例如,如果HTTP请求方法是GET,默认情况下会调用doGet()。对于servlet支持的HTTP方法,servlet应该覆盖do函数。因为HttpServlet.service()方法检查请求方法是否调用了适当的处理方法,所以没有必要重写service()方法。只需覆盖相应的do方法。

Servlet响应可以是以下类型:

输出流,由浏览器根据其内容类型(如文本/html)进行解释。

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

(3) doGet()方法

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

(4) doPost()方法

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

(5)破坏()方法

destroy()方法只执行一次,即当服务器停止并且Servlet被卸载时。通常,Servlet作为服务器进程的一部分被关闭。默认的destroy()方法通常满足要求,但也可以被覆盖,通常是管理服务器端资源。例如,如果Servlet在运行时累积统计信息,您可以编写一个destroy()方法,该方法用于在Servlet未加载时将统计信息保存在文件中。另一个例子是关闭数据库连接。

当服务器卸载Servlet时,将在所有service()方法调用完成后或在指定的时间间隔后调用destroy()方法。当Servlet运行service()方法时,可能会生成其他线程,因此请确保在调用destroy()方法时这些线程被终止或完成。

(6) getServletConfig()方法

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

(7) getServletInfo()方法

getServletInfo()方法是一个可选方法,它提供关于servlet的信息,如作者、版本和版权。

当服务器调用sevlet的service(),doGet()和doPost(),都需要“请求”和“响应”对象作为参数。请求对象提供关于请求的信息,而响应对象提供将响应信息返回给浏览器的通信方式。

javax.servlet包中的相关类是ServletResponse和ServletRequest,而javax.servlet.http包中的相关类是HttpServletRequest和HttpServletResponse。Servlet通过这些对象与服务器通信,最后与客户端通信。Servlet可以调用& # 8221;请求& # 8221;对象获取客户端环境、服务器环境的信息以及客户端提供的所有信息。Servlet可以调用Response对象的方法来发送响应,该响应已准备好发送回客户端。

DABAN RP主题是一个优秀的主题,极致后台体验,无插件,集成会员系统
白度搜_经验知识百科全书 » Servlet是什么

0条评论

发表评论

提供最优质的资源集合

立即查看 了解详情