java URLConnection总结(经典易懂).doc

上传人:11****ws 文档编号:3262898 上传时间:2019-05-27 格式:DOC 页数:7 大小:57KB
下载 相关 举报
java URLConnection总结(经典易懂).doc_第1页
第1页 / 共7页
java URLConnection总结(经典易懂).doc_第2页
第2页 / 共7页
java URLConnection总结(经典易懂).doc_第3页
第3页 / 共7页
java URLConnection总结(经典易懂).doc_第4页
第4页 / 共7页
java URLConnection总结(经典易懂).doc_第5页
第5页 / 共7页
点击查看更多>>
资源描述

1、 Java URLConnection 总结Java URLConnection 总结 针对 JDK 中的 URLConnection 连接 Servlet 的问题,网上有虽然有所涉及,但是只是说明了某一个或几个问题,是以 FAQ 的方式来解决的,而且比较零散,现在对这个类的使用就本人在项目中的使用经验做如下总结: 1: URL 请求的类别: 分为二类,GET 与 POST 请求。二者的区别在于: a:) get 请求可以获取静态页面,也可以把参数放在 URL 字串后面,传递给servlet, b:) post 与 get 的不同之处在于 post 的参数不是放在 URL 字串里面,而是放在

2、http 请求的正文内。2: URLConnection 的对象问题: URLConnection 的对象,如下代码示例:Java 代码1. 1. / 下面的 index.jsp 由 映射到 2. 2. / 一个 Servlet(com.quantanetwork.getClientDataServlet) 3. 3. / 该 Servlet 的注意点下边会提到 4. 4. URL url = new URL(“http:/localhost:8080/TestHttpURLConnectionPro/index.jsp“); 5. 5. 6. 6. URLConnection rulConn

3、ection = url.openConnection();/ 此处的 urlConnection 对象实际上是根据 URL 的 7. 7. / 请求协议(此处是 http)生成的 URLConnection 类 的子类HttpURLConnection,故此处最好将其转化 8. 9. / 为 HttpURLConnection 类型的对象,以便用到 HttpURLConnection 更多的 API.如下: 9. 11. 10. 12. HttpURLConnection httpUrlConnection = (HttpURLConnection)rulConnection; 3: Htt

4、pURLConnection 对象参数问题Java 代码1. 1. / 设置是否向 httpUrlConnection 输出,因为这个是 post 请求,参数要放在 2. 2. / http 正文内,因此需要设为 true, 默认情况下是 false; 3. 3. httpUrlConnection.setDoOutput(true); 4. 4. 5. 5. / 设置是否从 httpUrlConnection 读入,默认情况下是 true; 6. 6. httpUrlConnection.setDoInput(true); 7. 7. 8. 8. / Post 请求不能使用缓存 9. 9.

5、httpUrlConnection.setUseCaches(false); 10. 10. 11. 11. / 设定传送的内容类型是可序列化的 java 对象 12. 12. / (如果不设此项,在传送序列化对象时, 当 WEB 服务默认的不是这种类型时可能抛 java.io.EOFException) 13. 13. httpUrlConnection.setRequestProperty(“Content-type“, “application/x-java-serialized-object“); 14. 14. 15. 15. / 设定请求的方法为“POST“,默认是 GET 16.

6、 16. httpUrlConnection.setRequestMethod(“POST“); 17. 17. 18. 18. / 连接,从上述第 2 条中 url.openConnection()至此的配置必须要在connect 之前完成, 19. 19. httpUrlConnection.connect(); 4: HttpURLConnection 连接问题:Java 代码1. 1. / 此处 getOutputStream 会隐含的进行 connect(即:如同调用上面的connect()方法, 2. 2. / 所以在开发中不调用上述的 connect()也可以) 。 3. 3.

7、OutputStream outStrm = httpUrlConnection.getOutputStream(); 5: HttpURLConnection 写数据与发送数据问题:Java 代码1. 1. / 现在通过输出流对象构建对象输出流对象,以实现输出可序列化的对象。2. 2. ObjectOutputStream objOutputStrm = new ObjectOutputStream(outStrm); 3. 3. 4. 4. / 向对象输出流写出数据,这些数据将存到内存缓冲区中 5. 5. objOutputStrm.writeObject(new String(“我是测试

8、数据“); 6. 6. 7. 7. / 刷新对象输出流,将任何字节都写入潜在的流中(些处为ObjectOutputStream) 8. 8. objOutputStm.flush(); 9. 9. 10. 10. / 关闭流对象。此时,不能再向对象输出流写入任何数据,先前写入的数据存在于内存缓冲区中, 11. 11. / 在调用下边的 getInputStream()函数时才把准备好的 http 请求正式发送到服务器 12. 12. objOutputStm.close(); 13. 13. 14. 14. / 调用 HttpURLConnection 连接对象的 getInputStream

9、()函数, 15. 15. / 将内存缓冲区中封装好的完整的 HTTP 请求电文发送到服务端。 16. 16. InputStream inStrm = httpConn.getInputStream(); / Servlet 端的开发注意点:a:) 对于客户端发送的 POST 类型的 HTTP 请求,Servlet 必须实现 doPost 方法,而不能用 doGet 方法。 b:) 用 HttpServletRequest 的 getInputStream()方法取得 InputStream 的对象,比如:Java 代码1. InputStream inStream = httpReques

10、t.getInputStream(); 2. 现在调用 inStream.available()(该方法用于“返回此输入流下一个方法调用可以不受阻塞地 从此输入流读取(或跳过)的估计字节数”)时,永远都反回0。试图使用此方法的返回值分配缓冲区,以保存此流所有数据的做法是不正确的。那么,现在的解决办法是 Servlet 这一端用如下实现:Java 代码1. 1. InputStream inStream = httpRequest.getInputStream(); 2. 2. ObjectInputStream objInStream = new ObjectInputStream(inStr

11、eam); 3. 3. Object obj = objInStream.readObject(); 4. 4. / 做后续的处理 5. 5. / 。 6. 6. / 。 。 而客户端,无论是否发送实际数据都要写入一个对象(那怕这个对象不用),如:Java 代码1. # ObjectOutputStream objOutputStrm = new ObjectOutputStream(outStrm); 2. # objOutputStrm.writeObject(new String(“); / 这里发送一个空数据 3. # / 甚至可以发一个 null 对象,服务端取到后再做判断处理。 4

12、. # objOutputStrm.writeObject(null); 5. # objOutputStrm.flush(); 6. # objOutputStrm.close(); 2. 注意:上述在创建对象输出流 ObjectOutputStream 时,如果将从HttpServletRequest 取得的输入流 (即:new ObjectOutputStream(outStrm)中的outStrm)包装在 BufferedOutputStream 流里面, 则必须有 objOutputStrm.flush();这一句,以便将流信息刷入缓冲输出流.如下:Java 代码1. 1 ObjectOutputStream objOutputStrm = new ObjectOutputStream(new BufferedOutputStream(outStrm); 2. 2 objOutputStrm.writeObject(null); 3. 3 objOutputStrm.flush(); / =此处必须要有. 4. 4 objOutputStrm.close();

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 重点行业资料库 > 医药卫生

Copyright © 2018-2021 Wenke99.com All rights reserved

工信部备案号浙ICP备20026746号-2  

公安局备案号:浙公网安备33038302330469号

本站为C2C交文档易平台,即用户上传的文档直接卖给下载用户,本站只是网络服务中间平台,所有原创文档下载所得归上传人所有,若您发现上传作品侵犯了您的权利,请立刻联系网站客服并提供证据,平台将在3个工作日内予以改正。