第1章 Java Web开发技术概述
J2EE(Java 2 Platform,Enterprise Edition)平台建立在J2SE(Java 2 Platform,Standard Edition)的基础上,为企业级应用提供了完整,稳定,安全和快速的Java平台.J2EE平台提供的Web开发技术主要支持两类软件的开发和应用,一类是做高级信息系统框架的Web应用服务器(Web application server),另一类是在Web应用服务器上运行的Web应用(Web application).
本章首先分析了J2EE体系结构,然后在此基础上介绍了容器,组件,Web应用,J2EE应用等与Java Web开发技术密切相关的基本概念.最后,阐述了组成J2EE体系结构的各层所应用的Java Web开发技术,运行原理以及所提供的各种服务.
1.1 J2EE体系结构
J2EE体系结构定义了4个不同的层,自上而下的方向分别是:客户层(client tier),表示逻辑层(presentation logic tier)也称为Web层(Web tier),业务层(business tier)和数据层(data tier).
1.概述
J2EE体系结构如图1.1所示.与最终用户进行交互的前端表示组件在逻辑上被划分到了客户层,而提供数据存储 与访问功能的组件被划分到了数据层.另一方面,在逻辑上驻留在前端与后端之间的中间层可能由一个表示逻辑层和一个业务层组成.表示逻辑层包括基于Internet协议和Web协议(HTTP,HTTPS, HTML和XML)提供应用功能的组件,业务层由捕获企业业务逻辑的组件组成,这两个层在逻辑上可划分为完全分离的两层,每一个分离的层都是独立的,从而使J2EE支持分布式4层(或者n层)应用.J2EE是一个灵活的结构,它不将开发人员锁定到特定数量的层上,并且不详细规定对于这些逻辑分组的物理分离.在网络计算环境上,一个普通的应用可以在一台计算机上同时运行表示逻辑层和业务层(甚至可以包括数据层),而高级的应用可以在若干台计算机上从物理上分隔每一层.
2.J2EE应用
随着Web和Internet的发展,越来越多的企业开始开发与部署基于Web的企业内部网和外部网,而J2EE为基于Web的企业应用提供了强有力的支持.
在Web环境下,术语"企业(enterprise)"描述的是依照一组公共规则进行运作的任何组织.从广义上说,"J2EE应用(J2EE application)"只是特定于企业的软件程序,它基于控制组织的一般规则中的某一部分来提供某种形式的功能.例如,企业可以使用J2EE创建自动化的购货订单处理应用,而大学则可以使用J2EE来构建学生选课系统.
J2EE体系结构
术语"企业应用(enterprise application)"与"分布式应用(distributed application)"的含义是相同的,因为每一个为企业构建的应用都是以某种方式分布在网络上的."企业应用"只是另一种用于描述分布式多层应用的方法,这种应用分散在组织机构的网络基础结构的不同层上.
从组件开发的视角看,J2EE支持简化的,基于组件的开发模型.在这种模型中,企业应用是通过使用Java语言编写的重用软件组织进行组装而成的.J2EE是使用Java构建新型分布式多层应用的事实标准,是完全基于J2SE的.也就是说,J2EE实际上是在J2SE之上加入了大量的企业级API和功能,从企业应用开发中提取关键要素,进而使开发人员能够简单而有效地创建广泛的分布式应用.
从开发层次上看,J2EE是基于分布式多层应用模型的.在这种模型中,应用功能在逻辑上分布在联网计算环境中各个级别或各个层上,每一层表示大多数企业应用所共有的相关概念集合.也就是说,J2EE应用由软件组件构成,而这些软件组件根据它们在整个应用结构中所起的作用进行了分组,J2EE组件在其对应的层上部署,并且在对应层的容器中运行.容器能够提供标准的服务,同时使组件能够 访问对应层的API.
分布式多层应用(Distributed Multitiered Application)描述的是其各部分的软件组件分布在网络各个不同的层或计算级别上的软件应用.多层结构是J2EE的核心,在多层结构中,组成应用的各种组件在逻辑上是分离的或者是分布式的,跨越网络计算环境的各个级别或各层.多层应用在逻辑上对组件进行分组的依据是这些组件在整个应用结构中执行的功能,所以这里的"层"代表功能的逻辑层或逻辑级别.
1.2 J2EE容器和组件
一般地,"Web应用"可以定义为:一个由 HTML/XML文档,Java Servlet,JSP(Java Server Pages),JSTL(Java Server Pages Standard Tag Library),类以及其他任何种类文件可以捆绑起来,并在来自多个厂商的多个Web容器上运行的Web资源构成的集合.可以将Web应用从一个服务器移到另外一个服务器,或者移动到同一服务器的不同位置,而不需要对组成Web应用的任何种类的文件作任何改动.
1.2.1 容器
"容器(container)"指的是提供特定程序组件服务的标准化运行时环境,通过这些组件,可以在任何供应商提供的J2EE平台上得到所期望的服务.容器的作用是为组件提供与部署,执行,生命周期管理,安全和其他组件需求相关的服务.此外,不同类型的容器明确地为它们管理的各种类型的组件提供附加服务.例如,J2EE Web容器都提供响应 客户请求,执行请求时间的处理,以及将结果返回到客户端的运行时环境支持.J2EE容器还负责管理某些基本服务,像诸如组件的生命周期,数据库连接资源的共享,数据持久性等.
一般地,软件开发人员只要开发出满足J2EE应用需要的组件并能安装在容器内就可以了.程序组件的安装过程包括设置各个组件在J2EE应用服务器中的参数,以及设置J2EE应用服务器本身,这些设置决定了在底层由J2EE服务器提供的多种服务(例如,安全,交易管理,JNDI查寻和远程方法调用等).
J2EE平台对每一种主要的组件类型都定义了相应的容器类型.J2EE平台由Applet容器和应用客户端容器(application client container),Web容器( Servlet和JSP容器)和EJB容器(Enterprise JavaBeans Container)等4种类型的程序容器组成.
EJB容器——为Enterprise JavaBean组件提供运行时环境,它对应于业务层和数据 访问层,主要负责数据处理以及和数据库或其他Java程序的通信.
Web容器——管理JSP和 Servlet等Web组件的运行,主要负责Web应用和浏览器的通信,它对应于表示层.
应用客户端容器——负责Web应用在客户端组件的运行,它对应于用户界面层.
Applet容器——负责在Web浏览器和Java插件(Java Plug-in)上运行Java Applet程序,它对应于用户界面层.
每种容器内都使用相关的各种Java Web编程技术.这些技术包括应用组件技术(例如, Servlet,JSP,EJB等技术构成了应用的主体),应用服务技术(例如,JDBC,JNDI等服务保证组件具有稳定的运行时环境),通信技术(例如,RMI,JavaMail等技术在平台底层实现机器和应用程序之间的信息传递)等3类.
1.2.2 组件
为了降低软件开发成本,适应企业快速发展的需求,J2EE平台提供了基于组件的方式设计,开发,组装和部署企业应用系统.按照这种方式开发出来的J2EE组件,不依赖于某个特定厂商提供的产品或者API.不管是开发商还是最终用户,都有最大的自由去选择那些能更好地满足业务或技术需求的产品或组件.
1.组件的概念
组件(component)是指在应用程序中能发挥特定功能的软件单位.组件实质上就是几种特定的Java程序,只不过这些程序被规定了固定的格式和编写方法,它们的功能和使用方式在一定程度上被标准化了.例如,在Java 2标准版中提供的JavaBean组件,就是按照特定格式编写的Java类文件.JavaBean可以通过getXXX( )和setXXX( )方法 访问实例变量中的数据.
2.组件的类型
J2EE平台主要提供了以下3类J2EE组件:
客户端组件——客户端的Applet和客户端应用程序.
Web组件——Web容器内的JSP, Servlet,Web过滤器,Web事件监听器.
EJB组件——EJB容器内的EJB组件.
组件与容器的关系概括如下:组件是组装到J2EE应用中独立的软件功能单元,每一个J2EE组件在容器中执行,容器为组件提供标准服务和API,容器充当通向底层J2EE平台的接口."连接器(connector)"在概念上驻留在J2EE平台的下方,连接器提供了可移植服务的API,J2EE应用使用这些API来插入到现有的企业应用中.连接器也称为资源适配器,连接器为J2EE体系结构增加了另一种灵活性.
下面从组件和容器的视角审视J2EE应用的定义:
J2EE应用由软件组件构成,这些软件组件根据其各自所属的层进行了分类.
组成J2EE应用的各种组件在对应容器中执行,容器为组件提供底层J2EE API的统一视图.
容器管理组件,并且为组件提供多种系统级服务.例如,生命周期管理,事务管理,数据缓存,异常处理实例池,线程以及安全性.也就是说,J2EE应用以分布式组件集合的形式存在,而各分布式软件组件在其各自的容器中运行.
J2EE客户为应用提供用户界面.客户端向最终用户提供了一个窗口,最终用户可以通过该窗口使用J2EE应用提供的各种服务.
1.3 客户层技术
客户层用来处理J2EE应用的客户表示和用户界面.客户层用现实世界中的桌面计算机,Internet设备或者无线设备表示.J2EE应用可以和多种客户端程序实现连接,主要包括Web客户,Applet客户和应用客户.
1.3.1 Web客户
Web客户由浏览器和Web页面集合( HTML和XML等)两部分组成.Web页面由浏览器提供,用来向最终用户提供进入企业应用的界面.由Web客户提供的各种Web页面是通过驻留在Web层的Web组件动态创建的.通常,产生Web客户内容的Web组件是 Servlet和JSP.Web容器负责管理驻留在Web服务器上的 Servlet和JSP组件的执行,这些组件和Web容器又运行在J2EE服务器上.
浏览器的功能是负责将页面正确地显示给用户,并不承担复杂的数据检索和计算任务.这些复杂而又耗时的操作在J2EE服务器端的Web容器和EJB容器内进行,所以Web客户也被称为"瘦客户".浏览器是通过HTTP协议来与J2EE服务器的特定端口进行通信的.浏览器具有以下一些主要功能:
以特定格式显示 HTML文件.
获取客户的点击并转化成HTTP请求(request).
连接Web服务器,发出HTTP请求并接收处理响应(response).
管理客户和服务器之间的对话状态(Session State).
除上述这些基础功能之外,还包括一些附属功能.例如,设定用户的Web安全机制,存取页面和快捷连接,下载文件等.
在下列场合下可以优先考虑使用Web客户:
J2EE应用的最终用户驻留在企业的外部.
J2EE应用的最终用户由于只需要使用Web浏览器而不容易进行管理.
最终用户不一定要下载或安装任何特殊的软件.
1.3.2 Applet客户
由Web层组件产生的Web页面可以包含嵌入式Applet.Applet是使用Java语言编写的轻量级客户程序,一般是在Web浏览器的上下文中执行.在Web浏览器中执行的Applet客户是通过HTTP协议和Web层进行通信,与Web客户类似,这样的Applet客户同样不能直接 访问业务层.Applet容器负责管理Applet客户的运行时执行,一般情况下由Web浏览器和Java插件组成.Applet的优点是可以提供在一处管理的丰富图形用户界面,主要缺点是Applet很难部署,尤其是当浏览器运行在一个嵌入不同版本的Java虚拟机上时更是如此.
1.3.3 应用客户
应用客户是使用Java语言编写,在标准的JVM上运行的Java应用程序.应用客户对J2SE API具有完全的 访问能力,可以使用Java语言的Swing和AWT库构建具有复杂功能和丰富的图形用户界面.与Web客户和Applet客户不同的是,应用客户是指独立运行的Java应用程序,它不使用Web浏览器来执行,而是在客户容器内执行,使用RMI-IIOP(Remote Method Invocation,RMI;Internet Inter-ORB Protocol,IIOP)协议与业务层的EJB组件进行完全的交互,而不需要通过Web层作为中间媒介.同样,应用客户对由低层J2SE平台提供的J2EE服务(如JDBC服务)也具有完全的 访问权限.
在选择客户端技术时,可以根据程序的具体功能要求和应用场合来确定.
如果Web应用是通用的电子商务网站,采用Web浏览器作为客户端是最合适的选择.
如果Web应用要求使用者随时地获取信息,程序的客户端可以采用无线设备.
如果Web应用要求具有复杂快速的用户界面,就应该考虑在客户端使用Applet或独立运行的Java应用程序.有时,还应该考虑Web带宽要求,反应速度和安全性等具体情况.用户的使用环境也直接影响到对客户程序的选择.
如果Web应用要求用户可以在各种操作系统上都能够使用,那么就应该尽量使用标准的浏览器和Java技术作为程序客户端.
1.4 Web层技术
Web层负责处理瘦客户端的HTTP请求和响应.Web层包括标准化的动态页面生成程序和控制用户界面的程序,它是终端用户和系统程序的接口.通过与业务层互动,Web层将用户需要的信息以适当的格式输出.
Web层与客户层的主要 区别有以下两点:第一,Web层主要在Web服务器端工作,而用户界面通过Web浏览器在客户端工作,两者之间通过Web通信;第二,Web层侧重于信息格式的处理,而用户界面则主要是方便人的理解和操作.例如,JSP文件在Web服务器端编译和运行,主要从数据库获取信息并传递给客户,而JSP传出的 HTML文件在Web浏览器上显示.此时,JSP文件在Web层, HTML页面是用户界面.
1.4.1 Web组件
Web组件是处理 客户请求的软件实体,为 客户请求创建和返回一个合适的响应( HTML文档或XML文档).Web组件驻留在Web层,为J2EE应用提供服务器端的表示能力,使用标准的Web协议(HTTP/HTTPS)提供动态创建的内容.J2EE 1.4规范定义了4种不同的Web组件类型:Java Servlet,JSP,Web过滤器,以及Web事件监听器,如图1.2所示.
Web组件概念示意图
Web组件在Web服务器上的Web容器里运行,可以在Web服务器端对客户发出的HTTP请求进行响应,也可以根据需要同其他服务器端组件进行交互.除了直接同客户交互外,Web组件还可以充当Applet客户与在业务层和数据层上运行的服务器端组件之间的中间媒介.这是因为Applet不能直接 访问业务层和数据层,所以要从这两层获得需要的功能必须经由Web层来实现.
1.Java Servlet
相对于在浏览器上运行的Applet而言, Servlet是在服务器上运行的,用Java语言编写的程序. Servlet是用Java语言书写的一种协议,是与平台无关的服务器端组件,可在支持 Servlet的Web服务器上运行. Servlet被装载到Web服务器后,在JVM上执行,所以不需要任何图形用户界面.
Servlet为客户端和服务器端的信息处理提供了一种"请求-响应(request-response)"模式的运行机制,而Java Servlet API为处理客户端和服务器端之间的请求和应答信息定义了标准接口. Servlet的基本运行方式如图1.3所示.
Servlet的基本运行方式
如果是静态 HTML页面,Web服务器将会自行处理,然后产生响应信息.
如果涉及到动态数据,Web服务器将HTTP请求转交给 Servlet容器处理,结果先传送给Web服务器,再由Web服务器传送给客户端浏览器.
Java Servlet具有以下主要优点:
可移植性——主流IT厂商的Web服务器和应用服务器都支持 Servlet,所以基于 Servlet的解决方案不会把开发人员限制在某个特定厂商的产品上.同时, Servlet使用Java语言编写,故可运行在任何安装有Java运行时环境的操作系统上.
方便性——Web层技术主要使用通过HTTP处理传递的 HTML页面信息,这就要求Web服务器能读写HTTP协议的数据头,数据体,能处理Cookie和进行会话管理.这些工作虽然通过CGI技术也可以实现,但是 Servlet提供了以Java语言为基础的编程方式,编程者可以使用面向对象的概念来应用现成的API.
高效性—— Servlet比CGI高效.CGI处理每个HTTP请求都要激活一个进程,而Web容器使用线程管理 Servlet对HTTP请求的响应.当大量客户同时对一个 Servlet发出请求时,Web容器只运行该 Servlet的一个实例,而不是像CGI那样要运行多个实例而占用大量的内存.CGI的另外一个问题是在处理HTTP请求后就被从内存中清理掉了,不能维持中间数据.而 Servlet在Web容器的辅助下维持程序实例在运行环境中的存在,直到Web容器停止时才会被清理.
通用廉价——Java Web编程技术是目前Web服务器开发领域内占绝对优势的技术.世界上绝大多数商业公司的网站都采用 Servlet和JSP作为Web层的主要技术,其安全性和可靠性是可以信赖的.另一方面,支持 Servlet,JSP技术的Web服务器非常多,从高端的OracleAS 10g,Web Sphere,WebLogic,到底端免费的Tomcat,编程人员可以有非常多的选择.
2.JSP
JSP技术提供了一种简单而快速的方法创建显示动态生成内容的Web页面.JSP技术规范由Sun公司制定,该规范定义了如何在服务器和JSP之间进行交互,描述了页面的格式和语法.JSP 使用XML标签和Scriptlets(一种使用Java语言编写的脚本代码)封装生成页面内容的逻辑.JSP将各种格式的标签( HTML或XML)直接传递给响应的页面.通过这种传送方式,JSP实现了页面逻辑与其设计和显示的分离.JSP是Java技术的一部分.JSP在执行时被编译成 Servlet,并可调用JavaBean组件或Enterprise JavaBean组件,以便在服务器端处理.因此,JSP技术在构建可升级的基于Web的应用时扮演了重要角色.JSP与Java语言一样,并不局限于任何特定的平台或Web服务器.
既然JSP在执行时也要被编译成 Servlet,那么在理论上就可以直接编写 Servlet创建Web应用.然而,JSP技术通过将页面内容和显示逻辑分开,简化了创建网页的过程.在许多应用程序中,需要将模板内容和动态生成的数据一块发送到客户端.基于这种考虑,使用JSP技术要比全部使用 Servlet方便得多.JSP技术具有以下主要优点:
简单实用——JSP可以实现大部分的 Servlet功能,并继承了 Servlet的优点,弥补了 Servlet的不足.JSP使 Servlet的动态数据处理和输出格式两者分开,采用了一种类似 HTML的格式,使Web应用的维护和修改更加方便.即使不懂Java编程的人员也可以通过标准标签实现JSP的基本功能.
移植性和规范性好——JSP技术和微软公司的ASP技术是竞争关系.JSP使用Java语言作为动态内容生成的编程语言,ASP则主要使用VBScript脚本语言.ASP程序一般运行在微软的IIS服务器上,一旦从Windows平台转到其他平台,就很难再被使用.Java语言则具有更强的适用性和移植性,JSP程序无需改动,就可以在各种平台上运行.
Servlet和JSP是Web层的主要技术.Web容器提供了 Servlet和JSP等Web组件的运行时环境,这些组件是浏览器和Web应用进行交互的主要通道. Servlet是用Java语言编写的Java类,能动态处理 客户请求并构造响应.JSP则基于文本,也能像 Servlet一样被执行,更多适用于创建一些静态内容.
3.过滤器
过滤器是驻留在Web层上的软件对象,在 Servlet或JSP容器中运行,可对到来的 客户请求Servlet或JSP页面创建的应答响应进行动态变换.与 Servlet或JSP组件不同的是,过滤器并不创建针对请求的响应,而是对由Web预先创建的响应进行过滤.实现过滤的方式是在响应文档返回给客户之前对该响应文档进行修改.
4.事件监听器
事件监听器是一些Java类,用于实现一个或多个 Servlet事件监听接口,接收特定
Java Web开发技术概述