Java学习者论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

手机号码,快捷登录

恭喜Java学习者论坛(https://www.javaxxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,购买链接:点击进入购买VIP会员
JAVA高级面试进阶视频教程Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程

Go语言视频零基础入门到精通

Java架构师3期(课件+源码)

Java开发全终端实战租房项目视频教程

SpringBoot2.X入门到高级使用教程

大数据培训第六期全套视频教程

深度学习(CNN RNN GAN)算法原理

Java亿级流量电商系统视频教程

互联网架构师视频教程

年薪50万Spark2.0从入门到精通

年薪50万!人工智能学习路线教程

年薪50万!大数据从入门到精通学习路线年薪50万!机器学习入门到精通视频教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程 MySQL入门到精通教程
查看: 297|回复: 0

[AJAX学习]AJAX+servlet实例入门

[复制链接]
  • TA的每日心情
    开心
    2021-3-12 23:18
  • 签到天数: 2 天

    [LV.1]初来乍到

    发表于 2014-10-13 00:49:15 | 显示全部楼层 |阅读模式
    这些时间,瞎子也看得见,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.length);
    var str=new Array();
    for(var i=0;i<city.length;i++){
    str=city.firstChild.data;
    }
    file://alert(document.getElementById("city"));
    buildSelect(str,document.getElementById("city"));
    }
    }
    }
    function buildSelect(str,sel) {
    sel.options.length=0;
    for(var i=0;i<str.length;i++) {
    sel.options[sel.options.length]=new Option(str,str)
    }
    }
    </script>
    <body>
    <select name="state" onChange="getResult(this.value)">
    <option value="">Select</option>>
    <option value="zj">ZEHJIANG</option>>
    <option value="zs">JIANGSU</option>>
    </select>
    <select id="city">
    <option value="">CITY</option>
    </select>
    </body>
    </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("<state>");
    if ("zj".equals(state)){
    sb.append("<city>hangzhou</city><city>huzhou</city>");
    } else if("zs".equals(state)){
    sb.append("<city>nanjing</city><city>yangzhou</city><city>suzhou</city>");
    }
    sb.append("</state>");
    PrintWriter out=response.getWriter();
    out.write(sb.toString());
    out.close();
    }
    }  这个类也十分简单,首先是从request里取得state参数,然后根据state参数生成相应的XML文件,最后将XML文件输出到PrintWriter对象里。  到现在为止,第一个例子的代码已经全部结束。是不是比较简单? 运行图:    

      
      
       
       

         
       

         
       
      










    源码下载:http://file.javaxxz.com/2014/10/13/004915281.zip
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|Java学习者论坛 ( 声明:本站资料整理自互联网,用于Java学习者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

    GMT+8, 2024-5-17 11:55 , Processed in 0.439328 second(s), 50 queries .

    Powered by Discuz! X3.4

    © 2001-2017 Comsenz Inc.

    快速回复 返回顶部 返回列表