作为J2EE开发人员,我们经常关注“后端机制(backend mechanics)”。我们通常会忘记J2EE成功之处在于WEB应用程序方面。许多原因使得人们喜欢利用WEB开发应用程序,但主要原因还是因为其易于部署的特点,允许站点以尽可能底的成本拥有上百万的用户。我们在后端投入太多的精力,使得我们在WEB用户界面对用户的相应灵敏方面投入不足。
本文介绍一种方法,Ajax,使用它可以构建更加更为动态和响应更加灵敏的Web应用程序。该方法的关键在于对浏览器端的JavaScript、DHTML和与服务器异步通讯的组合。Ajax用来描述一组技术,它使浏览器可以为用户提供更为自然的浏览体验。在Ajax之前,Web站点强制用户进入提交/等待/重新显示范例。用户的动作总是与服务器的“思考时间”同步。Ajax提供了与服务器异步通讯的能力,从而使用户从请求/响应的循环中解脱出来。借助Ajax,用户可以在单击按钮时,使用JavaScript和DHTML立即更新UI,并向服务器发出异步请求,以执行查询或更新数据库。当请求返回时,可以利用JavaScript和CSS来相应的更新UI而不是刷新整个页面。
定义Ajax,Ajax不是一种新技术,而是几种蓬勃发展的几种强大技术以新的方式组合而成,Ajax包括:基于XHTML和CSS标准的表示;使用Document Object Model进行动态的显示和交互;使用XML Request与服务器进行异步通讯;使用JavaScript绑定一切。
Ajax的工作原理,Ajax的核心是JavaScript和XMLHttpRequest。该对象在Internet Explorer5中首次引入,它是一种支持异步请求的技术。简单的说:XmlHttpRequest使你可以使用JavaScript向服务器提出请求并处理响应,而不阻塞用户。在创建Web站点时,在客户端执行屏幕更新为用户提供了很大的灵活性能。下面是使用Ajax完成的功能:1、动态更新购物车的物品总数,无需用户单击Update并等待服务器发送整个页面。2、提升站点的性能,这是通过减少从服务器下载的数据量来实现的。例如:当更新购物车一个物品的数量时,会重新载入整个页面,这必须下载32K的数据,而使用Ajax计算新的总量,服务器只需要返回新的总量值,因此所需要的带宽仅仅为原来的百分之一。3、消除了用户每次输入时的页面刷新。例如,在Ajax中,如果用户在分页列表上单击Next,则服务器数据只刷新列表而不是整个页面。
从Ajax的序列的起点开始,创建和分派来自浏览器的XMLHttpRequest。但不同的浏览器创建XMLHttpRequest的方法各不相同。下列JavaScript的代码,可以检测出浏览器要使用的正确方法,并返回一个可以使用的XMLHttpRequest。
<script language="JavaScript">
<!--
//定义xmlHttp全局对象
var xmlHttp = null;
//根据不同浏览器创建方法的不同进行区分,确定xmlHttp对象的顺利创建
function createXMLHttpRequest(){
if(window.ActiveXObject){
xmlHttp = new window.ActiveXObject("Microsoft.XMLHTTP");
}else if(window.XMLHttpRequest){
xmlHttp = new window.XMLHttpRequest();
}
}
//定义一个函数,可以让JS脚本可以去动态的访问后台的代码
function queryMess(){
//定义一个要查询所需要的参数
var jrnl_id = document.getElementById("jrnl_id").value;
if(jrnl_id==""){
return ;
}
//定义JS脚本要访问的地址,从访问的地址获取数据来源
var url = "../jsp/gywork/getInfo.jsp?user_id="+jrnl_id;
//调用创建xmlHttp对象的函数,来创建一个对象
this.createXMLHttpRequest();
//事先给xmlHttp对象获取数据返回后一个处理数据的函数,即:回调函数
//xmlHttp.onreadystatechange属性,是xmlHttp对象的状态改变所触发事件的事件处理程序
xmlHttp.onreadystatechange = dealDate;
//调用xmlHttp对象去访问地址,或后台内容获取数据
xmlHttp.open("GET",url,true);
//xmlHttp.send(null);用来发送信息参数,是对于发送方法为post,若发送请求的方法为get
//则发送的内容为null,xmlHttp.open("POST","login",true);发送请求的地址信息方式为
//XMLHttpReq.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
xmlHttp.send(null);
}
//定义一个回调函数,用作xmlHttp对象获取数据后进行处理的操作
function dealDate(){
/*xmlHttp.readyState属性,是xmlHttp对象的对象状态值,0表示未初始化,1表示正在加载,
2表示加载完毕,3表示开始进行交互,4表示整个处理完成
*/
if(xmlHttp.readyState == 4){
/*xmlHttp.status从服务器返回的数字代码,404表示未找到,200表示就绪,不管是否获取
到数据,200表示已经顺利完成访问服务器后,顺利返回未发生异常
*/
if(xmlHttp.status == 200){
/*数据返回后可以使用xmlHttp.responseText属性获取数据,但是xmlHttp.responseText
返回的是一个字符串,对于比较复杂的数据结构可以利用xmlHttp.responseXML属性来进行
处理数据,如果返回值是一条记录,则可以处理数据的XML样式为:
<?xml version="1.0" encoding="gb2312" ?>
<result>根节点
<username>sa</username>子节点
<userid>23</username>子节点
</result>
可以根据节电名称来获取节点值,例如:*/
var responseXML = xmlHttp.reponseXML;
var username = responseXML.getElementsByTagName("username")[0].firstChild.nodeValue;
var userid = responseXML.getElementByTagName("userid")[0].firstChild.nodeValue;
/*
若返回值为一组数据,则可以处理数据的XML样式为:
<? xml version="1.0" encoding="gb2312" ?>
<result>根节点
<users>子节点
<name>sa</name>
<id>12</id>
</users>
<users>
<name>ss</name>
<id>22</id>
</users>
</result>对XML进行解析来获取数据
*/
var responseXML = xmlHttp.reponseXML;
//获取根节点,获取根节点的节点名称:var domName = responseXML.documentElement.tagName;
var xmldom = responseXML.documentElement;
var len = xmldom.childNodes.length;
for(var i=0;i<len;i++){
var child = xmldom.childNodes.item(i);//根据根节点的长度,遍历创建子节点对象child
for(var j=0;j<child.childNodes.length;j++){ //相当于users节点
var node = child.childNodes.item(j);
document.writeln(node.tagName+"||"+node.text);
}
}
/*
打印结果为:
sa || 12
ss || 22
*/
}
}else{
alert("获取数据发生错误!");
}
}
//-->
</script>
页面所请求得Jsp页面源代码如下,其中包括如何处理运算后得到的结果集:
<%@ page contentType="text/html;charset=gb2312" %>
<%@ page import="java.util.List" %>
<%@ page import="java.util.Map" %>
<%@ page import="com.yc.ycportal.blockimp.service.CommonService" %>
<%@ page import="com.yc.ycportal.util.GetRaq"%>
<%
response.setContentType("text/xml");
String userId = request.getParameter("userId");
String organ = new GetRaq(session).getParamid();
//Create the response XML
if (userId != null && !"".equals(userId.trim())) {
List gyList = CommonService.getInstance().getDynamicTable("select * from dic_counter where counter_id='" + userId + "' and organ_id='"+organ+"'");
if (gyList != null && gyList.size() == 1) {
Map gyMap = (Map) gyList.get(0);
String gyName = (String) gyMap.get("COUNTER_NAME");//柜员姓名
String organId = (String) gyMap.get("ORGAN_ID");//柜员所属行号
List organList = CommonService.getInstance().getDynamicTable("select * from dic_organ where organ_id='31" + organId + "'");
if( organList != null && organList.size() == 1) {
Map organMap = (Map) organList.get(0);
String organName = (String) organMap.get("ORGAN_NAME");//获取柜员所属行名
//组织需要返回的xml
StringBuffer xml = new StringBuffer("<?xml version=\"1.0\" encoding=\"gb2312\" ?><result><queryResult>success</queryResult><name>").append(gyName).append("</name><bank_id>").append(organId).append("</bank_id><bank_name>").append(organName).append("</bank_name></result>");
//Send the response back to the browser
response.getWriter().write(xml.toString());
}else{
response.getWriter().write("<result><queryResult>failed</queryResult></result>");
}
}else{
response.getWriter().write("<result><queryResult>failed</queryResult></result>");
}
}else{
response.getWriter().write("<result><queryResult>failed</queryResult></result>");
}
%>
分享到:
相关推荐
面向Java开发人员的Ajax技术是构建现代Web应用程序的关键技术之一,尤其对于提升用户体验至关重要。Ajax,全称为异步JavaScript和XML,它打破了传统的Web应用程序页面重载模式,使得用户可以在不进行完整页面刷新的...
对于Java开发人员来说,理解并掌握Ajax技术是构建交互性强、用户体验良好的Web应用程序的关键。本资源面向Java开发者,旨在帮助他们利用Ajax创建动态的Java应用。 首先,Ajax的核心原理在于XMLHttpRequest对象,它...
面向Java开发人员的Ajax技术,特别是与Jetty服务器和Direct Web Remoting (DWR)框架的结合,为创建高性能、可扩展的Comet应用程序提供了强大的工具。Comet是一种Web交互模式,它允许服务器向客户端推送数据,而不...
第 12 部分:面向 Java 开发人员的 Ajax: 构建动态的 Java 应用程序 第 13 部分:面向 Java 开发人员的 Ajax: Ajax 的 Java 对象序列化 第 14部分:面向 Java 开发人员的 Ajax 结合 Direct Web Remoting 使用 Ajax ...
在本文中,我们将深入探讨如何面向Java开发人员使用Ajax,特别是结合DWR框架来实现高效的数据交互。DWR允许Java对象直接在客户端JavaScript中调用,消除了传统Ajax需要通过XMLHttpRequest对象手动处理HTTP请求的繁琐...
Google Web Toolkit (GWT) 是一个强大的工具,它允许Java开发人员使用熟悉的Java语言来构建高性能、跨浏览器的Ajax应用程序。GWT通过将Java代码编译为优化过的JavaScript,解决了Web开发中的语言障碍,使得开发人员...
Java Web整合开发是构建Web应用程序的关键技术,涵盖了Java语言、Eclipse集成开发环境(IDE)、Struts 2框架以及Ajax异步JavaScript和XML技术。这个主题深入探讨了这些技术如何协同工作,创建出高效、用户友好的Web...
对于Java开发人员来说,掌握Ajax可以帮助他们构建更高效、更具交互性的Web应用程序。** Ajax的核心在于创建异步通信,它使得浏览器可以与服务器进行数据交换,而不必等待整个页面的刷新。这极大地提升了用户体验,...
### 面向Java开发人员探索Google Web Toolkit:深度解析与应用 Google Web Toolkit(GWT)是一款由Google推出的开源框架,专为Java开发者设计,旨在简化和加速Web应用程序的开发过程。它允许开发者使用Java语言编写...
Spring是一个全面的Java企业级应用框架,支持依赖注入、AOP(面向切面编程)、事务管理等。第十四章的PPT将详细介绍Spring的核心特性,以及如何在实际项目中应用。 7. **XML**: XML是一种标记语言,常用于数据...
传统的Web应用开发通常将客户端和服务器端代码库分开,而GWT打破了这种界限,提供了一个Java API,开发者可以基于这个API构建基于组件的图形用户界面(GUI)。这使得使用GWT开发Web应用类似于使用Swing或SWT开发桌面...
Java Web开发是构建基于互联网应用程序的关键技术,涵盖了多种框架和工具。这个压缩包中的资源,"零基础学Java.Web开发:JSP Servlet Struts Spring Hibernate Ajax(PPT)",旨在为初学者提供一个全面的学习路径,从...
Java、Servlet 和 Ajax 是构建动态网站的关键技术,它们共同为用户提供了交互性和实时更新的能力。本指南将深入解析这些技术,并结合实际应用,帮助您理解和掌握如何利用它们来开发高效、响应迅速的网络应用。 一、...
首先,JSP是Java的一种视图技术,它允许开发人员在HTML或XML页面中嵌入Java代码,以动态生成网页内容。Servlet则作为服务器端的Java组件,负责处理HTTP请求和生成响应,是JSP背后的执行引擎。两者结合,为Web应用...
【Java Web开发】是IT领域中的一个重要分支,它结合了Java编程语言与Web技术,用于构建动态、交互式的网络应用程序。对于初学者来说,掌握Java Web开发的基本概念和技术是迈向专业开发者的必经之路。本资源"零基础学...
【标题】"0Java.Web开发:JSP.Servlet.Struts.Spring.Hibernate.Ajax"涉及的是Java Web应用程序开发的关键技术栈,主要包括以下几个核心组件: 1. **JSP(JavaServer Pages)**:JSP是Java平台上的动态网页技术,...
Java是一种多平台、面向对象的编程语言,广泛用于构建服务器端应用程序,而Ajax(Asynchronous JavaScript and XML)则是一种用于创建动态和交互式网页的技术。让我们深入了解一下这两个技术以及它们如何协同工作。 ...
7. **Spring框架**:Spring是Java领域最流行的轻量级应用框架,提供依赖注入、AOP(面向切面编程)、MVC(模型-视图-控制器)等特性,简化企业级应用开发。 这些文档可能涵盖了以下内容: - Java基础:变量、数据...