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
總結
以上是生活随笔為你收集整理的HttpURLConnection简单用法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【J2EE设计模式】模型-视图-控制器模
- 下一篇: 《龙珠传奇》鳌拜好的坏的 谁给鳌拜下毒第