ajax

来源:互联网 发布:股票k线数据如何获得? 编辑:程序博客网 时间:2024/04/30 07:52
1.ajax(asynchronous javascript and xml)    (1)ajax是什么?        ajax是一种用来改善用户体验的技术,其实质是    利用浏览器提供的一个特殊对象(XMLHttpRequest    对象)异步地向服务器发送请求,服务器一般只需要    返回部分数据(文本或者xml文档),浏览器利用这些    数据更新当前页面。整个过程,页面刷新,不打断    用户的操作。        注:            异步:ajax对象向服务器发送请求时,            浏览器不会销毁当前页面,用户仍然可            以对当前页面做其它操作。    (2)ajax对象如何获得            function getXhr(){                var xhr = null;                if(window.XMLHttpRequest){                    //非ie浏览器                    xhr = new XMLHttpRequest();                }else{                    xhr = new ActiveXObject(                    'Microsoft.XMLHttp');                }                return xhr;            }    (3)ajax对象的几个重要的属性        1)onreadystatechange:用来绑订一个事件处理        函数(该函数用来处理readystatechange事件)。            注:当ajax对象的readyState属性发生了改变,            比如,从0变成了1,就会产生readystatechange            事件。        2)readyState:有5个值,分别是0,1,2,3,4,表示         ajax对象与服务器之间通信的状态。比如值为4时,         表示ajax对象已经获得了服务器返回的所有的数据。        3)responseText:获得服务器返回的文本。        4)responseXML:获得服务器返回的xml文档。        5)status:获得服务器返回的状态码。    (4)编程步骤        step1,获得ajax对象。            比如                var xhr = getXhr();        step2,使用ajax对象发送请求。            1)get请求                xhr.open('get',                    'check_uname.do?uname=Tom',true);                   xhr.onreadystatechange=f1;                xhr.send(null);                     注:                    true:发送异步请求(浏览器不会销毁                    当前页面,用户仍然可以对当前页面做其它                    操作)。                    false:发送同步请求(浏览器不会销毁                    当前页面,浏览器会锁定当前页面,用户                    不能够对当前页面做其它操作)。        step3,编写服务器端的程序,一般不需要返回                完整的页面,只需要返回部分数据。        step4,编写事件处理函数f1                function f1(){                    //必须等到ajax对象获得了服务器返回的                    //所有数据。                    if(xhr.readyState == 4){                        var txt = xhr.responseText;                        //使用txt更新当前页面。                    }                }1.编码问题    (1)发送get请求        1)乱码问题产生的原因:        ie浏览器提供的ajax对象在发送get请求时,会    对中文使用gbk编码,而其它浏览器使用utf-8编码。        服务器端,默认情况下,会使用iso-8859-1去解码。        2)如何解决            step1,让服务器使用utf-8来解码。            修改tomcat的配置文件(conf/server.xml)                <Connector URIEncoding="utf-8">                注:只针对get请求有效。            step2,使用encodeURI函数对请求地址进行处理。            注:encodeURI是js内置的函数,直接使用即可。            该函数会对中文参数使用utf-8来编码。    (2)发送post请求        1)乱码问题产生的原因            浏览器提供的ajax对象对中文参数都会使用            utf-8来编码。            服务器端默认使用iso-8859-1来解码。        2)解决方式            request.setCharacterEncoding("utf-8");2,发送post请求    xhr.open('post','check_uname.do',true);    xhr.setRequestHeader('content-type',    'application/x-www-form-urlencoded');    xhr.onreadystatechange=f1;    xhr.send('uname=' + $F('username'));    注:        按照http协议要求,发送post请求时,必须提供    "content-type"消息头。而ajax对象默认情况下生成    的请求数据包里面,没有提供该消息头,需要调用    setRequestHeader方法来添加。3.json (javascript object natation js对象声明)    (1)什么是json?        是一种轻量级的数据交换技术标准。        1)数据交换:            将数据转换成一种与平台无关的数据格式(            比如xml或者json)然后发送给接收方来处理。        2)轻量级:            跟xml相比,json文档更小,解析速度更快。            xml格式                <stock>                    <code>600015</code>                    <name>山东高速</name>                    <price>20</price>                </stock>            json格式             {"code":"600015",            "name":"山东高速","price":20}    (2)json语法 www.json.org        1)表示一个对象1,缓存问题    (1)什么是缓存问题        ie浏览器提供的ajax对象在发送get请求时,    会查看请求地址是否访问过,如果访问过,则    不再发送新的请求,而是显示之前的结果。    (2)如何解决        在请求地址后面添加上随机数。        比如:            getNumber.do?Math.random();2,发送同步请求    (1)什么是同步请求?        当ajax对象向服务器发送请求时,浏览器不会    销毁当前页面,浏览器会锁定当前页面,用户对    当前页面不能做其它操作。    (2)如何发送同步请求        open(请求方式,请求地址,false);

1)
regist.jsp

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%><html>  <head>    <style type="text/css">      .tips{        color:red;      }    </style>    <!-- 导入外部js文件: -->    <script type="text/javascript" src="js/my.js"></script>    <script type="text/javascript">    //JS尽量避免全局变量       function check_uname(){        //1获得ajax对象        var xhr = getXhr();        //2使用ajax对象发请求。(true:异步发请求)        xhr.open('get','check_uname.do?uname='+$F('username'),'true');        //匿名内部函数:        xhr.onreadystatechange=function(){          if(xhr.readyState == 4){            //4处理服务器返回的数据            var txt  = xhr.responseText;            //innerHTML:读取或者修改节点的HTML内容            $('uname_msg').innerHTML = txt;         }        };        xhr.send(null);       }    </script>  </head>  <body>  <form action="">    <fieldset>       <legend>注册</legend>                  用户名:<input id="username" name="uername" onblur="check_uname();"/>       <!-- 用户名是否被占用提示内容: -->       <span class="tips" id="uname_msg"></span>                  <br/>                    密码:<input type="password" name="pwd"/><br/>       <input type="submit" value="提交"/>    </fieldset>  </form>  </body></html>

test.html

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html>  <head>    <title>test1.html</title>    <meta http-equiv="content-type" content="text/html; charset=UTF-8">    <script type="text/javascript">      function getXhr(){        var xhr = null;        if(window.XMLHttpRequest){           //非IE浏览器           xhr = new XMLHttpRequest();        }else{           xhr = new ActiveXObject('Microsoft.XMLHttp');        }        return xhr;      }    </script>  </head>  <body>    <a href="javascript:;" onclick="alert(getXhr())">点这里</a><br>  </body></html>

ActionServlet.java

package web;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;public class ActionServlet extends HttpServlet {    public void service(HttpServletRequest request, HttpServletResponse response)            throws ServletException, IOException {        response.setContentType("text/html;charset=utf-8");        PrintWriter out = response.getWriter();        String uri = request.getRequestURI();        String action = uri.substring(                uri.lastIndexOf("/")+1, uri.lastIndexOf("."));        if("check_uname".equals(action)){            String uname = request.getParameter("uname");            if("Tom".equals(uname)){                out.println("用户名被占用");            }else{                out.println("可以使用");            }        }        out.close();    }}

(2)
regist.jsp

<%@ page pageEncoding="utf-8" contentType="text/html;charset=utf-8"%><html>  <head>    <style type="text/css">      .tips{        color:red;      }    </style>    <!-- 导入外部js文件: -->    <script type="text/javascript" src="js/my.js"></script>    <script type="text/javascript">    //JS尽量避免全局变量      //get请求:       function check_uname(){        //1获得ajax对象        var xhr = getXhr();        //2使用ajax对象发请求。(true:异步发请求)        var uri = 'check_uname.do?uname='+$F('username');        /*             使用encodeURI函数对请求地址进行处理                (encodeURI函数是JS内置的函数,直接使用即可,该函数会对中文使用utf-8来编码)        */        xhr.open('get',encodeURI(uri),'true');        //匿名内部函数:        xhr.onreadystatechange=function(){          if(xhr.readyState == 4){             //服务器返回200,则处理。否则,或者服务器端处理,或'检查用户名出错';            if(xhr.status == 200){                //4处理服务器返回的数据                var txt  = xhr.responseText;                //innerHTML:读取或者修改节点的HTML内容                $('uname_msg').innerHTML = txt;            }else{                $('uname_msg').innerHTML = '检查用户名出错';            }         }        };        xhr.send(null);       }       //使用post请求       function check_uname2(){         //1,获得ajax对象         var xhr = getXhr();         //2,发         xhr.open('post','check_uname.do',true);         //http协议的要求,ajax没有,所以这里添加消息头:         xhr.setRequestHeader('content-type','application/x-www-form-urlencoded');         xhr.onreadystatechange = function(){           if(xhr.readyState == 4 && xhr.status == 200){               var txt  = xhr.responseText;               $('uname_msg').innerHTML = txt;           }                  };        xhr.send('uname='+ $F('username'));//请求参数放进来       }    </script>  </head>  <body>  <form action="regist.do" method="post">    <fieldset>       <legend>注册</legend>                  用户名:<input id="username" name="uername" onblur="check_uname2();"/>       <!-- 用户名是否被占用提示内容: -->       <span class="tips" id="uname_msg"></span>                  <br/>                    密码:<input type="password" name="pwd"/><br/>       <input type="submit" value="提交"/>    </fieldset>  </form>  </body></html>

ActionServlet.java

package web;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;public class ActionServlet extends HttpServlet {    public void service(HttpServletRequest request, HttpServletResponse response)            throws ServletException, IOException {        request.setCharacterEncoding("utf-8");//只对post请求有效        response.setContentType("text/html;charset=utf-8");        PrintWriter out = response.getWriter();        String uri = request.getRequestURI();        String action = uri.substring(                uri.lastIndexOf("/")+1, uri.lastIndexOf("."));        if("check_uname".equals(action)){            //模拟一个系统异常 (访问数据库出问题)            //if(1 == 1){            //  throw new ServletException();            //}            String uname = request.getParameter("uname");            System.out.println(uname);            if("李白".equals(uname)){                out.println("用户名被占用");            }else{                out.println("可以使用");            }        }        out.close();    }}

2_2
city.jsp

<%@ page contentType="text/html; charset=utf-8" pageEncoding="utf-8"%><html>  <head>    <script type="text/javascript" src="js/prototype-1.6.0.3.js"></script>    <script type="text/javascript" src="js/my.js"></script>    <script type="text/javascript">       function showCities(){         var xhr = getXhr();         xhr.open('get','getCities.do?province='+$F('s1'),true);         xhr.onreadystatechange = function(){           if(xhr.readyState == 4 && xhr.status == 200){            //获得服务器返回的json字符串            //"朝阳,cy;海淀,hd"             var txt = xhr.responseText;             var arr = txt.split(';');             //添加之前清空s2             $('s2').innerHTML='';             for(i=0;i<arr.length;i++){                //cities:朝阳,cy                var cities = arr[i];                var city = cities.split(',');                //新建立一个option: city[0],city[1] :value 和描述                var op = new Option(city[0],city[1]);                $('s2').options[i] = op;             }           }         };         xhr.send(null);       }    </script>  </head>  <body style="font-size:30px;" onload="showCities()">     <select id="s1" style="width:120px" onchange="showCities()">        <option value="bj">北京</option>        <option value="sd">山东</option>        <option value="hn">湖南</option>     </select>     <select style="width:120px" id="s2">        <option value=""></option>        <option value=""></option>        <option value=""></option>     </select>  </body></html>

json.html

<html>  <head>    <meta http-equiv="content-type" content="text/html; charset=UTF-8">    <script type="text/javascript" src="js/prototype-1.6.0.3.js"></script>    <script type="text/javascript">      function f1(){        var obj = new Object();        obj.name = 'John';        obj.age = 22;        view(obj);      }      function f2(){        var obj = {name:"Tom",age:33};        //但是json属性名必须双引号括起来,JS加不加都可(创建属性对象)        view(obj);      }      function view(o){        alert(o.name);      }     function f3(){        var obj = {           "name":"Sally",           "address":{              "city":"bj",              "street":"ca",              "room":123              }        };        alert(obj.address.city);      }      function f4(){        var arr=[{name:"Tom",age:33},        {name:"Jetty",age:23,}];        alert(arr[1].name);      }      //把json字符串转为js对象,或js对象组成的数组      function f5(){        var str = '{"name":"Tom","age":33}';        //利用框架prototype转换:        var obj = str.evalJSON();        alert(obj.name);      }      function f6(){        //字符串用加号连起来        var str = '[{name:"Tom",age:33},'+        '{name:"Jetty",age:23}]';        //利用框架prototype转换:        var arr = str.evalJSON();        alert(arr[1].name);      }    </script>  </head>  <body>    <a href="javascript:;" onclick="f6()">ClickHere</a>  </body></html>

regist.jsp

<%@ page pageEncoding="utf-8" contentType="text/html;charset=utf-8"%><html>  <head>    <style type="text/css">      .tips{        color:red;      }    </style>    <!-- 导入外部js文件: -->    <script type="text/javascript" src="js/my.js"></script>    <script type="text/javascript" src="js/prototype-1.6.0.3.js"></script>    <script type="text/javascript">    //JS尽量避免全局变量      //get请求:       function check_uname(){        //1获得ajax对象        var xhr = getXhr();        //2使用ajax对象发请求。(true:异步发请求)        var uri = 'check_uname.do?uname='+$F('username');        /*             使用encodeURI函数对请求地址进行处理                (encodeURI函数是JS内置的函数,直接使用即可,该函数会对中文使用utf-8来编码)        */        xhr.open('get',encodeURI(uri),'true');        //匿名内部函数:        xhr.onreadystatechange=function(){          if(xhr.readyState == 4){             //服务器返回200,则处理。否则,或者服务器端处理,或'检查用户名出错';            if(xhr.status == 200){                //4处理服务器返回的数据                var txt  = xhr.responseText;                //innerHTML:读取或者修改节点的HTML内容                $('uname_msg').innerHTML = txt;            }else{                $('uname_msg').innerHTML = '检查用户名出错';            }         }        };        xhr.send(null);       }       //使用post请求       function check_uname2(){         //1,获得ajax对象         var xhr = getXhr();         //2,发         xhr.open('post','check_uname.do',true);         //http协议的要求,ajax没有,所以这里添加消息头:         xhr.setRequestHeader('content-type','application/x-www-form-urlencoded');         xhr.onreadystatechange = function(){           if(xhr.readyState == 4 && xhr.status == 200){               var txt  = xhr.responseText;               $('uname_msg').innerHTML = txt;           }                  };        xhr.send('uname='+ $F('username'));//请求参数放进来       }    </script>  </head>  <body>  <form action="regist.do" method="post">    <fieldset>       <legend>注册</legend>                  用户名:<input id="username" name="uername" onblur="check_uname2();"/>       <!-- 用户名是否被占用提示内容: -->       <span class="tips" id="uname_msg"></span>                  <br/>                    密码:<input type="password" name="pwd"/><br/>       <input type="submit" value="提交"/>    </fieldset>  </form>  </body></html>

stock.jsp

<%@ page contentType="text/html; charset=utf-8" pageEncoding="utf-8"%><html>  <head>    <style type="text/css">      #d1{        width:500px;        height:320px;        background-color:black;        margin-left:300px;        margin-top:30px;      }      #d2{        color:white;        background-color:red;        height:35px;      }      table{        color:yellow;        font-style:italic;        font-size:24px;      }    </style>    <script type="text/javascript" src="js/prototype-1.6.0.3.js"></script>    <script type="text/javascript" src="js/my.js"></script>    <script type="text/javascript">      function showStock(){        setInterval(quoto,5000)      }      /**       异步向服务器发送请求,服务器返回json字符串(几只股票信息)           将json字符串转为js对象组成的数组,然后遍历数组,更新表格      */      function quoto(){        var xhr = getXhr();        xhr.open('get','getStock.do',true);        xhr.onreadystatechange = function(){          if(xhr.readyState == 4 && xhr.status == 200){            //获得服务器返回的json字符串            var txt = xhr.responseText;            //json字符串转为js对象组成的数组            var arr = txt.evalJSON();            var htmlContent = "";            for(i=0;i<arr.length;i++){               var s = arr[i];               htmlContent += "<tr><td>"                  + s.code + "</td><td>"                  + s.name + "</td><td>"                  + s.price + "</td></tr>";            }            $('tb1').innerHTML = htmlContent;            /*ie浏览器只有td可以用innerHTML属性            tbody,thead,tr都不可                   可以用insertRow,insertCell解决                   或者使用框架jQuery解决兼容问题*/          }        };        xhr.send(null);      }    </script>  </head>  <body style="font-size:30px;" onload="showStock()">     <div id="d1">       <div id="d2">股票实时行情</div>       <div id="d3">            <table width="100%" >               <thead>                  <tr>                      <td>代码</td>                      <td>名称</td>                      <td>报价</td>                  </tr>               </thead>               <tbody id="tb1">               </tbody>            </table>              </div>     </div>  </body></html>

Stock.java

package bean;public class Stock {    private String code;    private String name;    private double price;    public String getCode() {        return code;    }    public void setCode(String code) {        this.code = code;    }    public String getName() {        return name;    }    public void setName(String name) {        this.name = name;    }    public double getPrice() {        return price;    }    public void setPrice(double price) {        this.price = price;    }}

Test.java

package json;import java.util.ArrayList;import java.util.List;import net.sf.json.JSONArray;import net.sf.json.JSONObject;import bean.Stock;public class Test {    /**     * 将Java对象转为json字符串     */    public static void test1(){        Stock s = new Stock();        s.setCode("600015");        s.setName("山东高速");        s.setPrice(20);        //使用json官方提供的工具转换        JSONObject obj = JSONObject.fromObject(s);        String jsonStr = obj.toString();        System.out.println(jsonStr);    }    /**     * 将java对象组成的数组或集合转为json字符串     */    public static void test2(){        List<Stock> stocks = new ArrayList<Stock>();        for(int i=0;i<3;i++){            Stock s = new Stock();            s.setCode("60001" + ( i + 1));            s.setName("山东高速" + (i + 1));            s.setPrice(20 + i);            stocks.add(s);        }        //fromObject()方法里也可以传进来数组        JSONArray array = JSONArray.fromObject(stocks);        String jsonStr = array.toString();        System.out.println(jsonStr);    }    public static void main(String[] args) {        test1();        test2();    }}

ActionServlet.java

package web;import java.io.IOException;import java.io.PrintWriter;import java.math.BigDecimal;import java.util.ArrayList;import java.util.List;import java.util.Random;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import net.sf.json.JSONArray;import bean.Stock;public class ActionServlet extends HttpServlet {    public void service(HttpServletRequest request, HttpServletResponse response)            throws ServletException, IOException {        request.setCharacterEncoding("utf-8");//只对post请求有效        response.setContentType("text/html;charset=utf-8");        PrintWriter out = response.getWriter();        String uri = request.getRequestURI();        String action = uri.substring(                uri.lastIndexOf("/")+1, uri.lastIndexOf("."));        if("check_uname".equals(action)){            //模拟一个系统异常 (访问数据库出问题)            //if(1 == 1){            //  throw new ServletException();            //}            String uname = request.getParameter("uname");            System.out.println(uname);            if("李白".equals(uname)){                out.println("用户名被占用");            }else{                out.println("可以使用");            }        }else if("getStock".equals(action)){            List<Stock> stocks = new ArrayList<Stock>();            Random r = new Random();            for(int i=0;i<8;i++){                Stock s = new Stock();                s.setCode("60001" + r.nextInt(10));                s.setName("山东高速" + r.nextInt(10));                s.setPrice(getPrice(r));                stocks.add(s);            }            //fromObject()方法里也可以传进来数组            JSONArray array = JSONArray.fromObject(stocks);            String jsonStr = array.toString();            out.println(jsonStr);        }else if("getCities".equals(action)){            String provnice = request.getParameter("province");            System.out.println(provnice);            if("bj".equals(provnice)){                out.println("朝阳,cy;海淀,hd");            }else if("sd".equals(provnice)){                out.println("济南,jn;青岛,qd;烟台,yt");            }else{                out.println("长沙,cs;衡阳,hy");            }        }        out.close();    }    private double getPrice(Random r){        double price = 0;        BigDecimal b = new BigDecimal(r.nextDouble()*100);        //四舍五入        price = b.setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();        return price;    }}

(3)
regist.jsp

<%@ page pageEncoding="utf-8" contentType="text/html;charset=utf-8"%><html>  <head>    <style type="text/css">      .tips{        color:red;        font-style:italic;      }    </style>    <script type="text/javascript" src="js/prototype-1.6.0.3.js"></script>    <script type="text/javascript" src="js/my.js"></script>    <script type="text/javascript">      function check_uname(){        /*检查用户名是否为空              如果为空则不能提交        */        $('username_msg').innerHTML = '';        if($F('username').strip().length == 0){//strip()兼容各浏览器          $('username_msg').innerHTML = '用户名不能为空';          return false;        }        /*          检查用户名是否被占用,          如果被占用,不能提交        */        //异步请求:        var flag = false;        var xhr = getXhr();        //encodeURI暂时不用        //false:发送同步请求(如果写成异步无法提交)        xhr.open('get','check_uname.do?uname='+$F('username').strip(),true);        //绑定函数,函数还没执行        xhr.onreadystatechange = function(){           if(xhr.readyState == 4 && xhr.status == 200){              var txt  = xhr.responseText;              //alert(txt.length);out.println有回车              if(txt == 'no'){                $('username_msg').innerHTML='用户名被占用';                flag = false;              }else{                $('username_msg').innerHTML='可以使用';                flag = true;              }           }        };        xhr.send(null);//发请求        /*          发送同步请求,此时浏览器不会向下执行任何代码,          需要等待服务器的响应发送回来才会继续向下执行(会调用上面的内部函数)        */        return flag;      }      function beforeSubmit(){        var rs = check_uname();//&& check_password();        return rs;      }    </script>  </head>  <body>  <form action="regist.do" method="post"   onsubmit="return beforeSubmit();">    <fieldset>       <legend>注册</legend>                  用户名:<input id="username" name="username" onblur="check_uname();"/>       <!-- 用户名是否被占用提示内容: -->       <span class="tips" id="username_msg"></span>                  <br/>                    密码:<input type="password" name="pwd"/><br/>       <input type="submit" value="提交"/>    </fieldset>  </form>  </body></html>

getNumber.jsp

<%@ page pageEncoding="utf-8" contentType="text/html;charset=utf-8"%><html>  <head>     <script type="text/javascript" src="js/prototype-1.6.0.3.js"></script>     <script type="text/javascript" src="js/my.js"></script>     <script type="text/javascript">        function showNumber(){          var xhr = getXhr();          //加 ?' + Math.random欺骗IE浏览器,让它以为每次地址都不一样          //或者直接发post请求          xhr.open('get','getNumber.do?' + Math.random(),true);          xhr.onreadystatechange = function(){                if(xhr.readyState == 4 && xhr.status == 200){                    var txt = xhr.responseText;                    $('d1').innerHTML = txt;                }          };          xhr.send(null);        }     </script>  </head>  <body style="font-size:30px">     <a href="javascript:;" onclick="showNumber();">点击此处</a>     <div id="d1"></div>  </body></html>

ActionServlet.java

package web;import java.io.IOException;import java.io.PrintWriter;import java.util.Random;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;public class ActionServlet extends HttpServlet {    public void service(HttpServletRequest request, HttpServletResponse response)            throws ServletException, IOException {        response.setContentType("text/html;charset=utf-8");        PrintWriter out = response.getWriter();        String uri = request.getRequestURI();        String action = uri.substring(                uri.lastIndexOf("/")+1, uri.lastIndexOf("."));        if("getNumber".equals(action)){            Random r = new Random();            int number = r.nextInt(1000);            System.out.println(number);            out.println(number);        }else if("check_uname".equals(action)){            try {                Thread.sleep(1000);            } catch (InterruptedException e) {                e.printStackTrace();            }            String username = request.getParameter("uname");            System.out.println("username:"+username);            if("Tom".equals(username)){                out.print("no");//不要换行            }else{                out.print("yes");            }        }        out.close();    }}
0 0
原创粉丝点击