利用Java Servlet实现在Web服务器平台上的开发
张红
目前,Java在Internet网上的开发技术已非常广
泛,从最初的Java Servlet到与数据库联系在一起的
SQL—J,尤其是JSP技术的迅速发展,使得Java的网
络应用不再是少数人的专利,JSP以其执行的高效性
和使用的方便性,已成为近年来大家首选的Internet
网开发技术[2]。通过使用Servlet,可以通过网页表单
收集用户的输入,将数据库或其它数据源中的数据呈
现给用户以及动态地创建网页。结合使用Java类、
Servlet和JSP,可以创建交互式Web应用程序。以复
杂、内聚的方式动态地生成内容及响应用户输入的网
站。如:用户在电子商务网站上购物或在线帮助时,其
实都在运行Web应用程序Ⅱ]。
1 Servlet的使用
Servlet是由Web服务器运行的java类,即安装
有支持java servlet规范的解释器。该解释器通常被
称为servlet引擎,被优化成使用最少的Web服务器
资源来运行servlet。Java servlet的用途与使用通用
网关接口一CGI实现的程序相同。它能完成CGI所完
成的所有任务,并同时支持一些使用大多数CGI脚本
语言都难以实现的行为。且Servlet对会话提供了全
面支持,会话是一种跟踪Web用户在特定时段如何
浏览网站的方式。Servlet还能使用标准接口直接与
Web服务器进行通信。只要服务器支持Servlet,它就
能与这些程序交换信息。
与Java本身一样,Java servlet也有可移植性的
优点,其次,它在内存方面也是高效的。使用Servlet
比使用CGI脚本来处理用户的请求要快。Servlet是
在服务器上运行一个Java虚拟机,因此在多次调用
同一个Servlet时,它只需加载一次即可。只有在
Servlet发生了变化时,才重新加载Servlet。而且加载
一个修改后的Servlet不需要重新启服务器(当然也
可以通过重新启动服务器来加载 ,因此,由Java
Servlet的种种优点来看,必将代替传统的CGI程序。
多种web服务器支持Servlet,对于新的Servlet
开发人员,可选择Tomcat,它是Apache软件和SUM
Microsystems合作开发的一种开源服务器。且可通
过Apache下载。
2 Servlet的创建与开发
Servlet运行于服务器端,它接受来自客户端的
请求,将处理结果返回客户端。在许多大型应用中可
以作为现有的Internet技术和Java的中间桥梁。
在许多的Internet技术应用中,采用的是三层结
构。第一层是用户服务,第二层是业务服务,第三层是
数据服务。这种结构带来了很大的灵活性。
在三层结构中,第一层可以是任意多的支持Java
的浏览器(包括运行在NC上的和运行在PC或工作
站上的)。复杂的用户界面的处理工作由Java applet
完成;简单的任务可以交给标准的HTML页完成。
applet可以从第二层的服务器上下载到客户机上。
第二层是Java服务器。它由多个Servlet构成,作
为用户服务和数据服务之间的桥梁。这些Servlet使
用应用系统所需的业务规则和正规过程对数据进行
处理。由于业务规则比它们支持的特定业务更频繁地
改变,Servlet的动态可伸缩性使得它成为理想的候
选者。
第三层由数据库组成。该层定义、维护、访问和更
新数据,并管理和满足业务对数据的请求。它可以在
特定的数据库管理系统中实现。
Java servlet的创建和编译方式与其它Java的应
用程序相同。安装两个servlet包,并将其所在的文件
夹加入到CLASSPTH中后,便可以使用JDK的java
编译器或其它编译器来编译。
当web服务器运行servlet以处理用户请求时,
方法init(servletConfig)将自动被调用。即一个Java
servlet能够处理来自不同Web用户的多个请求。
web服务器终止Servlet时,方法destroy?()会
被调用。Servlet的主要任务之一是收集来自web用
户的信息,并提供相应的内容进行响应。如页面上的
一个Web表单,若使用Web浏览器mozilla加载,用
于显示该页面的HTML标记如下:
- (html>
- (body)
- (head><title>RoT一13 translator(/title)</
- head>
- (hi>ROT一13 Translat0r</h1>
- <p)Text to translate:
- (form action ”text"rows=”8”cols= ”55">
- (/textarea>
- )input type=“submit“value= “translate“
- (/form>
- (/body)
- </html>
表单包含在HTML标记(form)和</form>之间,
表单中的每个控件都存储了信息,这些信息可被传递
给Web服务器,进而传递给Java servlet。web浏览器
使用HTTP与服务器进行通信。可以使用两种HTTP
请求来将表单数据发送给服务器:GET和POST。
要将数据发送给浏览器,需要创建一个与浏览器
相关联的Servlet输出流,然后调用该输出流的Prim—
In(string)方法,Servlet输出流由Servletoutputstrean
类表示,这个类位于javax.servlet包中。可以通过调
用HttpservletResponse类的getOutputstream()方法
来获得这样的流。
如下例:使用HttpservletResponse对象response
创建一个Servlet输出流,然后将一个简短的网页发
送到这个流中:
- Serevletoutputstream out= response.getout—
- putstream();
- Out.println(”(html”>;
- Out.println(”(body)”);
- OUt.println(”(hi)hello world!</hl>”;
- Out.println(”</body)”;
- Out.println(”</html>”;
通常,Web是一种无状态的协议,它没有一个简
单的方法去跟踪用户在页面间导航的情况,Web浏
览器向服务器请求URL时,将收到相应的文件,随后
服务器将不会记忆,也不会采取措施来跟踪用户一段
时间内在网上的操作。如果仅仅提供一系列静态页
面,上述信息并不重要。但对很多用web应用程序而
言,这些信息确是不可缺少的。尤其在电子商务中。
3 Java servlet数据访问
基于Web的多数据库访问是电子商务和电子政
务迅速发展而出现的一种多数据库联合应用的形式。
在数据库异构,操作系统异构的条件下,对于数据量
很大的这种多数据库应用问题,只有Java技术才有
能力解决。
对于在Web下的多数据库访问,Java的新技术
是Servlet。Java Servlet是在服务器端运行的Java程
序。现在随着Servlet API2.4的引入,服务器的
Servlet将把Java Web软件开发带向更高的层次。
Servlet提供了快捷、强大、灵活的开发环境。开发出
来的Servlet可以在服务器的进程空间里运行,并能
同时处理多个请求。当然,最值得称道的是Servlet的
平台无关性。
对于基于Web的多数据库访问,Java Bean技术
可以提供一个比较强大、灵活的解决方案。首先构造
多个Java Bean,在这些模型组件里,要处理数据库的
连接、定义,查找、插入、删除操作等方法,并要实现多
线程,然后构造编写调用Java Bean的Servlet,这样可
以实现对多数据库的访问。Java Bean的结构如下:
- public class DatabaseConnectBe an
- (
- 定义数据库连接的成员;
- 定义连接的方法()
- )
- 在Servlet中调用Java Bean的过程为:
- public class UsedatabaseBean extends
- HttpServlet
- (
- public void doGet (httpServletRequest req,
- HttpServletResponse resp) throws ServletExeep—
- tion,IOException
- (
- )
- public void doPost (httpServletRequest req,
- HttpSerVletResponse resp) throws ServletExcep—
- tion,IOException
- {
- //创建Java Bean的对象
- DatabaseC0nnectBean conBean =:= newDatabaseConnectBean(⋯ ⋯ );
- //使用conBean进行数据库的操作
- ● ● ● ● ● ●
- )
- )
从上述的过程和语句可以发现,使用Servlet技
术可以访问各种不同类型的数据库,但是使用Servlet
技术下的Java Bean技术要保证数据库数据的一致
性,应在Java Bean中可以使用Java的线程技术中的
同步等方法来实现对数据库的连接、操作,但这样将
加大程序员的编程实现。所以使用Servlet技术下的
Java Bean能同时对多个数据库实体的访问,但实现
起来不方便。
4 Java Servlet与JSP的结合
4.1 JSP
JSP是一种基于Java Servlet的Web开发技术。
它和ASP非常相似,但嵌入HTML页面的执行代码
不是VBScript之类的脚本,而是Java代码。在Sun正
式发布JSP(JavaServer Pages)之后,这种新的Web
应用开发技术很快引起了人们的关注。JSP为创建高
度动态的Web应用提供了一个独特的开发环境。按
照Sun的说法,JSP能够适应市场上包括Apache
WebServer、IIS4.0在内的85 的服务器产品。
在执行JSP页面时,JSP页面先被转换成Java
源文件,然后又被编译成class文件(eP Servlet)。这
些都必须有Servlet engine和JSP engine的支持,必
须在Web服务器上安装相应的软件,如jserv、gnu—
jsp。与ASP一样,JSP中的Java代码均在服务器端
执行。因此,在浏览器中使用“查看源文件”菜单是无
法看到JSP源代码的,只能看到结果HTML代码。
事实证明,Java Servlet是一种开发web应用的
理想构架。JSP以Servlet技术为基础,又在许多方面
作了改进。JSP页面看起来象普通HTML页面,但它
允许嵌入执行代码,在这一点上,它和ASP技术非常
相似。使用JSP,可以将网页网页的静态内容放到
HTML文档中,并在其中调用Servlet。
JSP是Servlet的补充,而不是替代品,它使Web
如下的两种内容分开:
静态内容;网页中不变的部分,如网上商店中关
于商品的介绍。
动态内容:Servlet生成的网页部分,如商品的价
格和供货情况,这些数据可能随商品的销售而变化
如果只使用Servlet,要进行细微的修改如:更正输入
错误、重写段落或修改HTML标记以改变网页的呈
现方式将极其艰难。即要进行任何修改,都必须对
Servlet进行编辑、编译、测试,并将其重新部署到
Web服务器上。
4.2 JSP数据和JavaScript数据交互[。]
对于Web程序来说,前端(JavaScript)和后端
(JSP/Servlet)是没法共用数据的,只能是后端程序
(JSP)把数据输出,生成页面到前端,这时候生成的
页面中的JavaScript代码才有可能得到所谓jsp的数
据。同样的,只有把JavaScript里的数据提交给后端
JSP代码,JSP程序中才能得到JavaScript的数据。
以下是实现在页面的JavaScript中使用jsp中的
数据或是在JSP中使用页面的JavaScript数据的方
法。 、
4.3 页面中的JavaScript的数据如何提交给后台的
JSP程序
(1)可以将JavaScript的数据以XXX.JSP?varl—
aaa~var2=bbb的形式作为URL的参数传给JSP程
序,此时在jsp中用
< String strVarl — request. getParameter (”
varl ); >
就可以获取到JavaScript脚本传递过来的数据;
(2)使用JavaScript通过在表单里加入隐藏域信
息,然后用表单提交的方式把数据传递给JSP程序。
可参考下面的脚本:
(script language=“JavaScript“、
<! 一一
/* * * * * * * * * * * * * * * * * * * * * *
* * * * * * -X- * -)6 * * * * * * * * * * * * *
* * -X- * -X- -)6 * * * * * * * * * * * * *
*JavaScript脚本,放置在页面中的任何位置都
可以
*insertclick()函数获取JSP传递到页面中的变
量varMC,
*然后就可以在JavaScript中修改这个变量的
值,再通过
*post的方式提交给JSP程序来使用。
- function insertclick(){
- varl— document.al1.mc.value;//获取页面form
- 中的变量值
- varl— varl+ ”名称”;
- document.insertForm.submit();
- }
- l|一一、
- (/script)
- <!一一html页面form表单,放置在html页面中的
- 位置不限一一>
- (form name= ”insertForm‘f method=“post”action
- 一 yourJSP 、
- <!一一下面这一句是获取JSP程序中传递过来的变
- 量值一一>
- (input type= ”hidden”name一”me”value一”< 一
- varM C >”>
- <input type一”button”value=”提交”onclick一”in—
- sertclick()”>
- </form)
- 4.4 JavaScript数据使用方法
- 直接在JavaScript脚本中用就可以把jsp程序中
- 的数据传递给JavaScript脚本使用。可参考下面的脚
- 本:
- (!一一html页面form表单,放置在html页面中的
- 位置不限一一>
- (form name::“insertForm“ method= “post” action
- 一”yourJSP”、
- (input吣pe一”hidden“name一“mc”value- ⋯t
- </form>
- (script language一“JavaSeript”、
- <! 一一
- /* * * * * * * * * * * * * * * * * * * * * *
- * * -X- * * -)6 * * * -)6 * "X- * * * * * * * * * *
- * * * * * * * * * * -X- * * * * * -X" -X- *
- * JavaScript脚本,放置在页面中form 以后的
- 任何位置都可以
- *使用JavaScirpt获取JSP传递到页面中的变
- 量varMC,
- *然后就可以在JavaScript中使用这个变量的
- 值,通过
- *JavaScript脚本赋值给form中的隐藏域。
- * * -)6 * * * * -)6 * * -)6 -X- * -X- * * * * -)6 * * *
- * * * * * -)6 * * * * * -)6 * * * * * * * * * -)6
- * * * * * * * * * * * * * * * * * * */
- varl= ”( -varMC >”;//获取JSP中的变
- 量值
- document.al1.mc.value==:vat1:
- f}一一、
- (/script
5 Web应用下实现定时任务的简便方法
在web方式下,如果要实现定期执行某些任务的
话,除了用quartz等第三方开源工具外,我们可以使
用Timer和TimeTask来完成指定的定时任务。
第一步:创建一个任务管理类,实现ServletCon—
textListener接口以下是引用片段:
- public class TaskM anager implements Servlet—
- C0ntextListener f
- |
- *每天的毫秒数
- */
- public static final long PERIOD—DAY = Da—
- teUtils.M ILLIS_IN—DAY;
- /**
- *一周内的毫秒数
- */
- public static final long PER10D—W EEK = PE—
- RIOD—DAY * 7;
- |
- * 无延迟
- }
- public static final long NO—DELAY — O:
- |
- *定时器
- |
- private Timer timer;
- /**
- *在Web应用启动时初始化任务
- l
- public void c0ntextInitialized (ServletCon—
- textEvent event)(
- //定义定时器
- timer= new Timer(”数据库表备份”,true);
- //启动备份任务,每月(4个星期)执行一次
- timer.schedule (new BackUpTableTask ( ),
- NO—DELAY,PERIOD—WEEK * 4);
- //timer.schedule(new BaekUpTableTask(),
- NO—DELAY ,30000);
- }
- | *
- *在Web应用结束时停止任务
- |
- public void contextDestroyed (ServletCon—
- textEvent event){
- timer.cancel();//定时器销毁
- )
6 结束语
Servlet可以使用除图形用户界面外的所有Java
语言特性,因此我们可以用它来创建复杂的Web应
用程序。Servlet有不同于应用程序和小程序的地方;
且可以将Servlet作为Apache Web服务器和其他服
务器的一部份来运行;用Servlet还可接收Web表单
中的数据;Servlet还可动态生成网页内容。使用
Servlet技术可以访问各种不同类型的数据库,它是
一种开发Web应用的理想构架。~pServlet可以简化
困难的web开发工作,并使得简单的工作更加简单