关闭

JAVA 获取http返回XML的数据

标签: javaxml服务器stringsslbbs
5044人阅读 评论(1) 收藏 举报

JAVA 获取http返回XML的数据

文章分类:Java编程 关键字: java如何获取http返回的数据

Java代码
  1. 下面有我自己的代码和提供的包,我从网上找了老半天才找到的,共享给大家!  
  2. 转载:<a href="http://www.ibm.com/developerworks/cn/opensource/os-httpclient/" >http://www.ibm.com/developerworks/cn/opensource/os-httpclient/</a>  
  3. HttpClient简介  
  4.   
  5. HTTP 协 议可能是现在 Internet 上使用得最多、最重要的协议了,越来越多的 Java 应用程序需要直接通过 HTTP 协议来访问网络资源。虽然 在 JDK 的 java.net 包中已经提供了访问 HTTP 协议的基本功能,但是对于大部分应用程序来说,JDK 库本身提供的功能还不够丰富和 灵活。HttpClient 是 Apache Jakarta Common 下的子项目,用来提供高效的、最新的、功能丰富的支持 HTTP 协议的 客户端编程工具包,并且它支持 HTTP 协议最新的版本和建议。HttpClient 已经应用在很多的项目中,比 如 Apache Jakarta 上很著名的另外两个开源项目 Cactus 和 HTMLUnit 都使用了 HttpClient,更多使 用 HttpClient 的应用可以参见http://wiki.apache.org/jakarta-httpclient/HttpClientPowered。HttpClient 项目非常活跃,使用的人还是非常多的。目前 HttpClient 版本是在 2005.10.11 发布的 3.0 RC4 。   
  6.   
  7.   
  8. HttpClient 功能介绍  
  9.   
  10. 以下列出的是 HttpClient 提供的主要的功能,要知道更多详细的功能可以参见 HttpClient 的主页。  
  11.   
  12. 实现了所有 HTTP 的方法(GET,POST,PUT,HEAD 等)   
  13. 支持自动转向   
  14. 支持 HTTPS 协议   
  15. 支持代理服务器等   
  16. 下面将逐一介绍怎样使用这些功能。首先,我们必须安装好 HttpClient。  
  17.   
  18. HttpClient 可以在http://jakarta.apache.org/commons/httpclient/downloads.html下载    
  19. HttpClient 用到了 Apache Jakarta common 下的子项目 logging,你可以从这个地址http://jakarta.apache.org /site/downloads/downloads_commons-logging.cgi下载到 common logging,从下载后的压缩包 中取出 commons-logging.jar 加到 CLASSPATH 中    
  20. HttpClient 用到了 Apache Jakarta common 下的子项目 codec,你可以从这个地址http://jakarta.apache.org /site/downloads/downloads_commons-codec.cgi 下载到最新的 common codec,从下载后的压缩包 中取出 commons-codec-1.x.jar 加到 CLASSPATH 中    
  21.   
  22.   
  23.    
  24.   
  25.   
  26.  回页首   
  27.    
  28.   
  29.   
  30.   
  31. HttpClient 基本功能的使用  
  32.   
  33. GET 方法  
  34.   
  35. 使用 HttpClient 需要以下 6  个步骤:  
  36.   
  37. 1 . 创建 HttpClient 的实例  
  38.   
  39. 2 . 创建某种连接方法的实例,在这里是 GetMethod。在 GetMethod 的构造函数中传入待连接的地址  
  40.   
  41. 3 . 调用第一步中创建好的实例的 execute 方法来执行第二步中创建好的 method 实例  
  42.   
  43. 4 . 读 response  
  44.   
  45. 5 . 释放连接。无论执行方法是否成功,都必须释放连接  
  46.   
  47. 6 . 对得到后的内容进行处理  
  48.   
  49. 根据以上步骤,我们来编写用GET方法来取得某网页内容的代码。  
  50.   
  51. 大部分情况下 HttpClient 默认的构造函数已经足够使用。 HttpClient httpClient = new  HttpClient();  
  52.    
  53.   
  54.   
  55. 创建GET方法的实例。在GET方法的构造函数中传入待连接的地址即可。用GetMethod将会自动处理转发过程,如果想要把自动处理转发过程去掉的话,可以调用方法setFollowRedirects(false )。 GetMethod getMethod =  new  GetMethod( "http://www.ibm.com/" );  
  56.    
  57.   
  58.   
  59. 调 用实例httpClient的executeMethod方法来执行getMethod。由于是执行在网络上的程序,在运行executeMethod方 法的时候,需要处理两个异常,分别是HttpException和IOException。引起第一种异常的原因主要可能是在构造getMethod的时 候传入的协议不对,比如不小心将"http" 写成 "htp" , 或者服务器端返回的内容不正常等,并且该异常发生是不可恢复的;第二种异常一般是由于网络原因引起的异常,对于这种异 常 (IOException),HttpClient会根据你指定的恢复策略自动试着重新执行executeMethod方法。HttpClient的 恢复策略可以自定义(通过实现接口HttpMethodRetryHandler来实现)。通过httpClient的方法setParameter设置 你实现的恢复策略,本文中使用的是系统提供的默认恢复策略,该策略在碰到第二类异常的时候将自动重试 3 次。executeMethod返回值是一个整数,表示了执行该方法后服务器返回的状态码,该状态码能表示出该方法执行是否成功、需要认证或者页面发生了跳转(默认状态下GetMethod的实例是自动处理跳转的)等。  //设置成了默认的恢复策略,在发生异常时候将自动重试3次,在这里你也可以设置成自定义的恢复策略   
  60. getMethod.getParams().setParameter(HttpMethodParams.RETRY_HANDLER,   
  61.             new  DefaultHttpMethodRetryHandler());   
  62. //执行getMethod   
  63. int  statusCode = client.executeMethod(getMethod);  
  64. if  (statusCode != HttpStatus.SC_OK) {  
  65.   System.err.println("Method failed: "  + getMethod.getStatusLine());  
  66. }  
  67.    
  68.   
  69.   
  70. 在返回的状态码正确后,即可取得内容。取得目标地址的内容有三种方法:第一种,getResponseBody,该方法返回的是目标的二进制的byte 流;第二种,getResponseBodyAsString,这个方法返回的是String类型,值得注意的是该方法返回的String的编码是根据系统默认的编码方式,所以返回的String值可能编码类型有误,在本文的 "字符编码" 部分中将对此做详细介绍;第三种,getResponseBodyAsStream,这个方法对于目标地址中有大量数据需要传输是最佳的。在这里我们使用了最简单的getResponseBody方法。  byte [] responseBody = method.getResponseBody();  
  71.    
  72.   
  73.   
  74. 释放连接。无论执行方法是否成功,都必须释放连接。 method.releaseConnection();  
  75.    
  76.   
  77.   
  78. 处理内容。在这一步中根据你的需要处理内容,在例子中只是简单的将内容打印到控制台。 System.out.println(new  String(responseBody));  
  79.    
  80.   
  81.   
  82. 下面是程序的完整代码,这些代码也可在附件中的test.GetSample中找到。  
  83.   
  84.   
  85. package  test;  
  86. import  java.io.IOException;  
  87. import  org.apache.commons.httpclient.*;  
  88. import  org.apache.commons.httpclient.methods.GetMethod;  
  89. import  org.apache.commons.httpclient.params.HttpMethodParams;  
  90. public   class  GetSample{  
  91.   public   static   void  main(String[] args) {  
  92.   //构造HttpClient的实例   
  93.   HttpClient httpClient = new  HttpClient();  
  94.   //创建GET方法的实例   
  95.   GetMethod getMethod = new  GetMethod( "http://www.ibm.com" );  
  96.   //使用系统提供的默认的恢复策略   
  97.   getMethod.getParams().setParameter(HttpMethodParams.RETRY_HANDLER,  
  98.     new  DefaultHttpMethodRetryHandler());  
  99.   try  {  
  100.    //执行getMethod   
  101.    int  statusCode = httpClient.executeMethod(getMethod);  
  102.    if  (statusCode != HttpStatus.SC_OK) {  
  103.     System.err.println("Method failed: "   
  104.       + getMethod.getStatusLine());  
  105.    }  
  106.    //读取内容    
  107.    byte [] responseBody = getMethod.getResponseBody();  
  108.    //处理内容   
  109.    System.out.println(new  String(responseBody));  
  110.   } catch  (HttpException e) {  
  111.    //发生致命的异常,可能是协议不对或者返回的内容有问题   
  112.    System.out.println("Please check your provided http address!" );  
  113.    e.printStackTrace();  
  114.   } catch  (IOException e) {  
  115.    //发生网络异常   
  116.    e.printStackTrace();  
  117.   } finally  {  
  118.    //释放连接   
  119.    getMethod.releaseConnection();  
  120.   }  
  121.  }  
  122. }  
  123.    
  124.   
  125.   
  126. POST方法  
  127.   
  128. 根据RFC2616,对POST的解释如下:POST方法用来向目的服务器发出请求,要求它接受被附在请求后的实体,并把它当作请求队列(Request-Line)中请求URI所指定资源的附加新子项。POST被设计成用统一的方法实现下列功能:  
  129.   
  130. 对现有资源的注释(Annotation of existing resources)   
  131. 向电子公告栏、新闻组,邮件列表或类似讨论组发送消息   
  132. 提交数据块,如将表单的结果提交给数据处理过程   
  133. 通过附加操作来扩展数据库   
  134. 调 用HttpClient中的PostMethod与GetMethod类似,除了设置PostMethod的实例与GetMethod有些不同之外,剩下 的步骤都差不多。在下面的例子中,省去了与GetMethod相同的步骤,只说明与上面不同的地方,并以登录清华大学BBS为例子进行说明。  
  135.   
  136. 构造PostMethod之前的步骤都相同,与GetMethod一样,构造PostMethod也需要一个URI参数,在本例中,登录的地址是http://www.newsmth.net /bbslogin2.php。在创建了PostMethod的实例之后,需要给method实例填充表单的值,在BBS的登录表单中需要有两个域,第一 个是用户名(域名叫id),第二个是密码(域名叫passwd)。表单中的域用类NameValuePair来表示,该类的构造函数第一个参数是域名,第 二参数是该域的值;将表单所有的值设置到PostMethod中用方法setRequestBody。另外由于BBS登录成功后会转向另外一个页面,但是 HttpClient对于要求接受后继服务的请求,比如POST和PUT,不支持自动转发,因此需要自己对页面转向做处理。具体的页面转向处理请参见下面 的"自动转向"部分。代码如下: String url = "http://www.newsmth.net/bbslogin2.php";   
  137. PostMethod postMethod = new  PostMethod(url);  
  138. // 填入各个表单域的值   
  139. NameValuePair[] data = { new  NameValuePair( "id" "youUserName" ),                  
  140. new  NameValuePair( "passwd" "yourPwd" ) };  
  141. // 将表单的值放入postMethod中   
  142. postMethod.setRequestBody(data);  
  143. // 执行postMethod   
  144. int  statusCode = httpClient.executeMethod(postMethod);  
  145. // HttpClient对于要求接受后继服务的请求,象POST和PUT等不能自动处理转发   
  146. // 301或者302   
  147. if  (statusCode == HttpStatus.SC_MOVED_PERMANENTLY ||   
  148. statusCode == HttpStatus.SC_MOVED_TEMPORARILY) {  
  149.     // 从头中取出转向的地址   
  150.     Header locationHeader = postMethod.getResponseHeader("location" );  
  151.     String location = null ;  
  152.     if  (locationHeader !=  null ) {  
  153.      location = locationHeader.getValue();  
  154.      System.out.println("The page was redirected to:"  + location);  
  155.     } else  {  
  156.      System.err.println("Location field value is null." );  
  157.     }  
  158.     return ;  
  159. }  
  160.    
  161.   
  162.   
  163. 完整的程序代码请参见附件中的test.PostSample  
  164.   
  165.   
  166.   
  167.    
  168.   
  169.   
  170.  回页首   
  171.    
  172.   
  173.   
  174.   
  175. 使用HttpClient过程中常见的一些问题  
  176.   
  177. 下面介绍在使用HttpClient过程中常见的一些问题。  
  178.   
  179. 字符编码  
  180.   
  181. 某目标页的编码可能出现在两个地方,第一个地方是服务器返回的http头中,另外一个地方是得到的html/xml页面中。  
  182.   
  183. 在http头的Content-Type字段可能会包含字符编码信息。例如可能返回的头会包含这样子的信息:Content-Type: text/html; charset=UTF-8 。这个头信息表明该页的编码是UTF- 8 ,但是服务器返回的头信息未必与内容能匹配上。比如对于一些双字节语言国家,可能服务器返回的编码类型是UTF- 8 ,但真正的内容却不是UTF- 8 编码的,因此需要在另外的地方去得到页面的编码信息;但是如果服务器返回的编码不是UTF- 8 ,而是具体的一些编码,比如gb2312等,那服务器返回的可能是正确的编码信息。通过method对象的getResponseCharSet()方法就可以得到http头中的编码信息。   
  184. 对于象xml或者html这样的文件,允许作者在页面中直接指定编码类型。比如在html中会有<meta http-equiv="Content-Type"  content= "text/html; charset=gb2312" />这样的标签;或者在xml中会有<?xml version= "1.0"  encoding= "gb2312" ?>这样的标签,在这些情况下,可能与http头中返回的编码信息冲突,需要用户自己判断到底那种编码类型应该是真正的编码。   
  185. 自动转向  
  186.   
  187. 根据RFC2616中对自动转向的定义,主要有两种:301 302 301 表示永久的移走(Moved Permanently),当返回的是 301 ,则表示请求的资源已经被移到一个固定的新地方,任何向该地址发起请求都会被转到新的地址上。 302 表示暂时的转向,比如在服务器端的servlet程序调用了sendRedirect方法,则在客户端就会得到一个 302 的代码,这时服务器返回的头信息中location的值就是sendRedirect转向的目标地址。  
  188.   
  189. HttpClient支持自动转向处理,但是象POST和PUT方式这种要求接受后继服务的请求方式,暂时不支持自动转向,因此如果碰到POST方式提交后返回的是301 或者 302 的 话需要自己处理。就像刚才在POSTMethod中举的例子:如果想进入登录BBS后的页面,必须重新发起登录的请求,请求的地址可以在头字段 location中得到。不过需要注意的是,有时候location返回的可能是相对路径,因此需要对location返回的值做一些处理才可以发起向新 地址的请求。  
  190.   
  191. 另外除了在头中包含的信息可能使页面发生重定向外,在页面中也有可能会发生页面的重定向。引起页面自动转发的标签是:<meta http-equiv="refresh"  content= "5; url=http://www.ibm.com/us" >。如果你想在程序中也处理这种情况的话得自己分析页面来实现转向。需要注意的是,在上面那个标签中url的值也可以是一个相对地址,如果是这样的话,需要对它做一些处理后才可以转发。  
  192.   
  193. 处理HTTPS协议  
  194.   
  195. HttpClient提供了对SSL的支持,在使用SSL之前必须安装JSSE。在Sun提供的1.4 以后的版本中,JSSE已经集成到JDK中,如果你使用的是JDK1. 4 以 前的版本则必须安装JSSE。JSSE不同的厂家有不同的实现。下面介绍怎么使用HttpClient来打开Https连接。这里有两种方法可以打开 https连接,第一种就是得到服务器颁发的证书,然后导入到本地的keystore中;另外一种办法就是通过扩展HttpClient的类来实现自动接 受证书。  
  196.   
  197. 方法1 ,取得证书,并导入本地的keystore:  
  198.   
  199. 安装JSSE (如果你使用的JDK版本是1.4 或者 1.4 以上就可以跳过这一步)。本文以IBM的JSSE为例子说明。先到IBM网站上下载JSSE的安装包。然后解压开之后将ibmjsse.jar包拷贝到<java-home>/lib/ext/目录下。   
  200. 取得并且导入证书。证书可以通过IE来获得:   
  201. 1 . 用IE打开需要连接的https网址,会弹出如下对话框:  
  202.   
  203.   
  204.    
  205.   
  206. 2 . 单击 "View Certificate" ,在弹出的对话框中选择 "Details" ,然后再单击 "Copy to File" ,根据提供的向导生成待访问网页的证书文件  
  207.   
  208.   
  209.    
  210.   
  211. 3 . 向导第一步,欢迎界面,直接单击 "Next" ,  
  212.   
  213.   
  214.    
  215.   
  216. 4 . 向导第二步,选择导出的文件格式,默认,单击 "Next" ,  
  217.   
  218.   
  219.    
  220.   
  221. 5 . 向导第三步,输入导出的文件名,输入后,单击 "Next" ,  
  222.   
  223.   
  224.    
  225.   
  226. 6 . 向导第四步,单击 "Finish" ,完成向导  
  227.   
  228.   
  229.    
  230.   
  231. 7 . 最后弹出一个对话框,显示导出成功  
  232.   
  233.   
  234.    
  235.   
  236. 用keytool工具把刚才导出的证书倒入本地keystore。Keytool命令在<java-home>/bin/下,打开命令行窗口,并到<java-home>/lib/security/目录下,运行下面的命令:  
  237.   
  238. keytool -import  -noprompt -keystore cacerts -storepass changeit -alias yourEntry1 -file your.cer  
  239.    
  240.   
  241.   
  242. 其中参数alias后跟的值是当前证书在keystore中的唯一标识符,但是大小写不区分;参数file后跟的是刚才通过IE导出的证书所在的路径和文件名;如果你想删除刚才导入到keystore的证书,可以用命令:  
  243.   
  244. keytool -delete -keystore cacerts -storepass changeit -alias yourEntry1  
  245.    
  246.   
  247.   
  248. 写程序访问https地址。如果想测试是否能连上https,只需要稍改一下GetSample例子,把请求的目标变成一个https地址。 GetMethod getMethod = new  GetMethod( "https://www.yourdomain.com" );  
  249.    
  250.   
  251.   
  252. 运行该程序可能出现的问题:  
  253.   
  254. 1 . 抛出异常java.net.SocketException: Algorithm SSL not available。出现这个异常可能是因为没有加JSSEProvider,如果用的是IBM的JSSE Provider,在程序中加入这样的一行:  
  255.   
  256.  if (Security.getProvider( "com.ibm.jsse.IBMJSSEProvider" ) ==  null )  
  257.  Security.addProvider(new  IBMJSSEProvider());  
  258.     
  259.   
  260.   
  261. 或者也可以打开<java-home>/lib/security/java.security,在行  
  262.   
  263. security.provider.1 =sun.security.provider.Sun  
  264. security.provider.2 =com.ibm.crypto.provider.IBMJCE  
  265.    
  266.   
  267.   
  268. 后面加入security.provider.3 =com.ibm.jsse.IBMJSSEProvider  
  269.   
  270. 2 . 抛出异常java.net.SocketException: SSL implementation not available。出现这个异常可能是你没有把ibmjsse.jar拷贝到<java-home>/lib/ext/目录下。  
  271.   
  272. 3 . 抛 出异常javax.net.ssl.SSLHandshakeException: unknown certificate。出现这个异常表明你的 JSSE应该已经安装正确,但是可能因为你没有把证书导入到当前运行JRE的keystore中,请按照前面介绍的步骤来导入你的证书。  
  273.   
  274. 方法2,扩展HttpClient类实现自动接受证书  
  275.   
  276. 因为这种方法自动接收所有证书,因此存在一定的安全问题,所以在使用这种方法前请仔细考虑您的系统的安全需求。具体的步骤如下:  
  277.   
  278. 提 供一个自定义的socket factory(test.MySecureProtocolSocketFactory)。这个自定义的类必须实现接口 org.apache.commons.httpclient.protocol.SecureProtocolSocketFactory,在实现接口 的类中调用自定义的X509TrustManager(test.MyX509TrustManager),这两个类可以在随本文带的附件中得到   
  279. 创建一个org.apache.commons.httpclient.protocol.Protocol的实例,指定协议名称和默认的端口号 Protocol myhttps = new  Protocol( "https" new  MySecureProtocolSocketFactory (),  443 );  
  280.    
  281.   
  282.   
  283. 注册刚才创建的https协议对象 Protocol.registerProtocol("https " , myhttps);  
  284.    
  285.   
  286.   
  287. 然后按照普通编程方式打开https的目标地址,代码请参见test.NoCertificationHttpsGetSample   
  288. 处理代理服务器  
  289.   
  290. HttpClient中使用代理服务器非常简单,调用HttpClient中setProxy方法就可以,方法的第一个参数是代理服务器地址,第二个参数是端口号。另外HttpClient也支持SOCKS代理。  
  291.   
  292.   
  293. httpClient.getHostConfiguration().setProxy(hostName,port);  
  294.    
  295.   
  296.   
  297.   
  298.    
  299.   
  300.   
  301.  回页首   
  302.    
  303.   
  304.   
  305.   
  306. 结论  
  307.   
  308. 从上面的介绍中,可以知道HttpClient对http协议支持非常好,使用起来很简单,版本更新快,功能也很强大,具有足够的灵活性和扩展性。对于想在Java应用中直接访问http资源的编程人员来说,HttpClient是一个不可多得的好工具。  
  309.   
  310.   
  311.   
  312.   
  313. 参考资料   
  314.   
  315. Commons logging包含了各种各样的日志API的实现,读者可以通过站点http://jakarta.apache.org/commons/logging/得到详细的内容   
  316.   
  317.   
  318. Commons codec包含了一些一般的解码/编码算法。包含了语音编码、十六进制、Base64和URL编码等,通过http://jakarta.apache.org/commons/codec/可以得到详细的内容   
  319.   
  320.   
  321. rfc2616是关于HTTP/1.1 的文档,可以在http: //www.faqs.org/rfcs/rfc2616.html上得到详细的内容,另外rfc1945是关于HTTP/1.0的文档,通过http://www.faqs.org/rfcs/rfc1945.html可以得到详细内容   
  322.   
  323.   
  324. SSL――SSL 是由 Netscape Communications Corporation 于 1994  年开发的,而 TLS V1. 0  是由 Internet Engineering Task Force(IETF)定义的标准,它基于 SSL V3. 0 ,并且在使用的加密算法上与其有些许的不同。例如,SSL 使用 Message Authentication Code(MAC)算法来生成完整性校验值,而 TLS 应用密钥的 Hashing  for  Message Authentication Code(HMAC)算法。  
  325.   
  326.   
  327. IBM JSSE提供了SSL(Secure Sockets Layer)和TLS(Transport Layer Security)的java实现,在http://www-03.ibm.com/servers/eserver/zseries/software/java/jsse.html中可以得到详细的信息   
  328.   
  329.   
  330. Keytool是一个管理密钥和证书的工具。关于它详细的使用信息可以在http://www.doc.ic.ac.uk/csg/java/1.3.1docs/tooldocs/solaris/keytool.html上得到   
  331.   
  332.   
  333. HTTPClient的主页是http://jakarta.apache.org/commons/httpclient/,你可以在这里得到关于HttpClient更加详细的信息   

 

Java代码
  1. package  com;  
  2.   
  3. import  java.io.IOException;  
  4.   
  5. import  org.apache.commons.httpclient.DefaultHttpMethodRetryHandler;  
  6. import  org.apache.commons.httpclient.HttpClient;  
  7. import  org.apache.commons.httpclient.HttpException;  
  8. import  org.apache.commons.httpclient.HttpStatus;  
  9. import  org.apache.commons.httpclient.methods.GetMethod;  
  10. import  org.apache.commons.httpclient.params.HttpMethodParams;  
  11.   
  12.   
  13.   
  14. public   class  HttpClientSimple {  
  15.     public   static   void  main(String[] args){  
  16.         //构造HttpClient的实例   
  17.         HttpClient httpClient = new  HttpClient();  
  18.         //创建GET方法的实例   
  19.         GetMethod getMethod = new  GetMethod( "http://www.ibm.com" );  
  20.         //使用系统提供的默认的恢复策略   
  21.         getMethod.getParams().setParameter(HttpMethodParams.RETRY_HANDLER,  
  22.           new  DefaultHttpMethodRetryHandler());  
  23.         try {  
  24.             //执行getMethod   
  25.             int  statusCode = httpClient.executeMethod(getMethod);  
  26.             if  (statusCode != HttpStatus.SC_OK){  
  27.                 System.err.println("Method failed: "   
  28.                           + getMethod.getStatusLine());  
  29.             }  
  30.             System.out.println("charset=" +getMethod.getResponseCharSet());  
  31.               
  32.             //读取内容 ,第二种方式获取   
  33.             String newStr = new  String(getMethod.getResponseBodyAsString().getBytes(), "UTF-8" );  
  34.             System.out.println(newStr);  
  35.               
  36.             //读取内容 ,第一种方式获取   
  37.             //byte[] responseBody = getMethod.getResponseBody();   
  38.             //处理内容   
  39.             //System.out.println(new String(responseBody));   
  40.         }catch (HttpException e){  
  41.             //发生致命的异常,可能是协议不对或者返回的内容有问题   
  42.            System.out.println("Please check your provided http address!" );  
  43.            e.printStackTrace();  
  44.         }catch (IOException e){  
  45.             //发生网络异常   
  46.             e.printStackTrace();  
  47.         }finally {  
  48.             //释放连接   
  49.             getMethod.releaseConnection();  
  50.         }  
  51.     }  
  52.   
  53. }  

 

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:341052次
    • 积分:4515
    • 等级:
    • 排名:第6523名
    • 原创:75篇
    • 转载:186篇
    • 译文:2篇
    • 评论:52条
    个人简介

    每天进步一点点。。。


    从2009年毕业到现在,做过Java后台开发,PL/SQL开发,会编写shell脚本,现为兼职开发的MySQL DBA。为人友善诚恳,工作踏实,吃苦耐劳,富有朝气,激情,以及团队合作意识。
    文章分类
    最新评论