深入理解Java Servlet与Web容器之间的关系

深入理解Java Servlet与Web容器之间的关系,第1张

 自从计算机软件开发进入网络时代 就开始涉及到通讯问题 在客户/服务器(也叫C/S应用)时期 每个软件都有自己的客户端和服务器端软件 并且客户端和服务器端之间的通讯协议差别也很大 后来随着互联网的发展 基于浏览器/服务器的应用逐渐成为主流 通讯协议也统一到HTTP协议 但是 在HTTP协议之上 如何处理来自客户端的请求信息 以及如何对请求进行回应 则经历了很长时间也没有统一下来 目前 对于这个问题的解决方案主要有两种 一个是CGI 另一个是Servlet

  CGI(Common Gateway Interface) 通用网关接口

 通用网关接口 简称CGI 是一种根据请求信息动态产生回应内容的技术 通过CGI Web 服务器可以将根据请求不同启动不同的外部程序 并将请求内容转发给该程序 在程序执行结束后 将执行结果作为回应返回给客户端 也就是说 对于每个请求 都要产生一个新的进程进行处理 因为每个进程都会占有很多服务器的资源和时间 这就导致服务器无法同时处理很多的并发请求 另外CGI程序都是与操作系统平台相关的 虽然在互联网爆发的初期 CGI为开发互联网应用做出了很大的贡献 但是随着技术的发展 开始逐渐衰落

  Servlet

 Servlet最初是在 年由James Gosling 提出的 因为使用该技术需要复杂的Web服务器支持 所以当时并没有得到重视 也就放弃了 后来随着Web应用复杂度的提升 并要求提供更高的并发处理能力 Servlet被重新捡起 并在Java平台上得到实现 现在提起Servlet 指的都是Java Servlet Java Servlet要求必须运行在Web服务器当中 与Web服务器之间属于分工和互补关系 确切的说 在实际运行的时候Java Servlet与Web服务器会融为一体 如同一个程序一样运行在同一个Java虚拟机(JVM)当中 与CGI不同的是 Servlet对每个请求都是单独启动一个线程 而不是进程 这种处理方式大幅度地降低了系统里的进程数量 提高了系统的并发处理能力 另外因为Java Servlet是运行在虚拟机之上的 也就解决了跨平台问题 如果没有Servlet的出现 也就没有互联网的今天

 在Servlet出现之后 随着使用范围的扩大 人们发现了它的一个很大的一个弊端 那就是为了能够输出HTML格式内容 需要编写大量重复代码 造成不必要的重复劳动 为了解决这个问题 基于Servlet技术产生了JavaServet Pages技术 也就是JSP Servlet和JSP两者分工协作 Servlet侧重于解决运算和业务逻辑问题 JSP则侧重于解决展示问题 Servlet与JSP一起为Web应用开发带来了巨大的贡献 后来出现的众多Java Web应用开发框架都是基于这两种技术的 更确切的说 都是基于Servlet技术的

  Java Servlet与Web容器之间的关系

 Java是一种动态加载和运行的语言 也就是说当应用程序持有一个类的地址(CLASSPATH)和名称(包名和类名)的情况下 可以在程序运行期间任何时候加载这个类 并创建和使用该类的对象 Servlet就是基于这个机制与Web容器融合在一起的 目前已知的所有支持Java Servlet的Web容器都是采用Java开发的 当Web容器接收到来自客户端的请求信息之后 会根据URL中的Web元件地址信息到Servlet队列中查找对应的Servlet对象 如果找到则直接使用 如果没有找到则加载对应的类 并创建对象 也就是说 Servlet对象是在第一次被使用的时候才创建的 并且一旦创建就会被反复使用 不再创建新的对象 所有创建出的Servlet对象会在Web服务器停止运行的时候统一进行垃圾回收

 为了解决客户端请求地址与Java Servlet之间对应关系问题 Web容器需要一个用来描述这种对应关系的文件 一般是web xml文件 如果一个Web应用程序中存在很多个Servlet 那么web xml会变得非常庞大 在Servlet 规范推出之后 允许在Servlet代码中使用声明式语法来代替web xml中的描述信息 这才让web xml瘦身下来 下图是这个过程的一个示意图

 

lishixinzhi/Article/program/Java/hx/201311/26848

平时我们经常看到各种容器名称:Servlet容器、WEB容器、Java WEB容器、Java EE容器等,还有各种服务器名称:应用服务器、WEB服务器、WEB应用服务器、JavaWEB应用服务器、Java EE服务器等,这么多相似名称,难以弄明白它们之间的区别与联系。

下面我们尝试从它们的定义中,区分它们,找出他们之间的联系,最后通过Apache、nginx、tomcat等举例说明容器以及服务器的联系。

如上图,我们先来看下容器与服务器的联系:容器是位于应用程序/组件和服务器平台之间的接口集合,使得应用程序/组件可以方便部署到服务器上运行。

容器通常理解就是装东西的,我们这里说技术上的容器就是 可以部署应用程序,并在上面运行的环境

一般来说,它处理屏蔽了服务器平台的复杂性,使得应用程序在它的基础上可以方便快捷的部署;而对于应用程序来说,它就是位于 应用程序和平台之间的接口集合

容器管理组件的生命周期,向应用程序组件分派请求,并提供与上下文数据(如关于当前请求的信息)的接口。

Servlet:属于Java EE重要技术规范,构建了"接收请求--调用servlet程序处理--返回响应"基本模型。

Servlet程序:Java提供了开发Servlet程序的API,该API可以说Servlet容器的一部分,它对接应用程序与Servlet容器;

Servlet容器:就是实现了Servlet技术规范的部署环境,它可以部署运行Servlet程序。

WEB容器:可以部署多个WEB应用程序的环境。web容器给处于其中的应用程序组件(jsp,servlet)提供一个环境,使JSP,Servlet直接跟容器中的环境变量交互,不必关注其他系统问题。

Java WEB容器:实现了 Java EE规定的WEB应用技术规范 的部署环境。

Java EE WEB应用技术规范:Servlet、JSP(JavaServer Pages)、Java WebSocket等。

所以,完整的Java WEB容器包含Servlet容器。

服务器是提供计算服务的设备。由于服务器需要响应服务请求,并进行处理,因此一般来说服务器应具备承担服务并且保障服务的能力。

简单来说,服务器是 提供某些服务的设备

应用程序:是指为针对使用者的某种应用目的所编写的软件。

应用服务器:就是运行应用程序,提供应用程序所实现服务的设备。

通常来说, 服务器端的应用程序实现各种业务逻辑,应用服务器通过各种协议把这些业务逻辑曝露给客户端的程序 。它提供了访问商业逻辑的途径,以供客户端应用程序使用。应用服务器使用此业务逻辑就像调用对象的一个方法一样。

WEB:现广泛译作网络、互联网等技术领域。表现为三种形式,即超文本(hypertext)、超媒体(hypermedia)、超文本传输协议(HTTP)等。

WEB服务器:或者叫 HTTP Server ,主要用于操作Http请求,包括接受客户端的请求以及响应。它可以处理请求,也可以将请求转发至其他服务器。

简单来说,WEB服务器是提供网上信息浏览等WEB服务的设备。 Apache、Nginx、IIS是目前最主流的三个Web服务器。可以用它们来构建WEB应用服务器,通常它们发现一个请求是动态请求,就通过CGI、ISAPI、特殊管道等协议接口调用后面的应用服务器来协同处理请求。如Nginx通过fastCGI模块来调用ZendEngine执行PHP应用来处理PHP请求。

上面我们 把应用服务器和WEB服务器 严格区分:应用服务器通过应用程序接口(通常是网络请求API)把业务逻辑暴露给客户端应用程序。而WEB服务器通过HTTP提供静态内容给浏览器等客户端。

如果不严格区分,应用服务器包含WEB服务器,因为WEB服务器是WEB服务应用程序实现的。

WEB应用服务器:结合应用服务器和WEB服务器,可以说,它是带应用服务器的Web服务器,接收HTTP请求后,既能返回页面等静态内容,又能处理业务逻辑返回数据。

Tomcat、Jetty、WebLogic、Websphere、JBoss都是Java(EE) WEB应用服务器。拿最常用的Tomcat来说,Tomcat是Java Servlet,JavaServerPages,Java Expression Language和JavaWebSocket(Java EE)技术的开源实现。

Java EE服务器是实现Java EE技术规范,并提供标准Java EE服务的应用程序服务器。

Java EE服务器有时称为应用服务器,因为它们允许您向客户端提供应用数据,就像Web服务器向Web浏览器提供Web页面一样。

一个典型的JavaEE系统可以由两部分构成首先是Web Server 用于处理静态资源,然后是JavaEE Application Server 用于处理业务的动态资源。而这两部分可以是单独的服务器例如Nginx+WebSphere也可以在一个服务器上完成比如Tomcat(Tomcat即可以处理静态资源又可以处理动态的Servlet)。

从概念上讲:Web服务器是提供WWW服务的程序;Web容器是提供给开发者的框架;Web应用程序服务器内容丰富得多,既可用各厂商通常遵循一定的工业标准并自定义扩展功能而成,也可以利用开源组件轻量级拼装打造。

tomcat严格上说是servlet和jsp容器,但也有人叫它服务器,这没什么不行,pageencoding是设定这个JSP用什么编码保存,默认是iso-8859-1,一般改成UTF-8,便于网络传输,charset有点像一大堆编码的集合,可以对很多编码进行操作,这就是我对你的问题的理解

1、weblogic

WebLogic是美国bea公司出品的一个application server确切的说是一个基于j2ee架构的中间件。BEA WebLogic是用于开发、集成、部署和管理大型分布式Web应用、网络应用和数据库应用的Java应用服务器。将Java的动态功能和Java Enterprise标准的安全性引入大型网络应用的开发、集成、部署和管理之中。

2、webSphere

WebSphere是 IBM 的集成软件平台。它包含了编写、运行和监视全天候的工业强度的随需应变 Web 应用程序和跨平台、跨产品解决方案所需要的整个中间件基础设施。

如服务器、服务和工具。WebSphere 提供了可靠、灵活和健壮的集成软件。

3、JBoss

JBoss是一个管理EJB的容器和服务器,支持EJB 11、EJB 20和EJB30的规范。但JBoss核心服务不包括支持servlet/JSP的WEB容器,一般与Tomcat或Jetty绑定使用。2006年,Jboss公司被Redhat公司收购。

4、 Apache

Apache源于NCSAhttpd服务器,经过多次修改,成为世界上最流行的Web服务器软件之一。

Apache是自由软件,所以不断有人来为它开发新的功能、新的特性、修改原来的缺陷。Apache的特点是简单、速度快、性能稳定,并可做代理服务器来使用。

本来它只用于小型或试验Internet网络,后来逐步扩充到各种Unix系统中,尤其对Linux的支持相当完美。

Apache是以进程为基础的结构,进程要比线程消耗更多的系统开支,不太适合于多处理器环境,因此,在一个Apache Web站点扩容时,通常是增加服务器或扩充群集节点而不是增加处理器。

到目前为止Apache仍然是世界上用的最多的Web服务器,世界上很多著名的网站都是Apache的产物,它的成功之处主要在于它的源代码开放、有一支开放的开发队伍、支持跨平台的应用(可以运行在几乎所有的Unix、Windows、Linux系统平台上)以及它的可移植性等方面。

5、 IIS

Microsoft的Web服务器产品为InternetInformation Server (IIS), IIS 是允许在公共Intranet或Internet上发布信息的Web服务器。

IIS是目前最流行的Web服务器产品之一,很多著名的网站都是建立在IIS的平台上。IIS提供了一个图形界面的管理工具,称为 Internet服务管理器,可用于监视配置和控制Internet服务。

IIS是一种Web服务组件,其中包括Web服务器、FTP服务器、NNTP服务器和SMTP服务器,分别用于网页浏览、文件传输、新闻服务和邮件发送等方面,它使得在网络(包括互联网和局域网)上发布信息成了一件很容易的事。

它提供ISAPI(IntranetServer API)作为扩展Web服务器功能的编程接口;同时它还提供一个Internet数据库连接器,可以实现对数据库的查询和更新。

Web服务器的缺陷是什么?Java是怎么样解决这个缺陷的?因为web服务器是被设计用来向客户端提供HTTP服务的,它只能向客户端提供静态的网页内容,不能创建动态服务器端内容。java解决方案servlet和web容器对请求和响应的处理如下:1客户端向web服务器发起一个HTTP请求;2HTTP请求被WEB服务器接受,如果请求是静态页面,则由web服务器负责处理,如果请求是javaweb主件,则交给Web容器。Web容器可以在主机的同一个进程、不同的行程或其他的web服务器主机的进程中启动。3web容器根据Servlet的配置文件确定调用具体的Servlet类,并把request对象、response对象传给它。4Servlet通过request对象知道客户端的使用者是谁,客户的请求信息是什么和其他的一些信息。Servlet处理完请求后吧要返回的信息放入response对象返回到客户端。5一旦Servlet完成请求的处理,web容器就会刷新response。并把控制权返回给web服务器。

Web服务器的基本功能就是提供Web信息浏览服务。它只需支持HTTP协议、HTML文档格式及URL。与客户端的网络浏览器配合。因为Web服务器主要支持的协议就是HTTP,所以通常情况下HTTP服务器和WEB服务器是相等的。

通俗的讲,Web服务器传送(serves)页面使浏览器可以浏览,然而应用程序服务器提供的是客户端应用程序可以调用(call)的方法(methods)。确切一点,你可以说:Web服务器专门处理HTTP请求(request),但是应用程序服务器是通过很多协议来为应用程序提供(serves)商业逻辑 (business logic)。

以Java EE为例,Web服务器主要是处理静态页面处理和作为 Servlet容器,解释和执行servlet/JSP,而应用服务器是运行业务逻辑的,主要是EJB、 JNDI和JMX API等J2EE API方面的,还包含事务处理、数据库连接等功能,所以在企业级应用中,应用服务器提供的功能比WEB服务器强大的多。

以这样的定义,IIS、Apache、Tomcat都可以属于Web服务器,Weblogic、WebSphere都属于应用服务器。

下列常见的javaweb服务器软件,哪些是收费的Resin提供了最快的jsp/servlets运行平台。

8、Jetty是一个开源的servlet容器,它为基于Java的web内容,例如JSP和servlet提供运行环境。

9、BEAWebLogic是用于开发、集成、部署和管理大型分布式Web应用、网络应用和数据库应用的Java应用服务器。

10、Tomcat是Apache软件基金会的Jakarta项目中的一个核心项目,由Apache、Sun和其他一些公司及个人共同开发而成。

常用的web服务器软件有哪些

1IIS

IIS是英文InternetInformationServer的缩写,译成中文就是"Internet信息服务"的意思。它是微软公司主推的服务器,最新的版本是Windows2008里面包含的IIS7,IIS与WindowServer完全集成在一起,因而用户能够利用WindowsServer和NTFS内置的安全特性,建立强大,灵活而安全的Internet和Intranet站点。

2ApacheApache

ApacheApache在世界上的排名是第一的,它可以运行在几乎所有广泛使用的计算机平台上。Apache源于NCSAhttpd服务器,经过多次修改,不仅简单、速度快、而且性能稳定,还可以用来做代理服务器。

3Nginx

Nginx不仅是一个小巧且高效的HTTP服务器,也可以做一个高效的负载均衡反向代理,通过它接受用户的请求并分发到多个Mongrel进程可以极大提高Rails应用的并发能力。

4Zeus

Zeus是一个运行于Unix下的非常优秀的WebServer,据说性能超过Apache,是效率最高的WebServer之一。

5Sun

Sun的Java系统Web服务器也就是以前的SunONEWebServer。主要出现在那些运行Sun的Solaris操作系统的关键任务级Web服务器上。它最新的版本号是61,可以支持x86版本Solaris,RedHatLinux,HP-UX11i,IBMAIX,甚至可以支持Windows,但它的大多数用户都选择了SPARC版本的Solaris操作系统。

Web服务器软件有哪些。简单点的?

ApacheApache是世界使用排名第一的Web服务器软件。它可以运行在几乎所有广泛使用的计算机平台上。Apache源于NCSAhttpd服务器,经过多次修改,成为世界上最流行的Web服务器软件之一。Apache取自"apatchyserver"的读音,意思是充满补丁的服务器,因为它是自由软件,所以不断有人来为它开发新的功能、新的特性、修改原来的缺陷。Apache的特点是简单、速度快、性能稳定,并可做代理服务器来使用。IIS是英文InternetInformationServer的缩写,译成中文就是"Internet信息服务"的意思。它是微软公司主推的服务器,最新的版本是Windows2008里面包含的IIS7,IIS与WindowServer完全集成在一起,因而用户能够利用WindowsServer和NTFS内置的安全特性,建立强大,灵活而安全的Internet和Intranet站点。GFEGoogle的web服务器,用户数量激增。目前紧逼iis。Nginx不仅是一个小巧且高效的HTTP服务器,也可以做一个高效的负载均衡反向代理,通过它接受用户的请求并分发到多个Mongrel进程可以极大提高Rails应用的并发能力。Lighttpd是由德国人JanKneschke领导开发的,基于BSD许可的开源WEB服务器软件,其根本的目的是提供一个专门针对高性能网站,安全、快速、兼容性好并且灵活的webserver环境。具有非常低的内存开销,CPU占用率低,效能好,以及丰富的模块等特点。Lighttpd是众多OpenSource轻量级的webserver中较为优秀的一个。支持FastCGI,CGI,Auth,输出压缩,URL重写,Alias等重要功能。Zeus是一个运行于Unix下的非常优秀的WebServer,据说性能超过Apache,是效率最高的WebServer之一。Sun的Java系统Web服务器也就是以前的SunONEWebServer。主要出现在那些运行Sun的Solaris操作系统的关键任务级Web服务器上。它最新的版本号是61,可以支持x86版本Solaris,RedHatLinux,HP-UX11i,IBMAIX,甚至可以支持Windows,但它的大多数用户都选择了SPARC版本的Solaris操作系统。Resin提供了最快的jsp/servlets运行平台。在java和javascript的支持下,Resin可以为任务灵活选用合适的开发语言。Resin的一种先进的语言XSL可以使得形式和内容相分离。Jetty是一个开源的servlet容器,它为基于Java的web内容,例如JSP和servlet提供运行环境。Jetty是使用Java语言编写的,它的API以一组JAR包的形式发布。开发人员可以将Jetty容器实例化成一个对象,可以迅速为一些独立运行的Java应用提供网络和web连接。BEAWebLogic是用于开发、集成、部署和管理大型分布式Web应用、网络应用和数据库应用的Java应用服务器。将Java的动态功能和JavaEnterprise标准的安全性引入大型网络应用的开发、集成、部署和管理之中。BEAWebLogicServer拥有处理关键Web应用系统问题所需的性能、可扩展性和高可用性。Tomcat是Apache软件基金会的Jakarta项目中的一个核心项目,由Apache、Sun和其他一些公司及个人共同开发而成。由于有了Sun的参与和支持,最新的Servlet和JSP规范总是能在Tomcat中得到体现。因为Tomcat技术先进、性能稳定,而且免费,因而深受Java爱好者的喜爱并得到了部分软件开发商的认可,成为目前比较流行的Web应用服务器。

DABAN RP主题是一个优秀的主题,极致后台体验,无插件,集成会员系统
网站模板库 » 深入理解Java Servlet与Web容器之间的关系

0条评论

发表评论

提供最优质的资源集合

立即查看 了解详情