All articles| All Pictures| All Softwares| All Video| Go home page| Write articles| Upload pictures

Reading number is top 10 articles
PHPUnit袖珍指南之PHPUnit的目的_php资料_编程技术
HTML教程-收集的常用的HTML标签(5)_[Html教程]
ADO.NET,2.0:如何排除错误信息_.net资料_编程技术
使用PHP4.2.0及以后版本的注意事项_[PHP教程]
使用javascript脚本控制网页Table的显示隐藏_JavaScript技术_编程技术
文字链接技术基础_JavaScript技术_编程技术
DIV+CSS网页制作布局技巧学习_[Html教程]
如何用vbscript实现计算机的关闭或重启_JavaScript技术_编程技术
C#,2.0中泛型编程思想分析_[Asp.Net教程]
SQL,Server,CLR全功略之二---CLR存储过程_mssql学习_编程技术
Reading number is top 10 pictures
天安门景物系列(一)
In the world the most mysterious 21 place landscape3
这还能睡得着?
29 the belle stars after bath figure1
两个妞在等世界上最短的火车
去瑜伽会所面试的经过
Discharge accidentally Actresses by the breast3
Discharge accidentally Actresses by the breast2
Born After 90 Beijing sports university campus flower photos2
Beautiful Japanese beauty(漂亮的日本美女)2
Download software ranking
C#与.NET技术平台实战演练
Tram sex maniac 2 (H) rar bag3
C++教程第四版
apache-tomcat-6.0.33
虚拟机5.5.3版
C语言教程TXT
The cock of the Grosvenor LTD handsome
网络管理员第三版
Unix video tutorial6
Unix video tutorial14
归海一刀 published in(发表于) 2014/3/16 2:51:54 Edit(编辑)
AJAX实例入门_[AJAX教程]_0

AJAX实例入门_[AJAX教程]_0

AJAX实例入门_[AJAX教程]

一、开门见山


  这些时间,瞎子也看得见,AJAX正大踏步的朝我们走来。不管我们是拥护也好,反对也罢,还是视而不见,AJAX像一阵潮流,席转了我们所有的人。


  关于AJAX的定义也好,大话也好,早有人在网上发表了汗牛充栋的文字,在这里我也不想照本宣科。


  只想说说我感觉到的一些优点,对于不对,大家也可以和我讨论:


  首先是异步交互,用户感觉不到页面的提交,当然也不等待页面返回。这是使用了AJAX技术的页面给用户的第一感觉。


  其次是响应速度快,这也是用户强烈体验。


  然后是与我们开发者相关的,复杂UI的成功处理,一直以来,我们对B/S模式的UI不如C/S模式UI丰富而苦恼。现在由于AJAX大量使用JS,使得复杂的UI的设计变得更加成功。


  最后,AJAX请求的返回对象为XML文件,这也是一个潮流,就是WEB SERVICE潮流一样。易于和WEB SERVICE结合起来。


  好了,闲话少说,让我们转入正题吧。


  我们的第一个例子是基于Servlet为后台的一个web应用。


  二、基于Servlet的AJAX

  这是一个很常见的UI,当用户在第一个选择框里选择ZHEJIANG时,第二个选择框要出现ZHEJIANG的城市;当用户在第一个选择框里选择JIANGSU时,第二个选择框里要出现JIANGSU的城市。


  首先,我们来看配置文件web.xml,在里面配置一个servlet,跟往常一样:


xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">


SelectCityServlet
com.stephen.servlet.SelectCityServlet



SelectCityServlet
/servlet/SelectCityServlet



  然后,来看我们的JSP文件:





MyHtml.html















  第一眼看来,跟我们平常的JSP没有两样。仔细一看,不同在JS里头。


  我们首先来看第一个方法:getResult(stateVal),在这个方法里,首先是取得XmlHttpRequest;然后设置该请求的url:req.open("GET",url, true);接着设置请求返回值的接收方法:req.onreadystatechange = complete;该返回值的接收方法为——complete();最后是发送请求:req.send(null);


  然后我们来看我们的返回值接收方法:complete(),这这个方法里,首先判断是否正确返回,如果正确返回,用DOM对返回的XML文件进行解析。关于DOM的使用,这里不再讲述,请大家参阅相关文档。得到city的值以后,再通过buildSelect(str,sel)方法赋值到相应的选择框里头去。

  最后我们来看看Servlet文件:


import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
* @author Administrator
*
* TODO To change the template for this generated type comment go to
* Window - Preferences - Java - Code Style - Code Templates
*/
public class SelectCityServlet extends HttpServlet {


  public SelectCityServlet() {
  super();
  }

  public void destroy() {
  super.destroy();
  }

  public void doGet(HttpServletRequest request, HttpServletResponse response)
  throws ServletException, IOException {
  response.setContentType("text/xml");
  response.setHeader("Cache-Control", "no-cache");
  String state = request.getParameter("state");
  StringBuffer sb=new StringBuffer("");
  if ("zj".equals(state)){
  sb.append("hangzhouhuzhou");
  } else if("zs".equals(state)){
  sb.append("nanjingyangzhousuzhou");
  }
  sb.append("
");
  PrintWriter out=response.getWriter();
  out.write(sb.toString());
  out.close();
  }
}


  这个类也十分简单,首先是从request里取得state参数,然后根据state参数生成相应的XML文件,最后将XML文件输出到PrintWriter对象里。


  到现在为止,第一个例子的代码已经全部结束。是不是比较简单?我们进入到第二个实例吧!这次是基于JSP的AJAX的一个应用。


  三、基于JSP的AJAX


这个例子是关于输入校验的问题,我们知道,在申请用户的时候,需要去数据库对该用户性进行唯一性确认,然后才能继续往下申请。

  这种校验需要访问后台数据库,但又不希望用户在这里提交后等待,当然是AJAX技术大显身手的时候了。


  首先来看显示UI的JSP:





Check.html












User Name: 
onClick="userCheck()">




  所有的JS都跟上一个例子一样,不同的只是对返回值的操作,这次是用alert来显示:alert(http_request.responseText);


  我们来看处理逻辑JSP:


<%@ page contentType="text/html; charset=gb2312" language="java" errorPage="" %>
<%
String username= request.getParameter("username");
if("educhina".equals(username)) out.print("用户名已经被注册,请更换一个用户名。");
else out.print("用户名尚未被使用,您可以继续。");
%>


  非常简单,先取得参数,然后作处理,最后将结果打印在out里。
  我们的第三个例子仍然以这个唯一性校验为例子,这次结合Struts开发框架来完成AJAX的开发。


  四、基于Struts的AJAX


  首先,我们仍然是对Struts应用来做配置,仍然是在struts-config,xml文件里做配置,如下:


  scope="request" path="/ajax/check">
  



  跟普通的Struts应用的配置一样,只是没有ActionForm的配置。


  下面是Action类:


package com.ajax;

import java.io.PrintWriter;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.action.DynaActionForm;

/**
* @author Administrator
*
* TODO To change the template for this generated type comment go to
* Window - Preferences - Java - Code Style - Code Templates
*/
public class CheckAction extends Action
{
public final ActionForward execute(ActionMapping mapping, ActionForm form,
  HttpServletRequest request,
  HttpServletResponse response)
throws Exception
{
  System.out.println("haha...............................");
  String username= request.getParameter("username");
  System.out.println(username);
  String retn;
  if("educhina".equals(username)) retn = "Can't use the same name with the old use,pls select a difference...";
  else retn = "congraducation!you can use this name....";
  PrintWriter out=response.getWriter();
  out.write(retn);
  out.close();
  return mapping.findForward("success");
}
public static void main(String[] args)
{
}
}


  我们可以看到里面的逻辑跟上例中Servlet里的逻辑一样。最后,我们来看看JSP:





Check.html












User Name:&nbsp;
onClick="userCheck()">




  我们可以看到,JSP基本是一样的,除了要发送的url:ajax/check.do?username='+username。


  最后,我们来看一个基于Struts和AJAX的复杂一些的例子,如果不用AJAX技术,UI的代码将十分复杂。


  五、一个复杂的实例


  这是一个比较复杂的级联:一共八个列表框,三个下拉框。从第一个列表框里选择到第二个列表框里后,第一个选择框里的选项是第二个列表框的选择;然后,在第一个选择框里选择以后,与选择值关联的一些选项出现在第三个列表框里。从第三个列表框里选择选项到第四个列表框里,同样,第二个选择框的选项也是第四个列表框的选项;如果对第二个选择框进行选择后,与选择值关联的一些选项出现在第六个列表框里,依次类推……


  这个UI的逻辑就比较复杂,但使用了AJAX使得我们实现起来就简单多了,这个例子我们除了使用Action类,还要用到POJO类和Business类,然后我们扩展的话,可以通过Business类和数据库连接起来。


  我们还是先看配置文件:


  scope="request" path="/ajax/select">
  


然后看看Action类:


/*
/**
* Title : Base Dict Class
* Description : here Description is the function of class, here maybe multirows
* Copyright: Copyright (c) 2004
* @company Freeborders Co., Ltd.
* @Goal Feng   
* @Version   1.0
*/

package com.ajax;

import java.io.PrintWriter;
import java.util.List;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;

/**
* @author Administrator
*
* TODO To change the template for this generated type comment go to
* Window - Preferences - Java - Code Style - Code Templates
*/
public class SelectAction extends Action
{
public final ActionForward execute(ActionMapping mapping, ActionForm form,
  HttpServletRequest request,
  HttpServletResponse response)
throws Exception
{
  response.setContentType("text/xml");
  response.setHeader("Cache-Control", "no-cache");
  String type = request.getParameter("type");
  String id = request.getParameter("id");
  System.out.println(id);
  StringBuffer sb=new StringBuffer("");
  PrintWriter out=response.getWriter();
  out.write(sb.toString());
  out.close();
  System.out.println(sb.toString());
  return mapping.findForward("success");
}
public static void main(String[] args)
{
}
}

  POJO类和Business类:
package com.ajax;
/**
* @author Administrator
*
* TODO To change the template for this generated type comment go to
* Window - Preferences - Java - Code Style - Code Templates
*/
public class SelectForm
{
private String text;
private String value;

/**
* @return Returns the text.
*/
public String getText()
{
return text;
}
/**
* @param text The text to set.
*/
public void setText(String text)
{
this.text = text;
}
/**
* @return Returns the value.
*/
public String getValue()
{
return value;
}
/**
* @param value The value to set.
*/
public void setValue(String value)
{
this.value = value;
}
public static void main(String[] args)
{
}
}


package com.ajax;

import java.util.ArrayList;
import java.util.List;

/**
* @author Administrator
*
* TODO To change the template for this generated type comment go to
* Window - Preferences - Java - Code Style - Code Templates
*/
public class SelectBusiness
{
public List getData(String id)
{
ArrayList list = new ArrayList();
for(int i=1;i<6;i++)
{
  SelectForm form = new SelectForm();
  form.setText(id+i);
  form.setValue(id+i);
  list.add(form);
}
return list;
}

public static void main(String[] args)
{
}
}


下一页







添加到del.icio.us 添加到新浪ViVi 添加到百度搜藏 添加到POCO网摘 添加到天天网摘365Key 添加到和讯网摘 添加到天极网摘 添加到黑米书签 添加到QQ书签 添加到雅虎收藏 添加到奇客发现 diigo it 添加到饭否 添加到飞豆订阅 添加到抓虾收藏 添加到鲜果订阅 digg it 貼到funP 添加到有道阅读 Live Favorites 添加到Newsvine 打印本页 用Email发送本页 在Facebook上分享


Disclaimer Privacy Policy About us Site Map

If you have any requirements, please contact webmaster。(如果有什么要求,请联系站长)
Copyright ©2011-
uuhomepage.com, Inc. All rights reserved.