封装 HttpURLConnection

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

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

  1. packagecom.sw.study.urlConnection;
  2. importjava.io.BufferedReader;
  3. importjava.io.InputStreamReader;
  4. importjava.io.OutputStream;
  5. importjava.net.HttpURLConnection;
  6. importjava.net.URL;
  7. importjava.net.URLConnection;
  8. importjava.util.HashMap;
  9. importjava.util.Map;
  10. publicclassURLConnectionUtil{
  11. privatestaticfinalStringSERVLET_POST="POST";
  12. privatestaticfinalStringSERVLET_GET="GET";
  13. privatestaticfinalStringSERVLET_DELETE="DELETE";
  14. privatestaticfinalStringSERVLET_PUT="PUT";
  15. privatestaticStringprepareParam(Map<String,Object>paramMap){
  16. StringBuffersb=newStringBuffer();
  17. if(paramMap.isEmpty()){
  18. return"";
  19. }else{
  20. for(Stringkey:paramMap.keySet()){
  21. Stringvalue=(String)paramMap.get(key);
  22. if(sb.length()<1){
  23. sb.append(key).append("=").append(value);
  24. }else{
  25. sb.append("&").append(key).append("=").append(value);
  26. }
  27. }
  28. returnsb.toString();
  29. }
  30. }
  31. publicstaticvoiddoPost(StringurlStr,Map<String,Object>paramMap)throwsException{
  32. URLurl=newURL(urlStr);
  33. HttpURLConnectionconn=(HttpURLConnection)url.openConnection();
  34. conn.setRequestMethod(SERVLET_POST);
  35. StringparamStr=prepareParam(paramMap);
  36. conn.setDoInput(true);
  37. conn.setDoOutput(true);
  38. OutputStreamos=conn.getOutputStream();
  39. os.write(paramStr.toString().getBytes("utf-8"));
  40. os.close();
  41. BufferedReaderbr=newBufferedReader(newInputStreamReader(conn.getInputStream()));
  42. Stringline;
  43. Stringresult="";
  44. while((line=br.readLine())!=null){
  45. result+="/n"+line;
  46. }
  47. System.out.println(result);
  48. br.close();
  49. }
  50. publicstaticvoiddoGet(StringurlStr,Map<String,Object>paramMap)throwsException{
  51. StringparamStr=prepareParam(paramMap);
  52. if(paramStr==null||paramStr.trim().length()<1){
  53. }else{
  54. urlStr+="?"+paramStr;
  55. }
  56. System.out.println(urlStr);
  57. URLurl=newURL(urlStr);
  58. HttpURLConnectionconn=(HttpURLConnection)url.openConnection();
  59. conn.setRequestMethod(SERVLET_PUT);
  60. conn.setRequestProperty("Content-Type","text/html;charset=UTF-8");
  61. conn.connect();
  62. BufferedReaderbr=newBufferedReader(newInputStreamReader(conn.getInputStream()));
  63. Stringline;
  64. Stringresult="";
  65. while((line=br.readLine())!=null){
  66. result+="/n"+line;
  67. }
  68. System.out.println(result);
  69. br.close();
  70. }
  71. publicstaticvoiddoPut(StringurlStr,Map<String,Object>paramMap)throwsException{
  72. URLurl=newURL(urlStr);
  73. HttpURLConnectionconn=(HttpURLConnection)url.openConnection();
  74. conn.setRequestMethod(SERVLET_PUT);
  75. StringparamStr=prepareParam(paramMap);
  76. conn.setDoInput(true);
  77. conn.setDoOutput(true);
  78. OutputStreamos=conn.getOutputStream();
  79. os.write(paramStr.toString().getBytes("utf-8"));
  80. os.close();
  81. BufferedReaderbr=newBufferedReader(newInputStreamReader(conn.getInputStream()));
  82. Stringline;
  83. Stringresult="";
  84. while((line=br.readLine())!=null){
  85. result+="/n"+line;
  86. }
  87. System.out.println(result);
  88. br.close();
  89. }
  90. publicstaticvoiddoDelete(StringurlStr,Map<String,Object>paramMap)throwsException{
  91. StringparamStr=prepareParam(paramMap);
  92. if(paramStr==null||paramStr.trim().length()<1){
  93. }else{
  94. urlStr+="?"+paramStr;
  95. }
  96. System.out.println(urlStr);
  97. URLurl=newURL(urlStr);
  98. HttpURLConnectionconn=(HttpURLConnection)url.openConnection();
  99. conn.setDoOutput(true);
  100. conn.setRequestMethod(SERVLET_DELETE);
  101. //屏蔽掉的代码是错误的,java.net.ProtocolException:HTTPmethodDELETEdoesn'tsupportoutput
  102. /*OutputStreamos=conn.getOutputStream();
  103. os.write(paramStr.toString().getBytes("utf-8"));
  104. os.close();*/
  105. if(conn.getResponseCode()==200){
  106. System.out.println("成功");
  107. }else{
  108. System.out.println(conn.getResponseCode());
  109. }
  110. }
  111. publicstaticvoidmain(String[]args)throwsException{
  112. StringurlStr="http://localhost:8080/SwTest/ReceiveDataServlet";
  113. Map<String,Object>map=newHashMap<String,Object>();
  114. map.put("username","张三");
  115. map.put("password","88888");
  116. //URLConnectionUtil.doGet(urlStr,map);
  117. //URLConnectionUtil.doPost(urlStr,map);
  118. //URLConnectionUtil.doPut(urlStr,map);
  119. URLConnectionUtil.doDelete(urlStr,map);
  120. }
  121. }

  1. packagecom.sw.study.urlConnection;
  2. importjava.io.BufferedReader;
  3. importjava.io.InputStreamReader;
  4. importjava.io.OutputStream;
  5. importjava.net.HttpURLConnection;
  6. importjava.net.URL;
  7. importjava.net.URLConnection;
  8. importjava.util.HashMap;
  9. importjava.util.Map;
  10. publicclassURLConnectionUtil{
  11. privatestaticfinalStringSERVLET_POST="POST";
  12. privatestaticfinalStringSERVLET_GET="GET";
  13. privatestaticfinalStringSERVLET_DELETE="DELETE";
  14. privatestaticfinalStringSERVLET_PUT="PUT";
  15. privatestaticStringprepareParam(Map<String,Object>paramMap){
  16. StringBuffersb=newStringBuffer();
  17. if(paramMap.isEmpty()){
  18. return"";
  19. }else{
  20. for(Stringkey:paramMap.keySet()){
  21. Stringvalue=(String)paramMap.get(key);
  22. if(sb.length()<1){
  23. sb.append(key).append("=").append(value);
  24. }else{
  25. sb.append("&").append(key).append("=").append(value);
  26. }
  27. }
  28. returnsb.toString();
  29. }
  30. }
  31. publicstaticvoiddoPost(StringurlStr,Map<String,Object>paramMap)throwsException{
  32. URLurl=newURL(urlStr);
  33. HttpURLConnectionconn=(HttpURLConnection)url.openConnection();
  34. conn.setRequestMethod(SERVLET_POST);
  35. StringparamStr=prepareParam(paramMap);
  36. conn.setDoInput(true);
  37. conn.setDoOutput(true);
  38. OutputStreamos=conn.getOutputStream();
  39. os.write(paramStr.toString().getBytes("utf-8"));
  40. os.close();
  41. BufferedReaderbr=newBufferedReader(newInputStreamReader(conn.getInputStream()));
  42. Stringline;
  43. Stringresult="";
  44. while((line=br.readLine())!=null){
  45. result+="/n"+line;
  46. }
  47. System.out.println(result);
  48. br.close();
  49. }
  50. publicstaticvoiddoGet(StringurlStr,Map<String,Object>paramMap)throwsException{
  51. StringparamStr=prepareParam(paramMap);
  52. if(paramStr==null||paramStr.trim().length()<1){
  53. }else{
  54. urlStr+="?"+paramStr;
  55. }
  56. System.out.println(urlStr);
  57. URLurl=newURL(urlStr);
  58. HttpURLConnectionconn=(HttpURLConnection)url.openConnection();
  59. conn.setRequestMethod(SERVLET_PUT);
  60. conn.setRequestProperty("Content-Type","text/html;charset=UTF-8");
  61. conn.connect();
  62. BufferedReaderbr=newBufferedReader(newInputStreamReader(conn.getInputStream()));
  63. Stringline;
  64. Stringresult="";
  65. while((line=br.readLine())!=null){
  66. result+="/n"+line;
  67. }
  68. System.out.println(result);
  69. br.close();
  70. }
  71. publicstaticvoiddoPut(StringurlStr,Map<String,Object>paramMap)throwsException{
  72. URLurl=newURL(urlStr);
  73. HttpURLConnectionconn=(HttpURLConnection)url.openConnection();
  74. conn.setRequestMethod(SERVLET_PUT);
  75. StringparamStr=prepareParam(paramMap);
  76. conn.setDoInput(true);
  77. conn.setDoOutput(true);
  78. OutputStreamos=conn.getOutputStream();
  79. os.write(paramStr.toString().getBytes("utf-8"));
  80. os.close();
  81. BufferedReaderbr=newBufferedReader(newInputStreamReader(conn.getInputStream()));
  82. Stringline;
  83. Stringresult="";
  84. while((line=br.readLine())!=null){
  85. result+="/n"+line;
  86. }
  87. System.out.println(result);
  88. br.close();
  89. }
  90. publicstaticvoiddoDelete(StringurlStr,Map<String,Object>paramMap)throwsException{
  91. StringparamStr=prepareParam(paramMap);
  92. if(paramStr==null||paramStr.trim().length()<1){
  93. }else{
  94. urlStr+="?"+paramStr;
  95. }
  96. System.out.println(urlStr);
  97. URLurl=newURL(urlStr);
  98. HttpURLConnectionconn=(HttpURLConnection)url.openConnection();
  99. conn.setDoOutput(true);
  100. conn.setRequestMethod(SERVLET_DELETE);
  101. //屏蔽掉的代码是错误的,java.net.ProtocolException:HTTPmethodDELETEdoesn'tsupportoutput
  102. /*OutputStreamos=conn.getOutputStream();
  103. os.write(paramStr.toString().getBytes("utf-8"));
  104. os.close();*/
  105. if(conn.getResponseCode()==200){
  106. System.out.println("成功");
  107. }else{
  108. System.out.println(conn.getResponseCode());
  109. }
  110. }
  111. publicstaticvoidmain(String[]args)throwsException{
  112. StringurlStr="http://localhost:8080/SwTest/ReceiveDataServlet";
  113. Map<String,Object>map=newHashMap<String,Object>();
  114. map.put("username","张三");
  115. map.put("password","88888");
  116. //URLConnectionUtil.doGet(urlStr,map);
  117. //URLConnectionUtil.doPost(urlStr,map);
  118. //URLConnectionUtil.doPut(urlStr,map);
  119. URLConnectionUtil.doDelete(urlStr,map);
  120. }
  121. }

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

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

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

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

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

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

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

附上Servlet端程序

  1. packagecom.sw.servlet;
  2. importjava.io.BufferedReader;
  3. importjava.io.IOException;
  4. importjava.io.InputStreamReader;
  5. importjava.io.OutputStream;
  6. importjavax.servlet.ServletException;
  7. importjavax.servlet.ServletInputStream;
  8. importjavax.servlet.http.HttpServlet;
  9. importjavax.servlet.http.HttpServletRequest;
  10. importjavax.servlet.http.HttpServletResponse;
  11. /**
  12. *ServletimplementationclassReceiveDataServlet
  13. */
  14. publicclassReceiveDataServletextendsHttpServlet{
  15. privatestaticfinallongserialVersionUID=1L;
  16. /**
  17. *@seeHttpServlet#HttpServlet()
  18. */
  19. publicReceiveDataServlet(){
  20. super();
  21. //TODOAuto-generatedconstructorstub
  22. }
  23. /**
  24. *@seeHttpServlet#doGet(HttpServletRequestrequest,HttpServletResponseresponse)
  25. */
  26. protectedvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{
  27. System.out.println("----------get--------------");
  28. Stringusername=newString(request.getParameter("username").getBytes("iso-8859-1"),"utf-8");
  29. Stringpassword=newString(request.getParameter("password").getBytes("iso-8859-1"),"utf-8");
  30. System.out.println(username);
  31. System.out.println(password);
  32. OutputStreamos=response.getOutputStream();
  33. os.write("get".getBytes("utf-8"));
  34. }
  35. /**
  36. *@seeHttpServlet#doPost(HttpServletRequestrequest,HttpServletResponseresponse)
  37. */
  38. protectedvoiddoPost(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{
  39. System.out.println("----------post--------------");
  40. BufferedReaderbr=newBufferedReader(newInputStreamReader((ServletInputStream)request.getInputStream()));
  41. Stringline=null;
  42. StringBuildersb=newStringBuilder();
  43. while((line=br.readLine())!=null){
  44. sb.append(line);
  45. }
  46. System.out.println(sb.toString());
  47. br.close();
  48. /*Stringusername=newString(request.getParameter("username").getBytes("iso-8859-1"),"utf-8");
  49. Stringpassword=newString(request.getParameter("password").getBytes("iso-8859-1"),"utf-8");
  50. System.out.println(username);
  51. System.out.println(password);
  52. */OutputStreamos=response.getOutputStream();
  53. os.write("post".getBytes("utf-8"));
  54. }
  55. @Override
  56. protectedvoiddoDelete(HttpServletRequestrequest,HttpServletResponseresponse)
  57. throwsServletException,IOException{
  58. System.out.println("----------delete--------------");
  59. Stringusername=newString(request.getParameter("username").getBytes("iso-8859-1"),"utf-8");
  60. Stringpassword=newString(request.getParameter("password").getBytes("iso-8859-1"),"utf-8");
  61. System.out.println(username);
  62. System.out.println(password);
  63. OutputStreamos=response.getOutputStream();
  64. os.write("delete".getBytes("utf-8"));
  65. }
  66. @Override
  67. protectedvoiddoPut(HttpServletRequestrequest,HttpServletResponseresponse)
  68. throwsServletException,IOException{
  69. System.out.println("----------put--------------");
  70. /*BufferedReaderbr=newBufferedReader(newInputStreamReader((ServletInputStream)request.getInputStream()));
  71. Stringline=null;
  72. StringBuildersb=newStringBuilder();
  73. while((line=br.readLine())!=null){
  74. sb.append(line);
  75. }
  76. System.out.println(sb.toString());
  77. br.close();*/
  78. Stringusername=newString(request.getParameter("username").getBytes("iso-8859-1"),"utf-8");
  79. Stringpassword=newString(request.getParameter("password").getBytes("iso-8859-1"),"utf-8");
  80. System.out.println(username);
  81. System.out.println(password);
  82. OutputStreamos=response.getOutputStream();
  83. os.write("put".getBytes("utf-8"));
  84. }
  85. }

  1. packagecom.sw.servlet;
  2. importjava.io.BufferedReader;
  3. importjava.io.IOException;
  4. importjava.io.InputStreamReader;
  5. importjava.io.OutputStream;
  6. importjavax.servlet.ServletException;
  7. importjavax.servlet.ServletInputStream;
  8. importjavax.servlet.http.HttpServlet;
  9. importjavax.servlet.http.HttpServletRequest;
  10. importjavax.servlet.http.HttpServletResponse;
  11. /**
  12. *ServletimplementationclassReceiveDataServlet
  13. */
  14. publicclassReceiveDataServletextendsHttpServlet{
  15. privatestaticfinallongserialVersionUID=1L;
  16. /**
  17. *@seeHttpServlet#HttpServlet()
  18. */
  19. publicReceiveDataServlet(){
  20. super();
  21. //TODOAuto-generatedconstructorstub
  22. }
  23. /**
  24. *@seeHttpServlet#doGet(HttpServletRequestrequest,HttpServletResponseresponse)
  25. */
  26. protectedvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{
  27. System.out.println("----------get--------------");
  28. Stringusername=newString(request.getParameter("username").getBytes("iso-8859-1"),"utf-8");
  29. Stringpassword=newString(request.getParameter("password").getBytes("iso-8859-1"),"utf-8");
  30. System.out.println(username);
  31. System.out.println(password);
  32. OutputStreamos=response.getOutputStream();
  33. os.write("get".getBytes("utf-8"));
  34. }
  35. /**
  36. *@seeHttpServlet#doPost(HttpServletRequestrequest,HttpServletResponseresponse)
  37. */
  38. protectedvoiddoPost(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{
  39. System.out.println("----------post--------------");
  40. BufferedReaderbr=newBufferedReader(newInputStreamReader((ServletInputStream)request.getInputStream()));
  41. Stringline=null;
  42. StringBuildersb=newStringBuilder();
  43. while((line=br.readLine())!=null){
  44. sb.append(line);
  45. }
  46. System.out.println(sb.toString());
  47. br.close();
  48. /*Stringusername=newString(request.getParameter("username").getBytes("iso-8859-1"),"utf-8");
  49. Stringpassword=newString(request.getParameter("password").getBytes("iso-8859-1"),"utf-8");
  50. System.out.println(username);
  51. System.out.println(password);
  52. */OutputStreamos=response.getOutputStream();
  53. os.write("post".getBytes("utf-8"));
  54. }
  55. @Override
  56. protectedvoiddoDelete(HttpServletRequestrequest,HttpServletResponseresponse)
  57. throwsServletException,IOException{
  58. System.out.println("----------delete--------------");
  59. Stringusername=newString(request.getParameter("username").getBytes("iso-8859-1"),"utf-8");
  60. Stringpassword=newString(request.getParameter("password").getBytes("iso-8859-1"),"utf-8");
  61. System.out.println(username);
  62. System.out.println(password);
  63. OutputStreamos=response.getOutputStream();
  64. os.write("delete".getBytes("utf-8"));
  65. }
  66. @Override
  67. protectedvoiddoPut(HttpServletRequestrequest,HttpServletResponseresponse)
  68. throwsServletException,IOException{
  69. System.out.println("----------put--------------");
  70. /*BufferedReaderbr=newBufferedReader(newInputStreamReader((ServletInputStream)request.getInputStream()));
  71. Stringline=null;
  72. StringBuildersb=newStringBuilder();
  73. while((line=br.readLine())!=null){
  74. sb.append(line);
  75. }
  76. System.out.println(sb.toString());
  77. br.close();*/
  78. Stringusername=newString(request.getParameter("username").getBytes("iso-8859-1"),"utf-8");
  79. Stringpassword=newString(request.getParameter("password").getBytes("iso-8859-1"),"utf-8");
  80. System.out.println(username);
  81. System.out.println(password);
  82. OutputStreamos=response.getOutputStream();
  83. os.write("put".getBytes("utf-8"));
  84. }
  85. }

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

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

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

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值