第1章 Java Web开发简介 通过本章的学习可以达到以下目标: ? 了解Web的发展过程。 ? 理解Web开发的主要技术及作用范围。 ? 掌握企业开发的整体架构。 随着互联网的兴起,Web技术已经应用得越来越广泛,而且已经有越来越多的语言开始支持Web的开发。本章将介绍Web的发展历程和Web常见的开发语言。 1.1 Web发展历程 在早期,人们为了方便开展科学研究,设计出了Internet用于连接美国的少数几个顶尖研究机构,之后随着进一步的发展,人们开始应用HTTP协议(Hypertext Transfer Protocol,超文本传输协议)进行超文本(hypertext)和超媒体(hypermedia)数据的传输,从而将一个个的网页展示在每个用户的浏览器上。今天的Web已经从最早的静态Web发展到了动态Web阶段,随之而来的像网上银行、网络购物等站点的兴起,更是将Web带进了人们的生活和工作中。 最早的Web是以静态Web出现的,用户在浏览器中输入网址将请求通过HTTP协议传送到Web服务器上,服务器会根据用户的请求找到相应的网页文件(*.htm、*.html),接着再通过HTTP协议传回到客户端浏览器上进行显示,如图1-1所示。 图1-1 静态Web处理流程 但是这种Web返回的只是电子文本的形式,在服务器生成之后,内容永远是固定的。在最初阶段,一些科学家可以通过这些静态Web的方式进行论文研究,而且很多的企业也并没有发现这座“金矿”,而最初可以实现静态Web的主要手段也就是使用HTML(超文本标记语言)。 随后,一些人对于Web就有更高的要求了,希望可以得到一些更加绚丽的效果,而此时SUN公司推出的Applet正好满足了这种需求。 SUN公司在1995年正式推出了Applet程序,而Applet(应用小程序,简称小程序)允许开发人员编写可以嵌入在Web页面上的小应用程序,只要用户使用了支持Java的浏览器就可以直接运行此程序,那么此时的Web处理结构如图1-2所示。 图1-2 Web处理结构 Applet程序虽然带来了很多好处,但是Applet程序本身也存在着一些限制。例如,不允许进行文件读写,也无法进行数据库的操作,而且Applet属于胖客户端程序,下载速度也是非常缓慢。 从图1-2中可以分析出,Applet技术本身只能运行在客户端,所以此时虽然带来了一些动态的效果,但是服务器端依然没有做太大的改变,还是采用了请求及回应机制,客户端需要哪些资源,服务器端就返回哪些资源。当然,除Applet技术外,像JavaScript语言也可以实现客户端动态效果,但不管如何实现,这种在客户端完成的动态效果在代码的开发上也是很复杂的,而现在的JavaScript在开发中也只是完成一些简单的表单验证功能的实现(这一点以后会讲解到)。 在客户端实现动态效果似乎已经成为了一件很麻烦的事情,那么人们只能在服务器端做出改变,而这种改变真正造就了动态Web的发展。下面先来看一下动态Web的执行图,并观察与静态Web的区别,如图1-3所示。 图1-3 动态Web流程图 从图1-3中可以发现,此时的客户端已经不再需要JVM的支持了,而只是一个普通的浏览器,但是服务器端却发生了重大的改变。首先,所有请求不再直接提交给Web服务器,而是通过Web服务插件进行接收,此插件的主要目的是用于区分用户所发出的请求是动态请求还是静态请求。如果用户发出的是静态请求,则会将用户请求交给Web服务器,并通过文件系统将用户所需要的资源发回给客户端浏览器,这一点与最初的静态Web处理流程是完全一样的;但如果此时的请求是动态请求,则会将所有请求交给Web容器进行处理,在Web容器中将会采用拼凑代码的形式(主要是拼凑HTML)动态地生成数据并通过Web服务器发回给客户端浏览器。 动态Web的最大特点就是具备交互性,所谓交互性就是服务器端会自动根据用户请求的不同而显示不同的结果。它类似于使用搜索引擎那样,只要输入关键字,服务器端就会根据这些指定的关键字,返回检索结果。 要想实现一个动态Web,可以采用如下5种方式。 ? CGI(Common Gateway Interface,公共网关接口):CGI是最早出现的实现动态Web的操作标准,可以采用任何语言实现(如C或VB),但是这种传统的CGI程序本身是采用多进程的机制进行处理的,每当一个新用户连接到服务器上时,服务器都会为其分配一个新的进程,很明显,这种程序的执行效率是很低的。 ? PHP(Hypertext Preprocessor,超文本预处理):PHP是一种跨平台的服务器端的嵌入式脚本语言。它大量地借用C、Java和Perl语言的语法,并结合PHP自身的特性,使Web开发者能够迅速地写出动态页面。而且PHP是完全免费的,用户可以从PHP官方站点自由下载。但是PHP本身也有缺点,就是需要运行在Apache服务器下,只有在使用MySQL数据库时才可以达到性能的最大发挥,所以一般都只适合于个人或小型项目开发。 ? ASP(Active Server Pages,动态服务页):ASP是一个动态Web服务器端的开发环境,利用它可以产生和运行动态的、交互的、高性能的Web服务应用程序。ASP采用脚本语言VBScript(JavaScript)作为自己的开发语言。由于ASP技术出现较早,所以一直到今天还在被陆续使用着,但是ASP技术本身有一个最大的问题就是平台的支持,ASP只能运行在IIS(Internet Information Services,互联网信息服务)服务器上,且只能在SQL Server数据库上才可以得到最大发挥。但是这套开发相对于使用Java开发而言,性能是很差的,所以一般用于个人或中小型项目 开发。 ? ASP.NET:ASP.NET是微软公司继ASP之后推出的新一代动态网站开发技术。ASP.NET基于.NET框架平台,用户可以选择.NET框架下自己喜欢的语言进行开发。ASP.NET技术是ASP技术的更新,也是微软公司目前主推的技术,但是由于微软的产品永远都会受到平台的限制,所以此技术往往用于中型项目的开发。 ? JSP(Java Server Page,Java服务页):使用Java完成的动态Web开发,代码风格与ASP类似,都属于在HTML代码中嵌入Java代码以实现功能,由于Java语言的跨平台特性,所以JSP不会受到操作系统或开发平台的制约,而且有多种服务器可以支持,如Tomcat、WebLogic、JBoss、Websphere等,所以经常在中大型项目开发中使用。JSP的前身是Servlet(服务器端小程序),但是由于Servlet开发过于复杂,所以SUN公司的开发人员根据ASP技术的特点,将Servlet程序重新包装,而形成新的一门开发技术——JSP。 1.2 企业开发架构 在现代的企业平台开发中已经大量地使用了B/S开发模式,不管是使用何种动态Web实现手段,其操作形式都是一样的,核心操作的大部分都是围绕着数据库进行的。但是如果直接使用编程语言进行数据库的开发则程序员要处理许多诸如事务、安全等操作,所以现在的开发往往都会通过中间件进行过渡,即程序运行在中间件上,并且通过中间件进行数据库的操作,而具体一些相关的处理,如事务、安全等完全由中间件负责,这样程序员只需要负责具体功能的开发即可,此种模式如图1-4所示。 图1-4 企业开发的核心架构 在图1-4中可以发现,企业的平台需要操作系统的支持,所有数据库都是建立在操作系统上的,之后开发平台(Java EE就是一种开发平台)通过中间件进行数据库的操作。 1.3 Java EE架构 Java EE(Java Enterprise Edition,在2005年之前称为J2EE)是在Java SE基础之上建立起来的一种标准开发架构,主要用于企业级应用程序的开发。在Java EE的开发中是以B/S作为主要的开发模式,在Java EE中提供了多种组件及各种服务,如图1-5所示。 图1-5 Java EE架构 从图1-5中可以发现,整个Java EE架构都是基于Java SE基础构建的,主要由容器、组件和服务三大核心部分构成,下面分别进行介绍。 1.Java EE容器 容器负责一种组件的运行,在Java EE中一共提供了4种容器,即Applet Container、Application Client Container、Web Container和EJB Container。各个容器负责处理各自的程序,且互相没有任何影响,而如果需要运行Web程序,则一定要有Web容器的支持。 2.Java EE组件 每一种Java EE组件实际上都表示着一种程序的开发,例如,Application程序就是使用主方法(main())运行的一种组件。在Java EE中提供了4种容器,每一种容器中都运行各自的组件,读者可以发现在Web容器中运行的是JSP和Servlet组件。EJB组件本身提供的是一个业务中心,由于EJB属于分布式开发的范畴,所以本书暂不对此做深入讲解。 3.Java EE服务 Java EE之所以应用广泛,主要是由于Java EE提供了各种服务,通过这些服务可以方便用户进行开发。例如,如果要进行数据库操作,则应使用JDBC服务。在Java EE中的主要服务有如下几种。 ? HTTP(Hypertext Transfer Protocol):在Java EE中主要采用了HTTP协议作为通信标准,包括Web开发中的主要协议也是HTTP协议。 ? RMI-IIOP(Remote Method Invocation over the Internet Inter-ORB Protocol):远程方法调用,融合了Java RMI和CORBA(Common Object Request Broker Architecture,公共对象请求代理体系结构)两项技术的优点而形成的新的通信协议,在使用Application或Web端访问EJB端组件时使用。 ? Java IDL(Java Interface Definition Language):Java接口定义语言,主要用于访问外部的CORBA服务。 ? JTA(Java Transaction API):用于进行事务处理操作的API,但在Java EE中所有的事务应该交由容器处理。 ? JDBC(Java Database Connectivity):为数据库操作提供的一组API。 ? JMS(Java Message Service):用于发送点对点消息的服务,需要额外的消息服务中间件支持。 ? JavaMail:用于发送邮件,需要额外的邮件服务器支持。 ? JAF(JavaBeans Activation Framework):用于封装传递的邮件数据。 ? JNDI(Java Naming and Directory Interface):在Java EE中提供的核心思想就是 “key→value”,为了体现这种思路,可以通过JNDI进行名称的绑定,并且依靠绑定的名字取得具体的对象。 ? JAXP(Java API for XML Parsing):专门用于XML解析操作的API,可以使用DOM或SAX解析,在最新的Java EE中提供了一种新的解析组件——STAX。 ? JCA(J2EE Connector Architecture):Java连接器架构,通过此服务可以连接不同开发架构的应用程序。 ? JAAS(Java Authentication and Authorization Service):用于认证用户操作,可以让当前运行的代码更加可靠。 ? JSF(Java Server Faces):Java EE官方提供的一套MVC实现组件。 ? JSTL(JSP Standard Tag Library):JSP页面的标签支持库。 ? Web服务组件:主要用于异构的分布式程序开发,主要服务有SAAJ(SOAP with Attachments API for Java)、JAXR(Java API for XML Registries)等。 但是在整个企业的应用环境中,Java EE架构只是工作在中间层的一种组件,如图1-6所示。 图1-6 Java EE在企业环境中的位置 在整个企业开发中主要分为如下3个层次。 ? 客户层:分为内部用户及外部用户,客户端可以使用Web浏览器,也可以是Java编写的应用程序。 ? 中间层:为客户访问提供服务,使用Java EE中的各种组件技术进行搭建,且各个容器之间允许互相调用。 ? 企业信息系统层(Enterprise Information Systems,EIS):例如,保存数据的数据库就是工作在此层。 客户端一般不会直接去操作企业信息系统层,而是会通过中间层提供的服务进行访问,开发人员所需要完成的就是为所有的客户端提供更方便的操作。 1.4 Java EE核心设计模式 在整个Java EE中最核心的设计模式就是MVC(Mode-View-Controller)设计模式,且被广泛应用。Java EE中的标准MVC设计模式如图1-7所示。 图1-7 Java EE中的标准MVC设计模式 在标准的MVC设计模式中,用户一旦发出请求之后会将所有请求交给控制层处理,然后由控制层调用模型层中的模型组件,并通过这些组件进行持久层的访问,再将所有结果都保存在JavaBean(Java类)中,最终由JSP和JavaBean一起完成页面的显示。但是此种设计模式,在不同的开发架构中也会存在一些区别,因为在开发中如果没有特殊的需要不一定会使用EJB技术,这一点在本书中会有具体的讲解。 1.5 Struts开发框架 使用标准MVC设计模式进行开发,则肯定要求进行过多的复杂设计,这对于一般项目而言是非常麻烦的,所以Apache专门提供了一套用于进行MVC开发的框架——Struts。Struts的软件包依然用于Web层次的开发,使用Struts可以更方便地对代码开发进行严格的管理。图1-8列出了Struts框架的基本组成。 图1-8 Struts框架的基本组成 从图1-8中可以发现,Struts框架的主要作用还是在Web层上,也就是说Struts是对JSP和Servlet的一种变相应用,其核心的内部原理依然是MVC,而且由于Struts出现较早,使用较为广泛,所以现在俨然已经成为了Java EE的一套标准框架,是每一个从事Java EE开发人员必须具备的一项基本技能。 1.6 本 章 摘 要 1.Web运行环境经历了静态Web和动态Web两个时期,静态Web与动态Web最本质的区别就在于资源(数据库)的访问上。 2.动态Web的常见实现手段有CGI、ASP、PHP、JSP/Servlet等。 3.Java EE架构主要由组件、容器、服务组成,在整个Java EE中MVC是其核心设计思路。 4.Struts开发主要是为了解决Web层的开发问题,可以节约设计的成本。