HttpURLConnection简单用法

HttpURLConnection为javaAPI提供的一种Rest访问的方式。其支持对Post,Delete,Get,Put等方式的访问。

以下为对于HttpURLConnection对Post等方式访问的一段代码。

view plaincopy to clipboardprint?

   1. package com.sw.study.urlConnection; 
   2.  
   3. import java.io.BufferedReader; 
   4. import java.io.InputStreamReader; 
   5. import java.io.OutputStream; 
   6. import java.net.HttpURLConnection; 
   7. import java.net.URL; 
   8. import java.net.URLConnection; 
   9. import java.util.HashMap; 
  10. import java.util.Map; 
  11.  
  12. public class URLConnectionUtil { 
  13.      
  14.     private static final String SERVLET_POST = "POST" ; 
  15.     private static final String SERVLET_GET = "GET" ; 
  16.     private static final String SERVLET_DELETE = "DELETE" ; 
  17.     private static final String SERVLET_PUT = "PUT" ; 
  18.      
  19.     private static String prepareParam(Map<String,Object> paramMap){ 
  20.         StringBuffer sb = new StringBuffer(); 
  21.         if(paramMap.isEmpty()){ 
  22.             return "" ; 
  23.         }else{ 
  24.             for(String key: paramMap.keySet()){ 
  25.                 String value = (String)paramMap.get(key); 
  26.                 if(sb.length()<1){ 
  27.                     sb.append(key).append("=").append(value); 
  28.                 }else{ 
  29.                     sb.append("&").append(key).append("=").append(value); 
  30.                 } 
  31.             } 
  32.             return sb.toString(); 
  33.         } 
  34.     } 
  35.      
  36.     public static void  doPost(String urlStr,Map<String,Object> paramMap ) throws Exception{ 
  37.         URL url = new URL(urlStr); 
  38.         HttpURLConnection conn = (HttpURLConnection)url.openConnection(); 
  39.         conn.setRequestMethod(SERVLET_POST); 
  40.         String paramStr = prepareParam(paramMap); 
  41.         conn.setDoInput(true); 
  42.         conn.setDoOutput(true); 
  43.         OutputStream os = conn.getOutputStream();      
  44.         os.write(paramStr.toString().getBytes("utf-8"));      
  45.         os.close();          
  46.          
  47.         BufferedReader br = new BufferedReader(new InputStreamReader(conn.getInputStream())); 
  48.         String line ; 
  49.         String result =""; 
  50.         while( (line =br.readLine()) != null ){ 
  51.             result += "\n"+line; 
  52.         } 
  53.         System.out.println(result); 
  54.         br.close(); 
  55.          
  56.     } 
  57.      
  58.     public static void  doGet(String urlStr,Map<String,Object> paramMap ) throws Exception{ 
  59.         String paramStr = prepareParam(paramMap); 
  60.         if(paramStr == null || paramStr.trim().length()<1){ 
  61.              
  62.         }else{ 
  63.             urlStr +="?"+paramStr; 
  64.         } 
  65.         System.out.println(urlStr); 
  66.         URL url = new URL(urlStr); 
  67.         HttpURLConnection conn = (HttpURLConnection)url.openConnection(); 
  68.         conn.setRequestMethod(SERVLET_PUT); 
  69.         conn.setRequestProperty("Content-Type","text/html; charset=UTF-8"); 
  70.          
  71.         conn.connect(); 
  72.         BufferedReader br = new BufferedReader(new InputStreamReader(conn.getInputStream())); 
  73.         String line ; 
  74.         String result =""; 
  75.         while( (line =br.readLine()) != null ){ 
  76.             result += "\n"+line; 
  77.         } 
  78.         System.out.println(result); 
  79.         br.close(); 
  80.     } 
  81.      
  82.     public static void doPut(String urlStr,Map<String,Object> paramMap) throws Exception{ 
  83.         URL url = new URL(urlStr); 
  84.         HttpURLConnection conn = (HttpURLConnection)url.openConnection(); 
  85.         conn.setRequestMethod(SERVLET_PUT); 
  86.         String paramStr = prepareParam(paramMap); 
  87.         conn.setDoInput(true); 
  88.         conn.setDoOutput(true); 
  89.         OutputStream os = conn.getOutputStream();      
  90.         os.write(paramStr.toString().getBytes("utf-8"));      
  91.         os.close();          
  92.          
  93.         BufferedReader br = new BufferedReader(new InputStreamReader(conn.getInputStream())); 
  94.         String line ; 
  95.         String result =""; 
  96.         while( (line =br.readLine()) != null ){ 
  97.             result += "\n"+line; 
  98.         } 
  99.         System.out.println(result); 
 100.         br.close(); 
 101.                  
 102.     } 
 103.      
 104.     public static void doDelete(String urlStr,Map<String,Object> paramMap) throws Exception{ 
 105.         String paramStr = prepareParam(paramMap); 
 106.         if(paramStr == null || paramStr.trim().length()<1){ 
 107.              
 108.         }else{ 
 109.             urlStr +="?"+paramStr; 
 110.         }    
 111.         System.out.println(urlStr); 
 112.         URL url = new URL(urlStr); 
 113.         HttpURLConnection conn = (HttpURLConnection)url.openConnection(); 
 114.         conn.setDoOutput(true); 
 115.         conn.setRequestMethod(SERVLET_DELETE); 
 116.         //屏蔽掉的代码是错误的,java.net.ProtocolException: HTTP method DELETE doesn't support output 
 117. /*      OutputStream os = conn.getOutputStream();     
 118.         os.write(paramStr.toString().getBytes("utf-8"));     
 119.         os.close();  */  
 120.          
 121.         if(conn.getResponseCode() ==200){ 
 122.             System.out.println("成功"); 
 123.         }else{ 
 124.             System.out.println(conn.getResponseCode()); 
 125.         } 
 126.     } 
 127.      
 128.     public static void main(String[] args) throws Exception{ 
 129.         String urlStr = "http://localhost:8080/SwTest/ReceiveDataServlet"; 
 130.         Map<String,Object> map = new HashMap<String,Object>(); 
 131.         map.put("username","张三"); 
 132.         map.put("password","88888"); 
 133. //      URLConnectionUtil.doGet(urlStr, map); 
 134. //      URLConnectionUtil.doPost(urlStr, map); 
 135. //      URLConnectionUtil.doPut(urlStr, map); 
 136.         URLConnectionUtil.doDelete(urlStr, map); 
 137.          
 138.     } 
 139.      
 140.      
 141. } 

方法中是存在重复的。有些方法是可以通过参数的改变来达到统一,但是那样的做法对于程序的扩展性会有很大的局限性。

还是对于每一种方式提供一个单独的方法进行访问比较好。

在Servlet端,获取参数可以通过

request.getInputStream,及request.getParamter来进行。

其中,当Rest访问传入参数是通过conn的outputStream来进行的,可以通过request.getInputStream来进行参数获取(Post方式可通用);

当以url?key=value方法传递参数时,可以通过request.getParamter来进行参数获取。(Post方式可通用)

其中request.getInputStream和request.getParamter两种方式不能同时出现。当request.getParamter运行的过程,也是输入流的读取过程。当输入流读取完成后,再次调用时无效的。

附上Servlet端程序

view plaincopy to clipboardprint?

   1. package com.sw.servlet; 
   2.  
   3. import java.io.BufferedReader; 
   4. import java.io.IOException; 
   5. import java.io.InputStreamReader; 
   6. import java.io.OutputStream; 
   7.  
   8. import javax.servlet.ServletException; 
   9. import javax.servlet.ServletInputStream; 
  10. import javax.servlet.http.HttpServlet; 
  11. import javax.servlet.http.HttpServletRequest; 
  12. import javax.servlet.http.HttpServletResponse; 
  13.  
  14. /**
  15.  * Servlet implementation class ReceiveDataServlet
  16.  */ 
  17. public class ReceiveDataServlet extends HttpServlet { 
  18.     private static final long serialVersionUID = 1L; 
  19.         
  20.     /**
  21.      * @see HttpServlet#HttpServlet()
  22.      */ 
  23.     public ReceiveDataServlet() { 
  24.         super(); 
  25.         // TODO Auto-generated constructor stub 
  26.     } 
  27.  
  28.     /**
  29.      * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
  30.      */ 
  31.     protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 
  32.         System.out.println("----------get--------------");       
  33.         String username = new String(request.getParameter("username").getBytes("iso-8859-1"),"utf-8"); 
  34.         String password = new String(request.getParameter("password").getBytes("iso-8859-1"),"utf-8"); 
  35.         System.out.println(username); 
  36.         System.out.println(password); 
  37.         OutputStream os = response.getOutputStream(); 
  38.         os.write("get".getBytes("utf-8")); 
  39.     } 
  40.  
  41.     /**
  42.      * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
  43.      */ 
  44.     protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 
  45.         System.out.println("----------post--------------"); 
  46.         BufferedReader br = new BufferedReader(new InputStreamReader((ServletInputStream)request.getInputStream())); 
  47.         String line = null; 
  48.         StringBuilder sb = new StringBuilder(); 
  49.         while((line = br.readLine())!=null){ 
  50.             sb.append(line); 
  51.         }        
  52.         System.out.println(sb.toString()); 
  53.         br.close(); 
  54. /*      String username = new String(request.getParameter("username").getBytes("iso-8859-1"),"utf-8");
  55.         String password = new String(request.getParameter("password").getBytes("iso-8859-1"),"utf-8");
  56.         System.out.println(username);
  57.         System.out.println(password);
  58. */      OutputStream os = response.getOutputStream(); 
  59.         os.write("post".getBytes("utf-8")); 
  60.     } 
  61.      
  62.     @Override 
  63.     protected void doDelete(HttpServletRequest request, HttpServletResponse response) 
  64.             throws ServletException, IOException { 
  65.         System.out.println("----------delete--------------"); 
  66.         String username = new String(request.getParameter("username").getBytes("iso-8859-1"),"utf-8"); 
  67.         String password = new String(request.getParameter("password").getBytes("iso-8859-1"),"utf-8"); 
  68.         System.out.println(username); 
  69.         System.out.println(password); 
  70.         OutputStream os = response.getOutputStream(); 
  71.         os.write("delete".getBytes("utf-8"));            
  72.     } 
  73.      
  74.     @Override 
  75.     protected void doPut(HttpServletRequest request, HttpServletResponse response) 
  76.             throws ServletException, IOException { 
  77.         System.out.println("----------put--------------"); 
  78.          
  79.     /*  BufferedReader br = new BufferedReader(new InputStreamReader((ServletInputStream)request.getInputStream()));
  80.         String line = null;
  81.         StringBuilder sb = new StringBuilder();
  82.         while((line = br.readLine())!=null){
  83.             sb.append(line);
  84.         }       
  85.         System.out.println(sb.toString());
  86.         br.close();*/ 
  87.          
  88.         String username = new String(request.getParameter("username").getBytes("iso-8859-1"),"utf-8"); 
  89.         String password = new String(request.getParameter("password").getBytes("iso-8859-1"),"utf-8"); 
  90.         System.out.println(username); 
  91.         System.out.println(password); 
  92.         OutputStream os = response.getOutputStream(); 
  93.         os.write("put".getBytes("utf-8"));   
  94.     } 
  95.  
  96. } 

程序中对于request.getInputStream和getParameter的获取方式可能说明的会多少有些问题,我也是通过几组测试后得出的结论。肯定有我没有测试到得。如果有问题,请指出,我会再看到评论后进行测试,修改。

另外,Apache的HttpClient非常好。封装的详细。在我的工作中也用到过,在以后会对于HttpClient进行有些单独的程序笔记。

这里HttpUrlConnection是同事在别的项目中用到的,用法比较简单,我大体给他简单讲解了一下,简明扼要,功能完备,还是很方便,

所以在这里记下来,留个笔记吧。

btw,最近工作比较忙,有2个月没有写些东西了,在工作中确实还遇到了不少有意思的问题,最近刚好快闲下来了,慢慢整理一下。

转载于:https://www.cnblogs.com/hdurur/archive/2010/04/19/1715252.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/381072.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

天勤python_天勤量化策略库:菲阿里四价策略

文章策略均基于开源免费&#xff0c;简单强大的Python量化开发包——天勤量化(TqSdk)实现菲阿里四价策略故事在2000年7月&#xff0c;日本举办了首次“ROBBINS-TAICOM期货冠军比赛”&#xff0c;总共比赛历时半年。从第一周起&#xff0c;一位名叫Fairy(菲阿里)的先生便位居首位…

个人宣传画

转载于:https://www.cnblogs.com/yellowyu/archive/2010/04/19/1715735.html

touch 连续创建文件_touch命令 – 创建文件

touch命令有两个功能&#xff1a;一是创建新的空文件&#xff0c;二是改变已有文件的时间戳属性。touch命令会根据当前的系统时间更新指定文件的访问时间和修改时间。如果文件不存在&#xff0c;将会创建新的空文件&#xff0c;除非指定了”-c”或”-h”选项。注意&#xff1a;…

转载CTF

1.MD5 compare漏洞 PHP在处理哈希字符串时&#xff0c;会利用”!”或””来对哈希值进行比较&#xff0c;它把每一个以”0E”开头的哈希值都解释为0&#xff0c;所以如果两个不同的密码经过哈希以后&#xff0c;其哈希值都是以”0E”开头的&#xff0c;那么PHP将会认为他们相同…

java jtable刷新_java-单击按钮更新JTable

I have searched on stackoverflow and a couple of people have said to use that method.不,您不应在TableModel本身的上下文之外调用任何fireTableXxx方法,否则人们会认为这完全是错误的,将来会给您带来麻烦.从代码的外观来看,什么都没有改变.如果您已根据上一个问题中提供的…

韩寒说世博会

先声明:我不是韩寒的什么粉丝,也不太关注这些作家的事情,希望这些文字能让你想到一些什么东西...........转载自:http://tieba.baidu.com/f?kz752703402 最近&#xff0c;老是有媒体要关于世博会采访我&#xff0c;我觉得很为难&#xff0c;如果我赞美他吧&#xff0c;估计我良…

windows系统下的云服务器部署tomcat

在环境配置没问题的基础下&#xff0c;如果启动服务器缺无法打开默认页面&#xff0c;则很有可能说明是你的端口问题&#xff1a; 这里我的解决方法&#xff1a; 控制面板-->系统和安全-->Windows 防火墙-->高级设置-->入站规则-->新建规则 依次选择端口-->…

营销公式

世界上最难得事情就是将别人的钱放到自己口袋。 要想别人给钱&#xff0c;首先要有控制别人的能力&#xff0c;例子&#xff0c;奴隶主能控制奴隶。 权力是来钱的关键因素。也就是说应该增加别人对你的依赖。 人们的弱点&#xff1a; 1.只看到短期利益&#xff0c;往往忽视长期…

centos修改磁盘uuid_Centos更换损坏硬盘UUID改变导致系统不能正常启动处理

Centos更换损坏硬盘UUID改变导致系统不能正常启动处理一、适用场景本文档的适用场景为&#xff0c;更换硬盘导致系统启动时因UUID不同&#xff0c;导致挂载文件读取失败&#xff0c;系统不能正常启动&#xff0c;同时本文档的处理方法也适用于fstab文件配置出错导致无法启动系统…

git远程仓库上传及本地仓库创建

第一步&#xff1a;我们需要先创建一个本地的版本库&#xff08;其实也就是一个文件夹&#xff09;。 你可以直接右击新建文件夹&#xff0c;也可以右击打开Git bash命令行窗口通过命令来创建。 现在我通过命令行在桌面新建一个TEST文件夹&#xff08;你也可以在其他任何地方创…

强大js web甘特图制作之甘特图组件和数据对象

引用CSS和JS 使用EdoGantt是一件简单轻松的事&#xff0c;首先我们在HTML页面内引用CSS和JS&#xff1a; <!--edo css--><link href"http://www.cnblogs.com/scripts/edo/res/css/edo-all.css" rel"stylesheet" type"text/css" />&l…

华为安装gsm框架_华为谷歌框架安装app下载-华为谷歌服务框架安装器(GMS安装器)下载v1.2.0 最新版-西西软件下载...

华为谷歌服务框架安装器是专为华为手机用户打造的谷歌服务框架安装软件&#xff0c;让你可以一键在手机上安装谷歌框架&#xff0c;无需root即可一键安装谷歌框架&#xff0c;使用简单方便&#xff0c;欢迎有需要的朋友前来下载。软件介绍华为谷歌服务框架安装器(GMS安装器)是一…

Butterknife使用——转

转载请标明出处&#xff1a;http://blog.csdn.net/donkor_/article/details/77879630 前言&#xff1a; ButterKnife是一个专注于Android系统的View注入框架,以前总是要写很多findViewById来找到View对象&#xff0c;有了ButterKnife可以很轻松的省去这些步骤。是大神JakeWha…

百度文档搜索与Google文档搜索的简单比较

很多有具有参考价值的资料&#xff0c;比如学生写论文报告&#xff0c;老师做课件&#xff0c;找工作准备简历都需要参考其他人的成果。在互联网上&#xff0c;这类资料一般不是普通的html网页&#xff0c;而是以Word、ppt(s)、Excel、pdf等格式存在的。虽然这些文件不象Html文…

使用宝塔部署node项目_使用宝塔面板进行项目的自动部署WebHook

首先你要知道什么是WebHook&#xff0c;如果你真的不想知道那也没关系。总之就是在你push到git仓库时会从git仓库触发一个http请求。关于http的地址根据你不同的git仓库有不同的方式去配置。首先配置宝塔面板&#xff0c;你需要安装宝塔插件中的 WebHook随便起一个名字然后保存…

git命令——转

github和gitlab等等一系列的分布式代码托管服务器方便我们开发人员在小组内开发项目&#xff0c;说起分布式代码托管就给大家提一下另外一代码托管SVN,当然他不是分布式的&#xff0c;而是集中式的代码托管&#xff0c;有兴趣的可以查阅资料了解一下&#xff0c;在这里我将着重…

17joys网站后台功能设计-阶段1

开始没想把网站设计的很完善再开始写代码&#xff0c;主要也是想通过不断的编写小模块&#xff0c;最后再整合在一起&#xff0c;这样也好记录我每个时间段的经验心得&#xff0c;在设计17joys的网站后台功能时&#xff0c;看了很多CMS系统&#xff0c;最后还是决定参考我最喜欢…

vue复选框组件自定义对勾_vue+element:树级复选框组件使用

handleCheck(checkedKeys,checkedNodes,halfCheckedKeys,halfCheckedNodes){var len 0,num 0;var _alen 0;var a [];var b [];var copyArr [];for (var i 0;i < checkedNodes.checkedNodes.length;i){//记录子节点的索引if (checkedNodes.checkedNodes[i].children nul…

汇编指令——转

今天来扒一扒X86汇编指令&#xff08;IA-32指令&#xff09;&#xff0c;首先看看它的概念&#xff1a; IA-32&#xff08;Intel Architecture 32bit&#xff0c;英特尔32位体系架构&#xff09;[1] &#xff0c;属于X86体系结构的32位版本&#xff0c;即具有32位内存地址和32…

生成颜色代码的 Java程序

在网页 http://flash.9ria.com/thread-33919-1-1.html 找到如下代码。他可以指定 开始颜色&#xff0c; 结束颜色&#xff0c; 以及 步长&#xff0c;函数返回一个 java 数组&#xff0c;数组中包含有颜色代码。 选择 开始颜色&#xff0c; 结束颜色时可以参见下面的 颜色代码表…