
1.1 和Java相关的几个概念
1.1.1 什么是Java
Java到底是一种什么样的语言呢?Java是一种简单的、面象对象的、分布式的、解释的、健壮的、安全的、结构中立的、可移植的、性能优异的、多线程的、动态的语言。
这句话太长,虽然它几乎包含了Java的所有特征,但长得让所有人都记不住这些特征。我认为Java作为一种编程语言从1995年诞生发展至今,其最重要的特性是“可移植性”。
Sun公司的一句口号“Write once, run anywhere(编写一次,到处运行)”成为Java最不可替代的价值标识,开始对微软的系列编程语言(C++、VB等)发起挑战,并发展成为今天网络世界中首选的编程语言。
Java诞生之初,是作为嵌入式芯片的编程环境存在的,时至今日Java已经拥有多个分支(变种)并在其各自的领域内得到了广泛的发展。JSP、Java、JavaBean、JavaScript每一个名字我们都耳熟能详,下面我们逐个了解一下这些成员。
1.1.2 JSP、Java、JavaBean与JavaScript
JSP
JSP(Java Server Pages)是由Sun MicroSystem公司在Java语言上开发出来的一种动态网页制作技术,其能够使你在HTML页面中插入Java程序实现动态页面,并且支持和HTML的混合编写,不需要编译直接执行。你可以使用普通的文本编辑工具来书写HTML语句,然后将动态部分用特殊的标记嵌入Java程序即可。
Sun MicroSystem公司首先推出Servlet,其功能强大,体系设计也很先进,但是其输出HTML语句的方式仍然沿用了传统CGI程序的做法:用命令逐行输出。这使得在Servlet动态生成HTML比较麻烦,因此微软的ASP一度成为动态网页编程的首选语言。
这促使Sun MicroSystem很快推出了类ASP的Java嵌套型语言:JSP。
JSP作为一种全新的网页编程技术,不仅提供了一种方便有效的动态网页制作方法,而且作为Java家族的一分子,它还具有一般Java应用良好的可移植性,这使得JSP页面可以在任何支持Java的应用服务器中运行。
JSP语言通过在HTML语法中镶嵌JSP的Tag标签,从而大大简化和方便了网页的设计和修改,这使得源于Java的JSP语言很快地被广泛应用。然而对于多数大型Web应用程序的开发仍然需要Servlet和JSP搭配使用。
Java
Java是介于解释型和编译型的一种语言。用Java编写的程序都先被编译成字节码,再通过JVM(Java虚拟机)解释执行。由于依赖解释执行的Java字节码在运行速度上比可以直接编译成机器码的语言(如C/C++)缓慢得多,所以大多数用户认为Java程序运行较慢。
字节码是造成Java运行速度缓慢的主要原因,但是它也是让Java可以跨越计算机平台使用的重要因素之一。
字节码是Java专有的一种中间码,必须通过JVM来解释才能运行。在不同的操作平台上,Java有不同的JVM,使Java字节码可以跨越平台的限制,在不同的环境上运行。Java当初在设计时便考虑到跨平台的问题,因此字节码的产生正是为了达到跨平台的功能,这是Java有别于其他语言的主要原因。
然而在性能方面显而易见的缺陷,又使得Java的竞争力有些削弱。因此,人们在提高Java性能方面所作的工作从未停止过。
Sun公司及Java的支持者们为提高Java的运行速度已经做出了许多努力,其中大多数集中在程序设计的方法和模式选择方面。由于算法和设计模式的优化是通用的,对Java有效的优化算法和设计模式,对其他编译语言也基本适用,因此不能从根本上改变Java程序与编译型语言在执行效率方面的差异。
Java语言有多种表现形式,Java Applet、Java Application、Java Bean、JSP等,分别应用在不同的体系结构中,例如:Java Applet(也称Java小程序)用于开发基于浏览器的小程序,以提高HTML页面的高可交互性,在这一点上它和JavaScript存在的目的是一致的。
JavaBean
ASP通过COM来扩充复杂的功能,如文件上载、发送E-mail以及将业务处理或者复杂计算分离出来成为独立可重复利用的模块。JSP则通过JavaBean完成同样的功能扩充。
本书中的大部分组件都是通过JavaBean的方式来提供的。读者通过简单的调用就可以完成各种强大、复杂的功能。
在开发的复杂程度上,COM的开发远比JavaBean复杂和烦琐,学会ASP不难,但学会开发COM却不容易。相比较而言,使用JavaBean对系统功能进行扩充则较容易实现。而且在后期维护的时候,COM组件必须在服务器上注册后方可使用,如果对COM组件进行了更新,就必须在注册表中对组件进行重新注册。更新COM组件的注册过程,对很多程序员来说都是一段不愉快的经历。
所幸的是JavaBean并不需要注册,只要将其放置在CLASSPATH所包含的目录中就行了。对JavaBean进行了修改和更新,对绝大多数应用服务器(如JSWDK和Tomcat)来说,需要重新启动服务,就可以载入最新版的组件。
JavaBean是完全的面向对象程序(OOP),可以针对不同的业务处理功能方便地建立一整套可重复利用的对象库,例如用户权限控制、E-mail自动回复等。
JavaScript
首先需要明确的是:JavaScript不是Java大家庭的成员。
我们在这里对JavaScript进行介绍的主要原因是:
1. JavaScript在B/S结构的浏览器中被广泛应用;
2. 很多初学者将Java和JavaScript混淆不清。
Applet、Servlet、JSP和JaveBean都是Java在不同环境中的表现形式,尽管它们对标准Java的支持程度各有不同,但它们都是Java的一种分支,秉承着Java的全部特性,支持同样的标准,共同由Java虚拟机JVM解释执行。
而JavaScript除了在编程语法上和Java的书写格式有很大的相似性,以及命名中包含了Java字样外,和Java并无关系。
JavaScript是一种脚本语言,它无法编译成字节码,自然也不需要JVM的支持,是由浏览器对其解释执行的。
1.1.3 MVC与Struts
MVC是Model(模型)/View(视图)/Controller(控制)的缩写。在我们真正了解MVC之前,我们先来看看为什么需要使用MVC构架,以及MVC能给我们带来哪些令人激动的新特性。
在MVC的概念深入人心和Struts广为流传之前,大部分Web应用程序都是用ASP、PHP、JSP这样的过程化语言来创建的。它们将从数据库中检索出来的数据和HTML这样的表示层代码混在一起编写后,由浏览器展示给最终客户。
这样编写的程序代码像面条一样,将服务器端的程序代码和表示层的标签混在一个文件中编写,为程序的调试和修改带来很大的麻烦。甚至美工对页面布局的轻微调整都会导致大量代码的重新编写和调试。经验丰富的开发者能够区分出文件中哪些是数据,哪些是表示层的标签,但这通常很难做到,它需要精心的计划和不断的尝试。而MVC的出现则从根本上强制性地将它们分开。
尽管MVC的概念很早就有人提出,但是直到像Struts、JSF之类的MVC构架产品逐渐成熟后,MVC的模型才真正在软件系统的开发过程中得到广泛应用。
如果你已经对JSP的“面条式”编程感到失望,或者你需要维护其他项目组用JSP编写的应用系统,正面对着一大堆JSP程序而无从下手,又或者你作为一位资深的项目经理,需要带领团队开发一个大型应用系统,而你正对选择什么样的构架设计煞费苦心时,再或者你需要完成一个界面多样化(可以随心定义,甚至可以通过Wap为手机用户提供服务)的应用系统,那么建议你采用MVC构架。
尽管构造MVC应用程序需要一些额外的工作,但是它所带来的好处是毋庸置疑的。
需要说明的是:作为一个MVC的框架,Struts并不是唯一的Java语言对MVC Framework的实现。但Struts作为Jakarta计划的一部分,无论从易用性、可靠性,还是拥有用户的数量上都是目前行业中的佼佼者。因此我们将通过Struts来领略一下MVC的魅力所在。