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

相关推荐

    拼接xml调用webservice

    在IT行业中,调用Web Service通常涉及到分布式系统之间的通信,其中XML(eXtensible Markup Language)被广泛用于数据交换。本主题的核心是"拼接XML调用WebService",这通常指的是通过构建XML字符串来构造请求,然后...

    HttpURLConnection调用.net WebService

    在这个场景下,我们将探讨如何利用`HttpURLConnection`来调用.NET平台上的WebService服务。 **一、HttpURLConnection简介** `HttpURLConnection`是Java `java.net`包中的一个类,它提供了HTTP协议的连接、读写功能...

    httpurlconnection xml

    在Android开发中,HTTPURLConnection是一个重要的网络通信接口,它允许我们通过HTTP和HTTPS协议与Web服务器进行交互。本示例中的代码着重于利用HTTPURLConnection处理XML数据,这在移动应用中尤其常见,比如从远程...

    android 调用webservices 实例,可运行

    1. 添加网络权限:在AndroidManifest.xml文件中,添加`<uses-permission android:name="android.permission.INTERNET" />`,以允许应用访问网络。 2. 创建HTTP客户端:Android提供了多种方式来创建HTTP客户端,如...

    从android中调用web service的源码

    在Android开发中,调用Web Service是常见的需求,主要用于实现移动设备与服务器之间的数据交互。Web Service可以是基于SOAP(Simple Object Access Protocol)或者REST(Representational State Transfer)的,这两...

    安卓调用webservice接口

    - 在调用Web Service时,可能会遇到网络问题、服务器错误或其他异常。应使用try-catch块捕获并处理这些异常,同时考虑使用Toast或Snackbar向用户展示错误信息。 5. **权限申请**: - AndroidManifest.xml中需添加...

    JAVA与.NET的相互调用通过Web服务实现相互调用.doc

    3. Java客户端通过HTTP或HTTPS请求调用.NET服务,使用Java的HTTP客户端库(如Apache HttpClient或Java内置的HttpURLConnection)发送SOAP请求,并解析响应的XML数据。 **二、使用Java作为服务器端,.NET作为客户端*...

    使用Http post的方式调用webservice

    在IT行业中,Web服务是一种广泛使用的接口通信方式,允许不同应用程序之间进行数据交换。当我们无法直接引用特定的jar包或者面临jar包冲突时,通过HTTP POST方式调用WebService成为了一种有效的解决方案。本文将深入...

    用Java构建web服务

    - 调用服务:通过代理类的方法调用Web服务。 三、JAX-RS:RESTful Web服务 REST(Representational State Transfer)是一种轻量级的Web服务设计风格,它强调资源的获取和操作。JAX-RS提供了一种直观的方式来创建...

    Accessing Web Services from a Visual Web Application

    调用Web服务时可能会遇到网络问题、服务不可用或数据格式错误等问题。开发者需要在代码中添加适当的异常处理逻辑,捕获并适当地处理这些异常,同时向用户显示友好的错误信息。 **8. 性能优化** 频繁调用Web服务可能...

    Web Services应用实例 -- Java Web App远程调用SAS程序的解决方案

    在本实例中,我们将探讨如何使用Java Web应用程序远程调用SAS程序,这涉及到Web服务技术与统计分析软件SAS的集成。以下是相关知识点的详细说明: 1. **Web服务**: Web服务是通过HTTP协议传输数据的服务,它使用...

    从android中调用web service的源码.zip

    在Android开发中,调用Web Service是常见的需求,主要用于实现移动设备与服务器之间的数据交互。Web Service通常基于SOAP(Simple Object Access Protocol)或REST(Representational State Transfer)协议,为不同...

    调用天气预报Web Services实例.rar

    5. **解析响应**:服务返回的响应同样是一个SOAP消息,你需要解析这个XML响应,提取出天气预报数据。这可能涉及到XPath或DOM解析。 6. **展示结果**:最后,将解析出的天气信息以用户友好的形式呈现,比如温度、...

    向url发送xml包,并得到返回的XML包

    此外,`run.bat`文件通常用于Windows环境下的批处理脚本,它会调用Java虚拟机(JVM)来执行`.class`文件。确保`run.bat`文件中包含了正确的命令行参数,例如`java -cp . XMLPostExample`,这里`XMLPostExample`是...

    android调用webservice接口实现登陆源码

    在Android开发中,调用Web Service接口是常见的数据交互方式,尤其在实现用户登录功能时。Web Service通常采用SOAP或RESTful API的形式提供服务,允许客户端应用程序(如Android应用)发送请求并接收响应。本教程将...

    java android 调用webservice

    5. 解析响应:根据Web服务返回的数据格式(如XML、JSON),使用解析库(如DOM、SAX、Jackson、Gson)进行解析。 三、具体实现步骤 1. 添加网络权限:在AndroidManifest.xml中添加`...

    java调用webservice工程

    在调用Web服务过程中,可能会遇到网络错误、服务不可用、数据格式错误等问题,需要编写异常处理代码,捕获并处理可能出现的异常。 总结,Java调用WebService工程涉及到的知识点包括JAX-WS和JAX-RS的使用、...

    Android调用Web应用浅析.pdf

    《Android调用Web应用浅析》这篇文章主要探讨了Android如何访问和交互不同类型的Web应用程序,如JSP和ASP.NET,以及如何处理XML和JSON数据。文章深入研究了两种主要的网络访问方式:通过URL和使用HTTP客户端...

    Android之Webservice详解与调用天气预报Webservice完整实例

    综上所述,这个实例涵盖了Android调用Web Service的基本流程,从理解Web Service的概念,到选择合适的库(如Ksoap2),再到构建请求、解析响应、处理异常以及UI显示。通过这个实例,开发者可以掌握在Android平台上...

    android调用.net的webservice

    - **数据格式**:确认.NET Web服务返回的数据格式(如XML或JSON)与Android客户端能够正确解析的格式一致。 - **跨域问题**:如果Web服务运行在不同的域,可能会遇到CORS(跨源资源共享)问题。在.NET服务端配置...

Global site tag (gtag.js) - Google Analytics