基于Ajax和Servlet实现无刷新动态Web应用

基于Ajax和Servlet实现无刷新动态Web应用


2024年6月21日发(作者:)

维普资讯

福建 电脑 2007年第8期 

基于Ajax和Servlet实现无刷新动态Web应用 

曹红 

(丽水学院计算机与信息工程学院浙江丽水323000) 

【摘 要1:针对传统Web应用中浏览器和服务器频繁交换数据刷新页面导致执行速度慢问题,简要分析了Ajax-.框架 

下的WEB应用模式和传统Web应用模式的区别,并阐述了Ajax技术的核心概念及实现机制,提出一种基于Ajax和Servlet 

实现无刷新、按需取数的完整Web应用框架。 

~一一 

【关键字】:Ajax Servlet XML DOM无刷新 

0.前言 

随着Intemet技术的发展.Web应用技术也经历了不断的 

变化。其中Web开发模型几经发展,Aiax成了当前的主流技术。 

结合一定的服务器端技术.Ajax可以在不刷新页面的情况下。实 

现与服务器动态交互.更新页面内容.改变了传统Web应用不 

断等待的状况.突破了页面重载带来的Web可用性障碍。 

1.Aiax与传统Web应用 

传统的Web应用是由一系列连续切换的页面组成.其中大 

部分页面很小.但是用户绝大部分的交互都是通过HTML表单 

的提交而将整个页面切换并刷新.而在这个过程中(下一个页面 

完全显示出来之前)。用户只能等待。 

Ajax技术出现后.为运行于浏览器中的JavaScript脚本提供 

了一种在页面之内与服务器通信的方式一一XMLHttpRequest对 

象的运用。页面内的JavaScript可以在不刷新页面的情况下直接 

从服务器获取数据.或者向服务器提交数据 

传统的Web应用框架和基于Aiax的Web应用框架可以通 

过下面的模型图来描述: 

典型Web/ ̄'用模型 Ajaxweb应用模型 

图一传统Web应用模型和基于Aiax的Web应用模型对比 

这里Ajax应用与传统的Web应用区别主要有三点: 

第一不刷新整个页面.在页面内直接与服务器通信 

第二使用异步方式与服务器通信.不需要打断用户的操 

作,具有更加迅速的的响应能力。 

第三应用仅由少量页面组成。大部分交互在页面之内完 

成,不需要切换整个页面。 

这些特性在不同的应用场合都能够得到体现。 

2.JAVA Servlet简介 

Servlet是位于Web服务器内部的服务器端的Java应用程 

序,它的主要功能在于交互式地浏览和修改数据.动态生成Web 

内容。 

使用Servlet只需要Web服务器包含支持Servlet的Java虚 

拟机即可,与操作系统平台和网络协议无关。故使用Java Servlet 

投入少,可移植性较好,相比其他类似CGI技术.具有更容易使 

用、功能更强大、更节省投资等特点 

3.基于Ajax和Servlet构建Web应用 

这里我们以建立动态级联下拉列表为例来构建基于Ajax 

和Servlet的Web应用模型。 

原理:基于Aiax技术是在无刷新页面的情况下交换数据以 

及异步通信的特性.系统客户端在用户操作上级下拉列表选项 

时。会通过Aiax引擎向服务器请求当前一级项目所属的二级下 

拉列表的所有选项。这样.需要什么就取什么数据。用多少就取 

多少,减少了数据下载总量,不会有数据的冗余和浪费。而且更 

新页面时不用重载页面全部内容.只更新部分页面元素即可。相 

对于传统后台处理并重载的方式.该模型缩短了用户等待时间. 

也把对资源的浪费降到最低。 

图二基于Ajax和Java Servlet的Web应用实现过程时序图 

根据上述工作流程图具体实现方法如下: 

3.1 ITS--+JSp页面test.jsp,关键是包含如下两个下拉列 

表框,并为上级下拉列表指定onChange事件的处理函数getNext 

0: 

<form nanle=”forml”id=”myform”> 

<select rIan =”state”id=”stcteselid”onChange=”getNext0”,> 

<option value=”null”/>please select provice 

<option value=”10”,>北京 

,.option value=”33”,>浙江 

……

(上级列表项也可由服务器动态取得) 

<select narne=”city”id=”cityselld”,> 

</form> 

3.2在页面的JavaScript脚本代码中创建Ajax应用的核心 

组件XMLHttpRequest对象。为兼容客户端不同浏览器采用不同 

的创建方法。典型代码如下: 

<script 1al glI且ge=”JavaScript” 

function createXMLHttpRequest0 I 

Var xmlReq false; 

if(window.XMLHttpRequest)f ,,在非IE浏览器中创建XMLHttpRc— 

quest对象 

xmlReq new XMLHttpRequest0; 

l else if( ndow.ActiveXObject)l HIE通过MS AcdveX刨建 

XMLHttpRequest 

仃y I ,,尝试按新版本IntemetExplorer方法创建 

xmlReq=new ActiveXObject(”Msxml2.XMLIflTP”): 

}catch(e1)I 

仃y I ,,尝试按老版本IntemetExplorer方法创建 

xmlReq=new ActlveXObject(”Microsoft.XMIJClTP ); 

维普资讯

2007年第8期 

】catch(e2】I 】 

福建 电脑 

String search:request.getParan ̄ter(”state”); 

87 

获得请求中state 

】 

】 

etrurn xmlReq; 

参数的值 

String sql:”select namecity.idcity from city where inpmid: ’ 

search+’…; 

】 

</script> 

……

3-3在上级下拉列表的onChange事件处理函数getNext0@ 

利用创建的xmlHttpRequest对象发送HTI’P请求。设置好用来 

java.io.PrintWriter out response.getWriter0; 

(连接后台mySQL数据库,并执行sql语句得到结果集rs,代码略) 

调用r oXMLO方法将关系数据库结果集转换成XML数据格式,并输}竹 

至客户端 

从请求对象接收回调通知的回调函数句柄。 

function getNext0{ 

v8r flag--document.getElementById(”stateselid”1.value; 

vRr url=”servlet/SyncSelectServlet?state=”+flag; 

VSdt"xmlHupReq createXMLHttpRequest0; 

xmlHttpReq.open(”GET”,url,true); 

v8r callbackFunction=getReadyStateHandler(xmlHttpReq.updateList); 

xm|HttpReq onreadystatechange=callbackFunction, 

xmlHttpReq.send(nul1); 

】 

在上述getNext_ 0函数中实现了从创建xmlHttpRequest对 

象、创建回调(caUback)函数、注册回调(callback)函数、到分派并 

发送HrrP请求的一系列过程。应该注意到的是,xrulHttpReq. 

open(”GET”,ur1.true)语句指定了以”GET”的方法打开到目的url 

(即为处理请求的Servlet)的连接。并且通过true参数指定了该 

连接为异步方式,即发出请求后不用等待服务器返回响应.当服 

务器在后台处理该请求的同时用户仍然可以使用表单f甚至调 

用其他javaScfipt方法),这也正是Ajax的由来。 

XMLHttpRequest的onreadystatechange属性告诉服务器在 

运行完成后做什么,而实际上XMLHttpRequest对象从”未初始 

化”到”完成”每一次”readvState”的变化都会引发readystate— 

change事件,通过onreadystatechange属性配置的回词处理函数 

将会被调用。在xmlHttpReq实例中,指定了由getReadyState— 

Handler(xmlHttpReq,updateList)函数返回的一个函数句柄caJ1. 

backFuncfion为该实例的回调函数.getR.eadyStateHandler(xml— 

HttpReq,updateList)返回一个监听XMLHttpRequest实例的匿名 

函数,而真正影响用户界面的是作为该函数参数的uDdateList 

(xmlDo ̄)函数。实现代码如下: 

function getReadyStateHandler(req,handler)I 

returnfunction 0I 

if(req.readyState==4)f 如果请求的状态是”完成” 

if(req.status=:2oo)f 检查是否成功接收了服务器响应 

handler(req.responseXML1:,,将响应XML信息传递给hart. 

der函数处理 

]else I alert(”}rrrP error:”+req.status);】 

l 

】 

} 

3.4服务器端请求处理的Java Servlet实现。在本例应用中. 

服务器端基于TomCat5提供对JSP的支持和作为Servlet的容 

器,后台使用mySQL数据库服务,其中表city结构如下图三所 

不 

图三city表结构 

响应XMLHttpRequest请求的Servlet与处理一个来自浏览 

器的普通的HTrP请求基本上相似,关键是实现doGetO方法或 

者doPost0方法。程序片断: 

import jaVa.io.IOExceptlon; 

public class SyncSelectServlet extends HttpServlet I 

public void doGet(HttpServletRequest request,HttpServletResponse response) 

rawB ServletExeeption,jav丑.io.IOExcepdon I 

response.estHeader(”Cache-Control","no-cache”); 

out.print(rsToXML( ); 

out.close0; 

】 

……

】 

Servlet响应返回XML数据.需要setContentType(”applica— 

tion/xml;charset=utf-8”)方法将响应内容的类型设置为”applica— 

tion/xml“,客户端脚本可以利用DOM(文档对象模型)丰富的 

API处理响应信息。本例应用中使用rsToXML(rs)方法将查询关 

系数据库的结果集转换成一定格式的XML数据。响应的XML 

内容格式如下: 

<?xml version=',”l,0、”encoding=\”UTF一8、__?> 

<state> 

<city> 

<namecity>杭州</namecity> 

<idcity>3301/<idcity> 

/<city> 

<city> 

<namecity> ̄水</namecity> 

<idcity>33 1 l/<idcity> 

/<city> 

/<state> 

3.5页面处理服务器响应.回凋函数更新用户界面的实现 

前文已经指出,本例应用中XMLHttpRequcst对象的回调函数是 

getReadyStateHandler(xmlHttpReq,updateList)函数返回的函数, 

而作为参数的updateList(xmlDoc)i ̄i数才是XMLHttpRequest对 

象请求完成并成功接收服务器响应后实现页面内容更新的直接 

操作者。 

function updateList(xmlDoc){ 

vat showElements=xmlDoc.getElementsByTagName(”city”); 

rag citysel=doeument.getElementByld(”cityselid”); 

cityse1.options.1ength=O; , 先将原有下级下拉列表清空 

fo 8r i=o;i<showElements.1erIgth;i++)I 

v8r xText--showElements[i].childNodes[0].ifrstChild.nodeValue; 

v丑r xValue=showElements[i].childNodes[11.ifrstChild.nodeValue; 

cityse1.options[il=new Option(xText,xValue); 

】 

】 

运用DOM的标准API对XML数据进行解析。实现起来非 

常方便,并且运用DOM操作HTML文档仅仅刷新了页面的一 

部分,页面的其他部分在内存的DOM树中完全没有受影响

因 

此最终实现了无刷新动态更新Web页面,这也正是AiaLx技术展 

现给用户的巧妙之处 

4.结论 

AjaLx中的所有核心技术几乎都是已经成熟而稳定的

而a. 

jaLx的出现则把这些技术天衣无缝的结合了起来,并展现出了无 

与伦比的魅力和强大。再加之与服务器端强大的Java Servlet技 

术的结合,更加如虎添翼。减少等待,使用户能够在B/S架构的 

浏览器中体会到本地桌面应用般的良好体验

这种Web模式将 

得到更广泛的应用 

参考文献: 

1.David Flanagan, ̄davaSc唧t权威指南》【MJ.张铭泽译.,北京:机械工业出 

版社.2003. 

2.柯自聪,《AJAx开发精要)【M】.:IL ̄:,Eff-工业出版社,2006

. 

3.Jason Hunter,william Crawford,lava Servlet编程(第二版)>孙鑫,谢茂 

强译,中国电力出版社.2002. 

4.作者:MoztwWiki标题:(AJAX上手篇>. 

5.作者:Philip McCarthy标题:面向Java开发人员的Ai :构建动态的 

Java应用程序. 


发布者:admin,转转请注明出处:http://www.yc00.com/news/1718905534a2753446.html

相关推荐

发表回复

评论列表(0条)

  • 暂无评论

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信