01. Web开发简介

本章目标

  • 了解Web的发展历程及常见开发手段
  • 掌握Java EE 核心架构及主要服务
  • 掌握Java EE 的核心设计模式

1.1 Web发展历程

     应用HTTP协议(Hypertext Transfer Protocol, 超文本传输协议)进行超文本(hypertext)和超媒体(hypermedia)数据的涮熟,从而将网页展示在每个用户的浏览器(客户端)上。 如今的Web已经从最早的静态Web发展到了动态Web阶段。

     最早的Web是以静态Web出现的,用户在浏览器上输入网址将请求通过HTTP协议传送到Web服务器上,服务器会根据用户的请求找到相应的网页文件(*.html、*.htm),接着再通过HTTP协议传回到客户端浏览器上进行显示。如下图所示:

        

     但是这种Web返回的只是电子文本的形式,在服务器生成之后,内容是固定的。 最初可以实现静态Web的主要手段也就是使用HTML(超文本标记语言)。

     随后,随着人们对Web的要求越来越高,希望可以得到一些更多的效果,SUN公司推出的Applet正好满足了这种需求。

     Sun公司在1995年正式推出了Applet程序,而Applet(应用小程序,简称小程序)允许开发人员编写可以嵌入在Web页面上的小应用程序,只要用户使用了支持Java的浏览器就可以直接运行此程序,那么此时的Web处理结果如下图所示:

     

      Applet程序虽然带来了很多好处,但是Applet程序本身也存在一些限制。例如,不允许进行文本读写,也无法进行数据库的操作,而且Applet属于胖客户端程序,下载速度也是非常缓慢。

     

Note:

   胖客户端与瘦客户端

  •   胖客户端程序指的是,当一个程序运行时需要一个单独的客户端程序支持。例如,登陆QQ时,就需要一个客户端的程序运行。
  •   瘦客户端操作时不需要进行任何其他程序的安装,直接使用即可。例如,登陆网上论坛,只需要一个浏览器即可使用。


     从Web处理结构可以分析出, Applet技术本身只能运行在客户端,所以此时虽然带来了一些动态的效果,但是服务器端没有做太大的改变,还是采用了请求及回应机制,客户端需要哪些资源,服务器端就返回哪些资源。当然,除Applet技术外,像JavaScript语言也可以实现客户端动态效果,但是不管如何实现,这种在客户端完成的动态效果在代码的开发商也是很复杂的,而现在的JavaScript在开发中也只是完成一些简单的表单验证功能的实现(这个是好久之前的,现在JavaScript发展到哪一步了,还需要深入了解)

Note:

    Applet的发展收到很多限制。   Applet程序需要依靠浏览器给予支持,而且还要根据不同的版本安装不同版本的JVM。


    在客户端实现动态效果似乎已经成为了意见很麻烦的事情,那么人们只能在服务器端做出改变,而这种改变真正造就了动态Web的发展。

    动态Web的执行图,注意与静态Web的区别

    

   从上图可以发现,此时的客户端已经不再需要JVM的支持了,而只是一个普通的浏览器,但是服务器端却发生了重大的改变。首先,所有请求不再直接提交给Web服务器,而是通过Web服务插件进行接收,此插件的主要目的是用于区分用户所发出的请求是动态请求还是静态请求。

  1. 如果是静态请求,则会将用户请求提交给Web服务器,并通过文件系统将用户所需要的资源发回给客户端浏览器,这一点与最初的静态Web处理流程是完全一样的。
  2. 如果是动态请求,则会将所有请求交给Web容器进行处理,在Web容器中将会采用拼凑代码的形式(主要是拼凑HTML)动态地生成数据并通过Web服务器发回给客户端浏览器

Note:

   静态Web与动态Web最本质的区别实际上只有一点,就是静态Web是无法进行数据库操作的;而动态Web是可以进行数据库操作的。现在几乎所有数据都是通过数据库来保存的,也正是由于这个原因,动态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数据库时才可以达到性能的最大发挥,所以一般都只适合个人或小型酵母开发。  PHP的另外一种解释: Personal Home Page(个人主页)。
  • ASP(Active Server Pages,动态服务页):ASP是一个动态Web服务器端的开发环境,利用它可以产生和运行动态的、交互的、高性能的Web服务器应用程序。 ASP采用脚本语言VBScript(JavaScript)作为自己的开发语言。由于ASP技术出现较早,所以一直到今天还在被陆续使用着,但是ASP 技术本身有一个最大的问题就是平台的支持,ASP 只能运行在IIS(Internet Information Services, 互联网信息服务)服务器上,且只能在SQL Server数据库上才可以得到最大发挥。但是这套开发相对于使用Java开发而言,性能较差,所以一般用于个人或中小型项目开发。
  • ASP.NET: ASP.NET是Microsoft公司继ASP之后推出的新一代动态网站开发技术。ASP.NET基于.NET框架平台,用户可以选择.NET框架下自己喜欢的语言进行开发。 ASP.NET技术是ASP技术的更新,也是Microsoft公司目前主推的技术,但是由于Microsoft的产品永远都会受到平台的限制,所以此技术往往用户中型项目的开发
  • JSP(Java Server Page,Java服务页):使用Java完成的动态Web开发,代码风格与ASP类似,都属于在HTML代码中嵌入Java代码以实现功能,由于Java语言的跨平台特性,所以JSP不会受到操作系统或开发平台的制约,而且有多种服务器可以支持,例如,Tomcat、WebLogic、JBoss、Websphere等,所以经常在中大型项目开发中使用。JSP的前身是Servlet(服务器端小程序),但是由于Servlet开发过于复杂,所以Sun公司的开发人员根据JSP技术的特点,将Servlet程序重新包装,而形成新的一门开发技术 ---  JSP。

Note:

   动态Web的开发属于B/S结构。 在网络开发中有两种开发模式,即C/S模式和B/S模式

  • C/S模式(Client/Server模式):即客户/服务器模式。 在这种模式下,每个客户端都需要安装工具软件,管理和维护时客户端和服务器端都同时需要更改,对于开发而言比较麻烦。例如,日常生活中使用的QQ或MSN等,都属于C/S模式。
  • B/S模式(Browser/Server模式):即浏览器/服务器模式。相当于在C/S模式中,以浏览器作为客户端的情况。在服务器端安装软件,客户端通过浏览器访问服务器,从而实现信息、资源的交互和共享,只需要管理和维护服务器端即可。例如,网上购物或论坛都属于B/S模式。


1.2 企业开发架构

     在现代的企业平台开发中已经大量地使用了B/S开发模式,不管是使用何种动态Web实现手段,其操作形式都是一样的,核心操作的大部分都是围绕着数据库进行的。但是如果直接使用变成语言进行数据库的开发则程序员处理许多诸如事务、安全等操作,所以现在的开发往往都会通过中间件进行过渡,即程序运行在中间件上,并且通过中间件进行数据库的操作,而具体一些相关的处理,如事务、安全等安全由中间件负责,这样程序员只需要负责具体功能的开发即可,此种模式如图所示:

    

   从上图可以发现,企业的平台需要操作系统的支持,所有数据库都是建立在操作系统上的,之后开发平台(Java EE就是一种开发平台)通过中间件进行数据库的操作。

   一个企业开发平台由很多部分组成,实际上每一个部分都可以作为一门完整的学习方向。例如,有专门从事操作系统维护及开发的工程师,也有专门负责数据库的工程师等。但是如果一个Java EE的开发人员,则必须会使用操作系统,而且对于数据库的基本操作和SQL语言也必须相当熟练。更重要的是,开发人员往往都必须会使用中间件,因为所有程序都要在中间件上部署或运行,所以对一个Java EE的开发人员的综合素质往往要求较高。

1.3 Java EE 架构

      Java EE(Java Enterprise Edition,之前称为J2EE)是在Java SE基础之上建立起来的一种标准开发架构,主要用于企业级应用程序的开发。在Java EE的开发中是以B/S作为主要的开发模式,在Java EE中提供了多种组建及各种服务,如下图所示:

    

     .NET开发架构也是由Java EE而来。.NET架构在推出时,也大量地参考了Java EE中的各个组成部分,并提出了与之类似的企业开发架构。实际上这两种架构已经属于相互学习、互相进行的竞争性阶段,而这种竞争所带来的好处是,将为程序开发人员提供更多更好的程序开发支持。

     从上图可以发现,整个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 Services):用于发送点对点消息的服务,需要额外的消息服务中间件支持。
    • JavaMail:用于发送邮件,需要额外的邮件服务器支持。
    • JAF(JavaBean 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 Registeries)等。

Note:

   Java EE 中提供的服务很多,随着学习的深入会逐步掌握这些服务的作用,在接下来的教程中也会使用主要的几种服务,如JNDI、JAXP、JSTL等。


     但是在整个企业的应用环境中,Java EE架构只是工作在中间层的一种组件,如下图所示:

    

Note:

   从Java EE架构图中可以清晰地发现:Java Applet程序不支持各种服务,而现在的开发大多是基于数据库开发的,所以其随着发展已经被逐步废除。


     在整个企业开发中主要分为如下3个层次

  • 客户层:分为内部用户及外部用户,客户端可以使用Web浏览器,也可以是Java编写的应用程序。
  • 中间层:为客户访问提供服务,使用Java EE中的各种组件技术进行搭建,且各个容器之间允许互相调用。
  • 企业信息系统层(Enterprise Information Systems, EIS):例如,保存数据的数据库就是工作在此层。

     客户端一般不会直接去操作企业信息系统层,而是会通过中间层提供的服务进行访问,开发人员所需要完成的就是为所有的客户端提供更方便的操作。

1.4 Java EE 核心设计模式

     在整个Java EE中最核心的设计模式就是MVC(Mode-View-Controller)设计模式,且被广泛应用。Java EE中的标准MVC设计模式如图所示:

    

     在标准的MVC设计模式中,用户一旦发出请求之后会将所有请求交给控制层处理,然后由控制层调用模型层中的模型组件,并通过这些组件进行持久层的访问,再将所有结果都保存在JavaBean(Java类)中,最终由JSP和JavaBean一起完成页面的显示。但是此种设计模式,在不同的开发架构中也会存在一些区别,因为在开发中如果没有特殊的需要不一定会使用EJB技术。

Note: MVC是核心,是最重要的基础。

     是不是应该把框架(Struts、Spring、Hibernate等称为开发框架)开发作为学习的重点??? 框架只是一种很简单的应用,而整个Java的核心并不在框架上,更多的是再MVC设计模式上的应用上。 Java EE提供的是标准架构,而那些框架的设计完全是从这些标准设计中衍生而来的,相当于走了一条捷径,所以学习的重点还是在这些标准的开发模式中,而不应该花过多的精力在这些框架的学习上。因为只要掌握了标准,那么再学习任何一门框架都能够很快上手,轻松掌握。

1.5 Struts开发框架

     使用标准MVC设计模式进行开发,则肯定要求进行过多的复杂设计,这对于一般项目而言非常麻烦,所以Apache专门提供了一套用于进行MVC开发的框架 -- Struts。 Struts的软件包依然用于Web层次的开发,使用Struts可以更方便地对代码开发进行严格的管理。

     Struts框架的基本组成

    

     从Struts框架的组成可以发现,Struts框架的主要作用还是在Web层上,也就是说Struts是对JSP和Servlet的一种变相应用,其核心的内容远离依然是MVC,而且由于Struts出现较早,使用较为广泛,所以现在俨然已经成为了Java EE的一套标准框架,是每一个从事Java EE开发人员必须具备的一项基本技能。

Note:

   学习Struts前一定要保证能够熟练使用标准MVC进行项目的开发。  Struts本身属于框架,但是框架只是一种工具。所以在学习时一定不可本末倒置,一定要注意标准设计模式的吸收和基本功的训练。 核心内容仍然是MVC设计模式。

1.6 本章摘要

  1. Web运行环境经历了静态Web和动态Web两个时期,静态Web与动态Web最本质的区别在于资源(数据库)的访问上。
  2. 动态Web的常见实现手段有CGI、ASP、PHP、ASP.NET、JSP/Servlet等。
  3. Java EE架构主要由容器、组件、服务组成,在整个Java EE中MVC是其核心设计思路。
  4. Struts开发主要是为了解决Web层的开发问题,可以节约设计的成本。
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值