AJAX实例入门

作者在 2007-07-02 20:59:00 发布以下内容
一、开门见山

  这些时间,瞎子也看得见,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,跟往常一样:

 <web-app version="2.4"
 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">
 
 <servlet>
 <servlet-name>SelectCityServlet</servlet-name>
 <servlet-class>com.stephen.servlet.SelectCityServlet</servlet-class>
 </servlet>
 
 <servlet-mapping>
 <servlet-name>SelectCityServlet</servlet-name>
 <url-pattern>/servlet/SelectCityServlet</url-pattern>
 </servlet-mapping>
 
 </web-app>

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

 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
 <html>
 <head>
 <title>MyHtml.html</title>
 
 <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
 <meta http-equiv="description" content="this is my page">
 
 <!--<link rel="stylesheet" type="text/css" href="./styles.css">-->
 
 </head>
 <script type="text/javascript">
 function getResult(stateVal) {
       var url = "servlet/SelectCityServlet?state="+stateVal;
       if (window.XMLHttpRequest) {
               req = new XMLHttpRequest();
       }else if (window.ActiveXObject) {
               req = new ActiveXObject("Microsoft.XMLHTTP");
       }
       if(req){
               req.open("GET",url, true);
               req.onreadystatechange = complete;
               req.send(null);
       }
 }
 function complete(){
       if (req.readyState == 4) {
               if (req.status == 200) {
                       var city = req.responseXML.getElementsByTagName("city");
                       file://alert(city.le

技术文章 | 阅读 1604 次
文章评论,共2条
zl芊芊zl(作者)
2007-07-02 21:00
1
五、一个复杂的实例

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

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

  我们还是先看配置文件:

 <action type="com.ajax.SelectAction" 
     scope="request" path="/ajax/select">
     <forward name="success" path="/select.jsp"/>
 </action>

   然后看看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("<select>");
        sb.append("<type>"+type+"</type>");
        
        List list = new SelectBusiness().getData(id);
        for(int i=0;i<list.size();i++)
        {
         SelectForm sel = (SelectForm)list.get(i);
         sb.append("<text>"+sel.getText()+"</text><value>"+sel.getValue()+"</value>");
        }
  
        sb.append("</select>");
        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);
  lis
zl芊芊zl(作者)
2007-07-02 21:04
2
斐斐技术网
http://it.ffkj.net/WangLuoBC/Index.html
游客请输入验证码