ajax通过URL读取XML

需求:
在JavaScript中动态的从一个URL取得xml文件,然后,动态的更新数据。
问题的难点:
Javascript 不能实现从一个URL读取xml数据。
使用动态的参数的时候,如后使用GET方法,那么,参数有可能太长。
解决的办法:
这个办法使用AJAX可以实现。
因为AJAX可以从URL来动态的读取xml数据。
同时也可以很方便的分析和处理XML数据。
问题的关键点:
AJAX 不能从一个不同Context的服务器上来读入XML,所以要想读取xml数据的话,那就一定要在同一个Context中,如果不在,那么就使用一个Servlet来实现从一个远程的URL上读取数据,然后可以通过调用此Servlet来取得远程的数据。
我的实现:
 
  写一个 Servlet来实现从远程url上读取xml数据,这个url参数是用户根据自己的需要传递的。
    public void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        System.out.println(" -------------- Get ---------------- ");
        response.setContentType("text/xml");
        response.setCharacterEncoding("UTF-8");
        //      PrintWriter out = response.getWriter();
        //doPost(request,response);
       
        String url = request.getParameter("url");
        //out.println(url);
        //String url = "";
        System.out.println("url is : " + url);
       
        //response.setContentType("text/xml");
       
        PrintWriter out = response.getWriter();
           
        BufferedReader reader = new BufferedReader(new InputStreamReader(new URL(url).openStream()));
       
        StringBuffer xmlData = new StringBuffer();
        String tmp = "";
       
        while((tmp = reader.readLine())!=null){
            log.info(tmp);
            out.print(tmp);
            //System.out.println(" tmp : " + tmp);
            xmlData.append(tmp);
        }
       
       
        try {
            out.println(XMLUtil.format(xmlData.toString()));
        } catch (DocumentException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        reader.close();
       
    }
     在 AJAX来调用servlet取得此数据
       < script type = "text/javascript" >
 
           var xmlHttp= new ActiveXObject( "Msxml2.XMLHTTP" );
           //alert(xmlHttp);   
           这个 url 是你的 servlet uri, 只能是在同一个 context 内的,否则不能调用。所以,如果需要跨服务器的话,或者需要跨 context 的话,就需要使用在本 context 上使用一个 servlet 做跳转。
           var sevUrl = "../servlet/PullXmlData?url=" ;
            
           下面的那个 url 参数其实是我们的远程的 xml 的数据的 url, 因为在参数里面有等号,所以在调用之前就要通过一个处理和转换,这一步也是必须的。
           var url = sevUrl + encodeURIComponent( "http://192.168.1.50:8080/remoteServer /XmlInvoke?aaa=aaa&bbb=bbb " );    
   
           alert( "url : " + url);     
   
           xmlHttp.open( "post" , url , false );
           xmlHttp.onreadystatechange= function () {             
              if (xmlHttp.readyState==4) {
                 alert(xmlHttp.responseText);
                 document.write(xmlHttp.responseText);
              }
           }
           xmlHttp.send();            
       </ script >
大家有好的解决办法,还请多多指教  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值