摘要:本文着重介绍JSP技术开发动态网站中的各种优缺点,简要分析JSP技术和ASP 技术的不同之处。
关键字:JSP,Java, JDBC-ODBC,Java Bean。
Abstract: this paper discusses JSP technology in Web Site developing and tells the difference between JSP and ASP.
Keyword: JSP,Java, JDBC-ODBC,Java Bean.
一、引言
在Internet上的众多网站中,基于WEB数据库的动态网站应用相当广泛。基于WEB网络数据库的动态网站由一个WEB浏览器作为客户端界面,一个数据库服务器用作信息存储和一个连接两者的 WEB应用服务器组成。原有开发动态网站的CGI技术,随着WEB应用程序的客户端技术不断地发展,逐渐被Java Applet、ActiveX控件、DHTML和JavaScript所取代,这些技术极大地改善了用户界面,但当它们尝试做一些深入的工作时,它们开始遇到客户端浏览器不兼容、服务器负担过重、访问速度下降以及安全性的问题。JSP技术就是解决这些问题的一把金钥匙,本文主要介绍在使用JSP技术构建动态网站的过程中对该技术的一些要点和难点。
二、JSP技术要点
JSP是基于Java Servlet以及整个Java体系的Web开发技术,利用这一技术可以建立先进、安全、快速和跨平台的动态网站。在传统的网页HTML文件中加入Java程序片段和JSP标记,就构成了JSP网页。Web服务器在遇到访问JSP网页的请求时,首先执行其中的程序片段,然后将执行结果以HTML格式返回给客户。程序片段可以操作数据库、重新定向网页以及发送 email 等等,这就是建立动态网站所需要的功能。所有程序操作都在服务器端执行,网络上传送给客户端的仅是得到的结果,对客户浏览器的要求很低。在用户连接JSP网站时,用户请求网页,JSP页面独自响应请求,将用户对网页的请求转化为对数据的请求,通过Java Bean处理请求并将返回的数据封装成HTML页面返回给用户。
利用JSP编写的程序有许多优势:
1、程序写一次,到处可以运行:JSP在设计时,充分考虑到应用平台的无关性。依赖于Java的可移植性,JSP得到目前许多流行OS平台的支持,可在Apache、Netscape、IIS等服务器上执行。
2、执行速度快:JSP页面只需编译一次转化为Java字节代码,其后一直驻留于服务器内存中,加快了对JSP页面的响应速度。若不考虑JSP页面第一次编译所花的时间,则JSP的响应速度要比ASP快的多。
3、Java的优势:JSP技术是用Java语言作为脚本语言的。跨平台、成熟、健壮、易扩充的Java技术使得开发人员的工作在其他方面也变得容易和简单。在Windows系统被怀疑可能会崩溃时,Java能有效地防止系统崩溃。Java语言通过提供防止内存泄漏的方法,在内存管理方面大显身手。加之,JSP为应用程序提供了更为健壮的意外事件处理机制更大的发挥了Java的优势。
三、JSP技术难点
1、连接数据库
数据库连接对动态网站来说是最为重要的部分,在与后端数据库连接时我们可以采用ODBC或JDBC技术。虽然ODBC作为传统的连接数据库的手段,在我们的程序可以是一种选择,但是ODBC有以下的致命缺陷,从而使它无法胜任JSP的请求;
①ODBC是一个C语言实现的API,从Java程序调用本地的C程序会带来一系列类似安全性、完整性、健壮性方面的缺点。
②其次,完全精确的实现从C代码ODBC到Java API 翻译的ODBC也不会另人满意,因为在Java中没有指针,而ODBC中大量的使用了指针,包括极易出错的空指针“void *”。
③考虑到平台移植性来说,在开发JSP程序中使用ODBC则会带来负面影响,使得代码不适合于移植。
为了使我们的程序在具有安全性、完整性、健壮性的同时,同时有可以方便的移植,所以我们可以采用JDBC连接数据库。JDBC是一种可用于执行SQL语句的Java API。它由一些Java语言写的类、界面组成,使开发人员可以用纯Java语言编写完整的数据库应用程序。通过使用JDBC,我们很方便地将SQL语句传送到几乎任何一种数据库。也就是说,我们可以不必写一个程序访问Sybase,写另一个程序访问Oracle,再写一个程序访问Microsoft的SQL Server。用JDBC写的程序能够自动地将SQL语句传送给相应的数据库管理系统。
在本地数据库程序使用Microsoft的Access等数据库时,我们可以使用Sun公司开发的JDBC-ODBC Bridge,用此技术JSP程序就可以访问带有ODBC驱动程序的数据库。这样即保证了JDBC的优点而且保证了纯JSP程序的安全性、完整性、健壮性和可移植性,又可以使用Microsoft提供的ODBC数据源与Access连接。不管对方是何种数据库,只要有ODBC接口就可以直接使用JDBC-ODBC Bridge与数据库连接,而无需因为后端数据库的改变而改动相应的程序代码,实现了应用层与数据库层的完美分离。如果我们需要变后端数据库为MySQL,只需要在ODBC数据源中安装了MySQL的驱动程序之后,就可以直接使用MySQL数据库了。
2、内建的组件
在实现网站的时候,由于客观需要,为了方便区分本地局域网用户与远端连上来的用户并提供相应的权限,我们采用内建的组件Request来捕获每一个联到服务器上的用户的IP地址,通过比较之后给出相应的权限。这样既可以方便管理,而且可以做到本局域网内用户可以使用网站内所有公开的和不对外公开的资源。我们还可以将现有的方法加以改进,将各种IP地址输入到数据库中并且赋予不同的IP地址不同的权限,就可以完整的控制用户使用网站资源了。
会话状态维持是 Web 应用开发者必须面对的问题。为了了解用户是否还在线,我们使用了内建的Session组件,通过给每个登陆用户一个Session变量我们可以在用户非正常离开网站之后,关闭该用户使用的资源,达到节省内存,提高服务器性能的目的。
在JSP中还提供了Cookie类,其构造器有两个参数,分别代表Cookie的名字和值。Cookie类中提供了各种方法设置Cookie的属性,如通过setMaxAge( )方法可以设置Cookie的生存时间。若生存时间为负值,代表浏览器关闭Cookie即消失。生存时间为0,代表删除Cookie,生存时间为正数,代表Cookie存在多少秒。可以用Cookie临时保存用户的账号和口令,JSP可随时读取,验证用户的合法性。可以将用户的浏览状态保存在Cookie中,下次用户再访问网页时,可由JSP向浏览器显示个性化页面。
3、转换Unicode编码
在许多JSP页面的调试过程中都碰到过许多由于汉字编码与Unicode编码转换引起的问题。经常遇到浏览器中看到的 JSP 页面中的汉字都是乱码、JSP 页面无法正常显示GBK汉字、JSP不能接收Form提交的汉字、JSP 数据库读写无法获得正确的内容等等问题。这是因为现在大部分具有国际化特征的软件核心字符处理都是以 Unicode 为基础的,在软件运行时根据当时Locale/Lang/Codepage 设置确定相应的本地字符编码设置,并依此处理本地字符,所以我们应该在处理过程中实现Unicode和本地字符集的相互转换,甚或以Unicode为中间的两个不同本地字符集的相互转换。这种方式在网络环境下被进一步延伸,任何网络两端的字符信息也需要根据字符集的设置转换成可接受的内容。
由于我的IE默认字符集为GB2312,然而Windows默认为GBK,Java则默认为Unicode,所以如果不通过一定的转换,直接在GB2312字符集上显示从GBKàUnicode得到的页面将是一片乱码。JAVA 语言采用Unicode处理字符。但从另一个角度来说,在Java程序中也可以采用非Unicode的转码,重要的是保证程序入口和出口的汉字信息不失真。如完全采用ISO-8859-1来处理汉字也能达到正确的结果。在我的例子中就采用了这种方法,经过转换之后并将网页字符集强制设为GB2312字符集显示,就能够正常显示汉字了。
四、JSP与ASP的比较
ASP 技术也是动态网页开发技术。JSP和ASP从形式上非常相似,但是深入探究下去会发现它们很多的差别,其中最主要的有以下几点:
1、ASP和JSP的工作原理不同
当Web服务器接收到对ASP页面的请求时,它从硬盘或者内存中接受正确的ASP文件,并将这个文件发送给ASP.DLL文件,ASP文件将会从头至尾被解释执行并根据命令要求生成响应的HTML页面送回给浏览器。ASP.DLL会针对每个请求产生一个独立的线程。
JSP由支持它的服务器上的JSP引擎负责解释执行。当服务器接收到一个对某JSP页面的请求时,如果这时对该页面创建或修改后的第一次请求,那么JSP引擎就把该JSP页面内容转变成一个纯Java的Servlet,然后将其编译成Servlet字节代码,这个Servlet可以调用其他的Servlet或JavaBeans,最后将Servlet的执行结果输出给浏览器。JSP页面被编译成Servlet之后,其执行代码以独立线程的方式一直存在于服务器的内存中。以后对该JSP页面提出请求时,不需要重新编译,除非该页面被修改。Java Servlet由于在服务器端运行,并且不包括会占用大量系统资源的GUI,因此运行的速度要比Java Applet和Java独立应用程序快。
2、 JSP的效率和安全性更高
ASP以源码形式存放,以解释方式运行,每次ASP网页调用都需要对源码进行解释,运行效率不高。另外,IIS的漏洞曾使得许多网站源程序大曝光,许多用ASP开发的网站,ASP程序全部被人下载去了,这样多网站的安全性产生了很大的危害。JSP源程序不大可能被下载,特别是Java Bean程序完全可以放到不对外的目录中;而且我们可以将Bean 的JSP原程序删除,只剩下Class文件,网站照样可以运行。
3、JSP的组件方式更方便
ASP通过COM来扩充复杂的功能,如文件上载、发送email以及将业务处理或者复杂计算分离出来成为独立可重复利用的模块。JSP通过JavaBean实现了同样的功能扩充。在开发方面,COM的开发远比JavaBean复杂和繁琐,学会ASP不难,但学会开发COM可不简单。而JavaBean就简单多了,从本文上述示例中可以看出开发JavaBean很方便。
在维护方面,COM必须在服务器上注册,如果修改了COM程序,就必须重新注册,甚至必须关机和重新启动。JavaBean则不需要注册,放在CLASSPATH包含的目录中就行了。如果JavaBean进行了修改,则JSWDK和Tomcat现在还需要关闭和重新运行(但不是关机),但开发者已经许诺将在以后的版本中做到不需要关闭服务器。
另外JSP这种基于组件的模式很有效地提高了应用程序的开发效率,因为这种模式能够使开发人员利用快捷的子组件快速创建模板应用程序,然后再整合一些附加功能以后便可使用。像这样的由于Java语言的优势而产生的有效的方法在JSP中无处不在,并可将其打包成一个JavaBeans或一个EJB组件。
4、JSP的适应平台更广
ASP目前仅适用于NT和IIS。虽然Unix下有ChiliSoft的插件来支持ASP,但是ASP本身的功能有限,必须通过ASP+COM的组合来扩充,而且ActiveX 对象必须事先放置于所选择的平台,Unix下的COM实现起来非常困难。
JSP则不同,几乎所有平台都支持Java,JSP+JavaBean可以在所有平台下通行无阻。NT下IIS通过一个插件,例如JRUN,就能支持JSP。著名的Web服务器Apache已经能够支持JSP。虽然现在NT操作系统占了很大的市场份额,但是在服务器方面Unix的优势仍然很大,而新崛起的Linux更是来势不小。 由于Apache广泛应用在NT、Unix和Linux上,因此JSP有更广泛的运行平台。从一个平台移植到另外一个平台,JSP和JavaBean甚至不用重新编译,因为Java字节码都是标准的与平台无关的。将在实验的JSP网页原封不动地拿到Linux相应的服务器下就运行起来了,感觉非常好。
五、发展与展望
随着Internet/Intranet技术的不断发展,只有服务器端动态网页技术才能满足各种Web应用程序日益提高的要求,因此各种动态网页技术先后出现,如CGI、ASP、PHP及JSP等。JSP技术是很有发展前景并具有强大功能的服务器端动态网页技术。ASP技术虽然不失为一种优秀的Web应用程序开发技术。但同时也应该看到,在Internet上基于Windows NT+IIS的服务器毕竟占少数,有关资料表明大约是15%,其余Web服务器则是基于Unix、Linux等其他操作系统,而JSP由于它的跨平台特性,使得其应用范围极其广泛,而且由于其参与制定标准的厂商众多,并开放源码,提供免费的JSP实现,因此尽管JSP技术目前还处于发展变化之中,但其发展潜力不可低估。
参考文献:
1.何雄,JSP网络程序设计 人民出版社
2.林邦杰,JSP交互网站事务经典 中国青年出版社
3.http://d23xapp2.cn.ibm.com/developerWorks/java/java_chinese/index.shtml
4.Duane K.Fields,Mark A.Kolb, Web Development with Java Server Pages Manning Publications Co.