0 0

HttpURLConnection调用web服务返回XML文件遇到的问题0

这两天被一个问题折磨,  
  //引入的类
  import java.io.BufferedInputStream;
  import java.io.InputStream;
  import java.io.PrintWriter;
  import java.net.HttpURLConnection;
  import java.net.URL;
  import java.util.StringTokenizer;
  //主要代码
  String params = "func_id=811&style_type=1&function_id=31370&p_id=1&p_next_day=20111205";     
  String url = "http://127.0.0.1/kssc/dispatch";
  String session ="2716D75FDF46C8C173A3CBA9DEBC0DF9.tomcat1";
        try{
         HttpURLConnection con = null;
         con = (HttpURLConnection)(new URL(url.toString()).openConnection());
            con.setUseCaches(false);
            con.setDefaultUseCaches(false);
            con.setConnectTimeout(2000);
            con.addRequestProperty("Accept-Encoding","gzip");
            con.addRequestProperty("Accept-Encoding","compress");
            con.addRequestProperty("cookie","JSESSIONID="+session);
            if ( params != null ){
              con.setRequestMethod("POST");
              con.setDoOutput(true);
              PrintWriter out = new PrintWriter(con.getOutputStream());
              out.print(params);
              out.flush();
            }         
            con.connect();
            String SESSION_ID  = "JSESSIONID";
            String runtime = null;
            String _cookie = con.getHeaderField("set-cookie");
            if ( _cookie != null && _cookie.indexOf(SESSION_ID) >= 0 ){
                StringTokenizer s = new StringTokenizer(_cookie,";");
                for(;s.hasMoreElements();){
                  String element = (String)s.nextElement();
                  if ( element.indexOf(SESSION_ID)>=0 ){
                    runtime = element;
                  }
                }
               
            }
            String cookie = null;
            if ( cookie == null ){
              cookie = runtime;
            }else if ( runtime!=null && !cookie.equals(runtime) ){
              System.out.println("cookie="+cookie);
              System.out.println("runtime="+runtime);
              //cookie不一致
              throw new Exception();
            }
            String GZIP       = "gzip";
            BufferedInputStream bis = null;
            if ( GZIP.equals(con.getContentEncoding())){
             bis= new BufferedInputStream((InputStream)con.getContent());
            }
            else{
             bis =new BufferedInputStream((InputStream)con.getContent());
            }
            int readLength =0;
            byte[] readByte = new byte[1024];
            while((readLength=bis.read(readByte))>-1){
             System.out.println(new String(readByte,0,readLength,"GBK"));
            }
            bis.close();
        }catch (Exception e){
          e.printStackTrace();
          throw new Exception(e.getMessage());
        }
问题:后台servlet如果执行的时间过长(tomcat后台调用存储过程),这段程序一直停止在代码String _cookie = con.getHeaderField("set-cookie");处,哪位仁兄对这个问题比较清楚或者帮忙分析分析。
%TOMCAT_HOME%/conf/server.xml中HTTP/1.1 no SSL对应的connector中的connectionTimeout配置属性对我这段代码不起作用
还有个现象:我在存储过程中什么都不做,只暂停一段时间,如果超过20秒,这段程序就会一直停止在上面说的那个地方,如果小于20秒则能正常返回
环境:tomcat5.5(有集群)
条件:用这段代码调用其http服务,返回XML类型的数据
这种做法比较傻,是比较老的系统
大家帮忙分析分析  给点思路

2012年11月06日 14:34

1个答案 按时间排序 按投票排序

0 0

首先你对con.setConnectTimeout(2000);这句代码有点歧意,他是设定建立stock所用时间范围,我看你连接的是本机"http://127.0.0.1/kssc/dispatch";所以一秒也不用就建立了连接,只是你的后台还苦苦忙于查找数据。
为了模拟你的环境,我在servlet让线程停了30秒,Thread.sleep(30000);
可以正常返回,只是要等待30秒。
没有还原问题也就不要找问题了。
为了测试还专门下了个5.5版本。
关于你的描述有个问题:
“如果超过20秒,这段程序就会一直停止在上面说的那个地方,如果小于20秒则能正常返回”
1.是当后台处理时间为19秒时还能正常响影,但为20或21秒时就不会影响了,是这个意思吗?










2012年11月11日 03:54

相关推荐

    Android典型技术模块开发详解

    12.1 XML 12.1.1 DOM 12.1.2 SAX 12.1.3 PULL 12.2 JSON格式 12.2.1 基本类型 12.2.2 数组和集合 12.2.3 类对象 12.3 JSON解析 12.4 Gson 12.4.1 简单对象类型转换 12.4.2 数组和集合类型转换 12.5 xStream 12.6 本...

    Java网络编程(第三版)中文版.part11.rar

    返回线程中的信息 122 同步 133 死锁 139 线程调度 140 线程池 153 第六章 查找Internet地址 159 InetAddress类 161 Inet4Address和Inet6Address 177 NetworkInterface类 178 一些有用的程序 181 第七章 ...

    Java网络编程(第三版)高清中文版.part01.rar

    返回线程中的信息 122 同步 133 死锁 139 线程调度 140 线程池 153 第六章 查找Internet地址 159 InetAddress类 161 Inet4Address和Inet6Address 177 NetworkInterface类 178 一些有用的程序 181 第七章 ...

    Java网络编程(第三版)中文版.part06.rar

    返回线程中的信息 122 同步 133 死锁 139 线程调度 140 线程池 153 第六章 查找Internet地址 159 InetAddress类 161 Inet4Address和Inet6Address 177 NetworkInterface类 178 一些有用的程序 181 第七章 ...

    Java网络编程(第三版)中文版.part07.rar

    返回线程中的信息 122 同步 133 死锁 139 线程调度 140 线程池 153 第六章 查找Internet地址 159 InetAddress类 161 Inet4Address和Inet6Address 177 NetworkInterface类 178 一些有用的程序 181 第七章 ...

    Java网络编程(第三版)中文版.part09.rar

    返回线程中的信息 122 同步 133 死锁 139 线程调度 140 线程池 153 第六章 查找Internet地址 159 InetAddress类 161 Inet4Address和Inet6Address 177 NetworkInterface类 178 一些有用的程序 181 第七章 ...

    Java网络编程(第三版)中文版.part01.rar

    返回线程中的信息 122 同步 133 死锁 139 线程调度 140 线程池 153 第六章 查找Internet地址 159 InetAddress类 161 Inet4Address和Inet6Address 177 NetworkInterface类 178 一些有用的程序 181 第七章 ...

    Java网络编程(第三版)中文版.part03.rar

    返回线程中的信息 122 同步 133 死锁 139 线程调度 140 线程池 153 第六章 查找Internet地址 159 InetAddress类 161 Inet4Address和Inet6Address 177 NetworkInterface类 178 一些有用的程序 181 第七章 ...

    Java网络编程(第三版)中文版.part02.rar

    返回线程中的信息 122 同步 133 死锁 139 线程调度 140 线程池 153 第六章 查找Internet地址 159 InetAddress类 161 Inet4Address和Inet6Address 177 NetworkInterface类 178 一些有用的程序 181 第七章 ...

    Java网络编程(第三版)中文版.part04.rar

    返回线程中的信息 122 同步 133 死锁 139 线程调度 140 线程池 153 第六章 查找Internet地址 159 InetAddress类 161 Inet4Address和Inet6Address 177 NetworkInterface类 178 一些有用的程序 181 第七章 ...

    Java网络编程(第三版)中文版.part10.rar

    返回线程中的信息 122 同步 133 死锁 139 线程调度 140 线程池 153 第六章 查找Internet地址 159 InetAddress类 161 Inet4Address和Inet6Address 177 NetworkInterface类 178 一些有用的程序 181 第七章 ...

    Java网络编程(第三版)中文版.part13.rar

    返回线程中的信息 122 同步 133 死锁 139 线程调度 140 线程池 153 第六章 查找Internet地址 159 InetAddress类 161 Inet4Address和Inet6Address 177 NetworkInterface类 178 一些有用的程序 181 第七章 ...

    Java网络编程(第三版)中文版.part05.rar

    返回线程中的信息 122 同步 133 死锁 139 线程调度 140 线程池 153 第六章 查找Internet地址 159 InetAddress类 161 Inet4Address和Inet6Address 177 NetworkInterface类 178 一些有用的程序 181 第七章 ...

    Java网络编程(第三版)中文版.part12.rar

    返回线程中的信息 122 同步 133 死锁 139 线程调度 140 线程池 153 第六章 查找Internet地址 159 InetAddress类 161 Inet4Address和Inet6Address 177 NetworkInterface类 178 一些有用的程序 181 第七章 ...

    Java网络编程(第三版)中文版.part08.rar

    返回线程中的信息 122 同步 133 死锁 139 线程调度 140 线程池 153 第六章 查找Internet地址 159 InetAddress类 161 Inet4Address和Inet6Address 177 NetworkInterface类 178 一些有用的程序 181 第七章 ...

    疯狂Android讲义源码

     6.5.2 使用原始XML文件 237  6.6 使用布局(Layout)资源 239  6.7 使用菜单(Menu)资源 239  6.7.1 定义菜单资源 239  6.7.2 使用菜单资源 240  6.8 样式(Style)和主题(Theme)  资源 243  6.8.1 样式...

Global site tag (gtag.js) - Google Analytics