JAVA WEB基础知识(摘抄)

一、WEB服务器与应用程序服务器

1.Web服务器

处理HTTP请求(request),响应(response)HTML页面。

2.应用程序服务器

提供的是客户端应用程序可以调用的方法,即通过很多协议来为应用程序提供 (serves)商业逻辑 (business logic)。

应用程序服务器的功能:

安全服务(Security Services) 
状态和会话管理(State and Session Management) 

负载平衡和失败恢复(Load Banlancing and Fail-Over)

业务和处理逻辑(Business and Processing Logic) 

胖客户访问服务器组件(Rich-Client Access to Server Components) 

胖客户可以直接访问服务器端组件。例如Java applet可以请求服务器实例化一个组件,然后就可以调用其方法。通常的执行顺序是:连接服务器,调用方法获得数据结果集,断开连接,显示数据给用户并允许对数据操作,执行本地数据更新,连接服务器,发送数据更新给服务器,执行服务器上数据更新,最后将数据存入数据库。 

HTML生成 

纯的瘦客户程序不能直接与服务器端组件通信,没有办法用客户浏览器的HTML或ECMA脚本交换结果集。这意味着服务器端需要另一个组件来生成和处理HTML。应用程序服务器必须解码(decode)一个URL,来决定执行哪一个组件。该组件访问数据库或其他组件,获得结果集,将结果集包装为HTML(或XML),再将其返回给浏览器。应用程序服务器上的HTML生成组件变成了业务逻辑组件的客户。 
一旦页面被返回给浏览器,我们期待用户更改数据并提交回应用程序服务器。返回给服务器的数据可以作为URL参数(GET),通过表单字段(POST),或者通过cookie。服务器从HTTP请求中获取数据,使其为服务器端被调用的组件使用。 

数据访问 

事务管理(Transaction Management) 

连接池(Connection Pooling) 

  当页面被提交,数据被更新时,服务器必须连接数据库以完成工作。如果用户每次提交页面时都要执行数据库连接和断开,系统的性能和扩展性就会变得很差,因为在一个事务周期中建立到数据库的连接是一个开销相当大的操作。一个解决方案是当用户登录时建立连接,而当用户离开或超时时断开连接。但这个方案显然缺乏可扩展性,如果5000个用户同时登录,那么就需要5000个数据库连接。 
  应用程序服务器不为每一个用户保持单独连接。实际上,它维护了一个连接池,供所有服务器端组件共享。如果用户需要更新数据,相应组件就会请求服务器从连接池中分配一个可用连接,当所有的更新被完成后,组件负责通知服务器是否所有操作都成功。当一个事务结束后,连接被立刻释放。 

线程池和实例池(Thread Pooling and Instance Pooling) 

高端的应用程序服务器还提供线程池和实例池。因为对于线程或者组件实例而言,开销最大的操作来自创建和实例化过程。线程池和实例池可以提供更好的性能,线程和组件实例可以立刻被服务器所使用。但如果组件是有状态的,或者线程不能被快速释放,线程池和实例池机制将不能发挥其优点。

3.实际应用模式

现在大多数应用程序服务器也包含了Web服务器,这就意味着可以把Web服务器当作是应用程序服务器的一个子集(subset)。虽然应 用程序服务器包含了Web服务器的功能,但是开发者很少把应用程序服务器部署(deploy)成这种功能(capacity)(译者注:这种功能是指既有 应用程序服务器的功能又有Web服务器的功能)。相反,如果需要,他们通常会把Web服务器独立配置,和应用程序服务器一前一后。这种功能的分离有助于提 高性能(简单的Web请求(request)就不会影响应用程序服务器了),分开配置(专门的Web服务器,集群(clustering)等等)。

4.应用

IIS、Apache、Tomcat都可以属于Web服务器,Weblogic、WebSphere都属于应用服务器。

Apache是纯粹的web服务器,而TomcatIIS因为具有了解释执行服务器端代码的能力,可以称作为轻量级应用服务器或带有服务器功能的Web服务器。

二、C/S模型

1.三层C/S模型

 

 

。客户层(client tier) 用户接口和用户请求的发出地,典型应用是网络浏览器和胖客户(如Java程序) 
。服务器层(server tier) 典型应用是Web服务器和运行业务代码的应用程序服务器 
。数据层(data tier) 典型应用是关系型数据库和其他后端(back-end)数据资源, 如 Oracle和SAP、 R/3等 

三层体系结构中,客户(请求信息)、程序(处理请求)和数据(被操作)被物理地隔离。

三层结构是个更灵活的体系结构,它把显示逻辑从业务逻辑中分离出来,这就意味着业务代码是独立的,可以不关心怎样显示和在哪里显示。

业务逻辑层现在处于中间层,不需要关心由哪种类型的客户来显示数据,也可以与后端系统保持相对独立性,有利于系统扩展

三层结构具有更好的移植性,可以跨不同类型的平台工作,允许用户请求在多个服务器间进行负载平衡。

三层结构中安全性也更易于实现,因为应用程序已经同客户隔离。

2.与二层的比较

 

在传统的两层客户/服务器结构(two-tier client-server architecture)下,客户直接连接到数据库,中间不需要通过Web服务器或者其他服务器。这在数据库处理和许可方面都是比较昂贵的,每个客户都需要连接到数据库,都需要访问数据库的许可。

而在三层结构中,多个客户可以访问一个Web服务器,而由后者维护与数据库的共享连接,因此只要更少的数据库许可和数据库处理开销。

图中可以看到在两层结构中,每个客户都有一个到数据库的连接,这意味着当用户在读取或输入数据时,数据库连接实际处于空闲状态。而三层结构在数据库连接的使用上效率更高,由于数据库连接被共享,因此可以用更少的数据库连接支持更多的用户。数据库连接被更高效地利用,通过共享连接的数据流相对更连续。另外,数据库的连接可以一直保持直到应用程序结束,因为用户是登录到位于服务器的应用程序上而不是数据库上。

 

三、JSP(Java Server Pages)

JSP(JavaServer Pages)是一种动态页面技术,它的主要目的是将表示逻辑从Servlet中分离出来。
JSP页面由HTML代码和嵌入其中的Java代码所组成。服务器在页面被客户端请求以后对这些Java代码进行处理,然后将生成的HTML页面返回给客户端的浏览器。Servlet是JSP的技术基础,而且大型的Web应用程序的开发需要Java Servlet和JSP配合才能完成。

用JSP实现客户端和服务器端交互的基本流程如下图:

首先,用户在客户端(浏览器)发出的请求信息被存储在Request对象中并发送给Web服务器,JSP引擎(通常捆绑在Web服务器上)根据JSP文件的指示处理Request对象,或者根据实际需要将Request对象转发给由JSP文件所指定的其他的服务器端组件(如Servlet组件、JavaBean组件或EJB组件等)处理。处理结果则被以Response对象的方式返回给JSP引擎,JSP引擎和Web服务器根据Response对象最终生成JSP页面(JSP Pages),返回给客户端浏览器,这也是用户最终看到的内容。用于客户和服务器之间的通信协议最常用的是HTTP,此外也可以使用特定的私有协议。 

在技术实现细节上,JSP的实现实际上借助了Servlet技术,系统在首次载入JSP时自动将其编译成内部的Servlet,JSP对Request对象和Response对象(以及其他隐含对象)的处理最终都是由其对应的Servlet来完成的。对于JSP和Servlet这两种相辅相成的技术,目前比较通用的运用手段是:决定显示页面内容的HTML置于JSP中;而决定显示逻辑和控制的Java代码则置于Servlet中,这种划分可以比较清晰地界定网页开发人员和应用程序开发人员的工作领域和技能领域。

四、Servlets

Servlets是用Java语言实现的独立于协议和平台的服务器端组件,它动态扩展了支持Java的服务器。

Servlets被设计在请求/应答(Request/Response)处理模式下工作,在该模式下,客户向服务器发送请求消息,服务器则通过发送应答消息予以回复。

在通常情况下,请求和其相关应答可以反映请求时刻客户和服务器的状态,而客户和服务器之间连接的状态无法在多个请求/应答之间保存,而Servlet所提供的会话(Session)机制则可以在多次请求/应答之间保存会话信息。

Servlet运行于Servlet容器中。

 

 

 

 

 参考

http://stacker3520.iteye.com/blog/1511906

http://oss.org.cn/ossdocs/middleware/application_server/1/a1.html

posted @ 2013-11-13 17:23  任者  阅读(337)  评论(0编辑  收藏  举报