HttpURLConnection为javaAPI提供的一种Rest访问的方式。其支持对Post,Delete,Get,Put等方式的访问。
以下为对于HttpURLConnection对Post等方式访问的一段代码。
- packagecom.sw.study.urlConnection;
- importjava.io.BufferedReader;
- importjava.io.InputStreamReader;
- importjava.io.OutputStream;
- importjava.net.HttpURLConnection;
- importjava.net.URL;
- importjava.net.URLConnection;
- importjava.util.HashMap;
- importjava.util.Map;
- publicclassURLConnectionUtil{
- privatestaticfinalStringSERVLET_POST="POST";
- privatestaticfinalStringSERVLET_GET="GET";
- privatestaticfinalStringSERVLET_DELETE="DELETE";
- privatestaticfinalStringSERVLET_PUT="PUT";
- privatestaticStringprepareParam(Map<String,Object>paramMap){
- StringBuffersb=newStringBuffer();
- if(paramMap.isEmpty()){
- return"";
- }else{
- for(Stringkey:paramMap.keySet()){
- Stringvalue=(String)paramMap.get(key);
- if(sb.length()<1){
- sb.append(key).append("=").append(value);
- }else{
- sb.append("&").append(key).append("=").append(value);
- }
- }
- returnsb.toString();
- }
- }
- publicstaticvoiddoPost(StringurlStr,Map<String,Object>paramMap)throwsException{
- URLurl=newURL(urlStr);
- HttpURLConnectionconn=(HttpURLConnection)url.openConnection();
- conn.setRequestMethod(SERVLET_POST);
- StringparamStr=prepareParam(paramMap);
- conn.setDoInput(true);
- conn.setDoOutput(true);
- OutputStreamos=conn.getOutputStream();
- os.write(paramStr.toString().getBytes("utf-8"));
- os.close();
- BufferedReaderbr=newBufferedReader(newInputStreamReader(conn.getInputStream()));
- Stringline;
- Stringresult="";
- while((line=br.readLine())!=null){
- result+="/n"+line;
- }
- System.out.println(result);
- br.close();
- }
- publicstaticvoiddoGet(StringurlStr,Map<String,Object>paramMap)throwsException{
- StringparamStr=prepareParam(paramMap);
- if(paramStr==null||paramStr.trim().length()<1){
- }else{
- urlStr+="?"+paramStr;
- }
- System.out.println(urlStr);
- URLurl=newURL(urlStr);
- HttpURLConnectionconn=(HttpURLConnection)url.openConnection();
- conn.setRequestMethod(SERVLET_PUT);
- conn.setRequestProperty("Content-Type","text/html;charset=UTF-8");
- conn.connect();
- BufferedReaderbr=newBufferedReader(newInputStreamReader(conn.getInputStream()));
- Stringline;
- Stringresult="";
- while((line=br.readLine())!=null){
- result+="/n"+line;
- }
- System.out.println(result);
- br.close();
- }
- publicstaticvoiddoPut(StringurlStr,Map<String,Object>paramMap)throwsException{
- URLurl=newURL(urlStr);
- HttpURLConnectionconn=(HttpURLConnection)url.openConnection();
- conn.setRequestMethod(SERVLET_PUT);
- StringparamStr=prepareParam(paramMap);
- conn.setDoInput(true);
- conn.setDoOutput(true);
- OutputStreamos=conn.getOutputStream();
- os.write(paramStr.toString().getBytes("utf-8"));
- os.close();
- BufferedReaderbr=newBufferedReader(newInputStreamReader(conn.getInputStream()));
- Stringline;
- Stringresult="";
- while((line=br.readLine())!=null){
- result+="/n"+line;
- }
- System.out.println(result);
- br.close();
- }
- publicstaticvoiddoDelete(StringurlStr,Map<String,Object>paramMap)throwsException{
- StringparamStr=prepareParam(paramMap);
- if(paramStr==null||paramStr.trim().length()<1){
- }else{
- urlStr+="?"+paramStr;
- }
- System.out.println(urlStr);
- URLurl=newURL(urlStr);
- HttpURLConnectionconn=(HttpURLConnection)url.openConnection();
- conn.setDoOutput(true);
- conn.setRequestMethod(SERVLET_DELETE);
- //屏蔽掉的代码是错误的,java.net.ProtocolException:HTTPmethodDELETEdoesn'tsupportoutput
- /*OutputStreamos=conn.getOutputStream();
- os.write(paramStr.toString().getBytes("utf-8"));
- os.close();*/
- if(conn.getResponseCode()==200){
- System.out.println("成功");
- }else{
- System.out.println(conn.getResponseCode());
- }
- }
- publicstaticvoidmain(String[]args)throwsException{
- StringurlStr="http://localhost:8080/SwTest/ReceiveDataServlet";
- Map<String,Object>map=newHashMap<String,Object>();
- map.put("username","张三");
- map.put("password","88888");
- //URLConnectionUtil.doGet(urlStr,map);
- //URLConnectionUtil.doPost(urlStr,map);
- //URLConnectionUtil.doPut(urlStr,map);
- URLConnectionUtil.doDelete(urlStr,map);
- }
- }
- packagecom.sw.study.urlConnection;
- importjava.io.BufferedReader;
- importjava.io.InputStreamReader;
- importjava.io.OutputStream;
- importjava.net.HttpURLConnection;
- importjava.net.URL;
- importjava.net.URLConnection;
- importjava.util.HashMap;
- importjava.util.Map;
- publicclassURLConnectionUtil{
- privatestaticfinalStringSERVLET_POST="POST";
- privatestaticfinalStringSERVLET_GET="GET";
- privatestaticfinalStringSERVLET_DELETE="DELETE";
- privatestaticfinalStringSERVLET_PUT="PUT";
- privatestaticStringprepareParam(Map<String,Object>paramMap){
- StringBuffersb=newStringBuffer();
- if(paramMap.isEmpty()){
- return"";
- }else{
- for(Stringkey:paramMap.keySet()){
- Stringvalue=(String)paramMap.get(key);
- if(sb.length()<1){
- sb.append(key).append("=").append(value);
- }else{
- sb.append("&").append(key).append("=").append(value);
- }
- }
- returnsb.toString();
- }
- }
- publicstaticvoiddoPost(StringurlStr,Map<String,Object>paramMap)throwsException{
- URLurl=newURL(urlStr);
- HttpURLConnectionconn=(HttpURLConnection)url.openConnection();
- conn.setRequestMethod(SERVLET_POST);
- StringparamStr=prepareParam(paramMap);
- conn.setDoInput(true);
- conn.setDoOutput(true);
- OutputStreamos=conn.getOutputStream();
- os.write(paramStr.toString().getBytes("utf-8"));
- os.close();
- BufferedReaderbr=newBufferedReader(newInputStreamReader(conn.getInputStream()));
- Stringline;
- Stringresult="";
- while((line=br.readLine())!=null){
- result+="/n"+line;
- }
- System.out.println(result);
- br.close();
- }
- publicstaticvoiddoGet(StringurlStr,Map<String,Object>paramMap)throwsException{
- StringparamStr=prepareParam(paramMap);
- if(paramStr==null||paramStr.trim().length()<1){
- }else{
- urlStr+="?"+paramStr;
- }
- System.out.println(urlStr);
- URLurl=newURL(urlStr);
- HttpURLConnectionconn=(HttpURLConnection)url.openConnection();
- conn.setRequestMethod(SERVLET_PUT);
- conn.setRequestProperty("Content-Type","text/html;charset=UTF-8");
- conn.connect();
- BufferedReaderbr=newBufferedReader(newInputStreamReader(conn.getInputStream()));
- Stringline;
- Stringresult="";
- while((line=br.readLine())!=null){
- result+="/n"+line;
- }
- System.out.println(result);
- br.close();
- }
- publicstaticvoiddoPut(StringurlStr,Map<String,Object>paramMap)throwsException{
- URLurl=newURL(urlStr);
- HttpURLConnectionconn=(HttpURLConnection)url.openConnection();
- conn.setRequestMethod(SERVLET_PUT);
- StringparamStr=prepareParam(paramMap);
- conn.setDoInput(true);
- conn.setDoOutput(true);
- OutputStreamos=conn.getOutputStream();
- os.write(paramStr.toString().getBytes("utf-8"));
- os.close();
- BufferedReaderbr=newBufferedReader(newInputStreamReader(conn.getInputStream()));
- Stringline;
- Stringresult="";
- while((line=br.readLine())!=null){
- result+="/n"+line;
- }
- System.out.println(result);
- br.close();
- }
- publicstaticvoiddoDelete(StringurlStr,Map<String,Object>paramMap)throwsException{
- StringparamStr=prepareParam(paramMap);
- if(paramStr==null||paramStr.trim().length()<1){
- }else{
- urlStr+="?"+paramStr;
- }
- System.out.println(urlStr);
- URLurl=newURL(urlStr);
- HttpURLConnectionconn=(HttpURLConnection)url.openConnection();
- conn.setDoOutput(true);
- conn.setRequestMethod(SERVLET_DELETE);
- //屏蔽掉的代码是错误的,java.net.ProtocolException:HTTPmethodDELETEdoesn'tsupportoutput
- /*OutputStreamos=conn.getOutputStream();
- os.write(paramStr.toString().getBytes("utf-8"));
- os.close();*/
- if(conn.getResponseCode()==200){
- System.out.println("成功");
- }else{
- System.out.println(conn.getResponseCode());
- }
- }
- publicstaticvoidmain(String[]args)throwsException{
- StringurlStr="http://localhost:8080/SwTest/ReceiveDataServlet";
- Map<String,Object>map=newHashMap<String,Object>();
- map.put("username","张三");
- map.put("password","88888");
- //URLConnectionUtil.doGet(urlStr,map);
- //URLConnectionUtil.doPost(urlStr,map);
- //URLConnectionUtil.doPut(urlStr,map);
- URLConnectionUtil.doDelete(urlStr,map);
- }
- }
方法中是存在重复的。有些方法是可以通过参数的改变来达到统一,但是那样的做法对于程序的扩展性会有很大的局限性。
还是对于每一种方式提供一个单独的方法进行访问比较好。
在Servlet端,获取参数可以通过
request.getInputStream,及request.getParamter来进行。
其中,当Rest访问传入参数是通过conn的outputStream来进行的,可以通过request.getInputStream来进行参数获取(Post方式可通用);
当以url?key=value方法传递参数时,可以通过request.getParamter来进行参数获取。(Post方式可通用)
其中request.getInputStream和request.getParamter两种方式不能同时出现。当request.getParamter运行的过程,也是输入流的读取过程。当输入流读取完成后,再次调用时无效的。
附上Servlet端程序
- packagecom.sw.servlet;
- importjava.io.BufferedReader;
- importjava.io.IOException;
- importjava.io.InputStreamReader;
- importjava.io.OutputStream;
- importjavax.servlet.ServletException;
- importjavax.servlet.ServletInputStream;
- importjavax.servlet.http.HttpServlet;
- importjavax.servlet.http.HttpServletRequest;
- importjavax.servlet.http.HttpServletResponse;
- /**
- *ServletimplementationclassReceiveDataServlet
- */
- publicclassReceiveDataServletextendsHttpServlet{
- privatestaticfinallongserialVersionUID=1L;
- /**
- *@seeHttpServlet#HttpServlet()
- */
- publicReceiveDataServlet(){
- super();
- //TODOAuto-generatedconstructorstub
- }
- /**
- *@seeHttpServlet#doGet(HttpServletRequestrequest,HttpServletResponseresponse)
- */
- protectedvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{
- System.out.println("----------get--------------");
- Stringusername=newString(request.getParameter("username").getBytes("iso-8859-1"),"utf-8");
- Stringpassword=newString(request.getParameter("password").getBytes("iso-8859-1"),"utf-8");
- System.out.println(username);
- System.out.println(password);
- OutputStreamos=response.getOutputStream();
- os.write("get".getBytes("utf-8"));
- }
- /**
- *@seeHttpServlet#doPost(HttpServletRequestrequest,HttpServletResponseresponse)
- */
- protectedvoiddoPost(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{
- System.out.println("----------post--------------");
- BufferedReaderbr=newBufferedReader(newInputStreamReader((ServletInputStream)request.getInputStream()));
- Stringline=null;
- StringBuildersb=newStringBuilder();
- while((line=br.readLine())!=null){
- sb.append(line);
- }
- System.out.println(sb.toString());
- br.close();
- /*Stringusername=newString(request.getParameter("username").getBytes("iso-8859-1"),"utf-8");
- Stringpassword=newString(request.getParameter("password").getBytes("iso-8859-1"),"utf-8");
- System.out.println(username);
- System.out.println(password);
- */OutputStreamos=response.getOutputStream();
- os.write("post".getBytes("utf-8"));
- }
- @Override
- protectedvoiddoDelete(HttpServletRequestrequest,HttpServletResponseresponse)
- throwsServletException,IOException{
- System.out.println("----------delete--------------");
- Stringusername=newString(request.getParameter("username").getBytes("iso-8859-1"),"utf-8");
- Stringpassword=newString(request.getParameter("password").getBytes("iso-8859-1"),"utf-8");
- System.out.println(username);
- System.out.println(password);
- OutputStreamos=response.getOutputStream();
- os.write("delete".getBytes("utf-8"));
- }
- @Override
- protectedvoiddoPut(HttpServletRequestrequest,HttpServletResponseresponse)
- throwsServletException,IOException{
- System.out.println("----------put--------------");
- /*BufferedReaderbr=newBufferedReader(newInputStreamReader((ServletInputStream)request.getInputStream()));
- Stringline=null;
- StringBuildersb=newStringBuilder();
- while((line=br.readLine())!=null){
- sb.append(line);
- }
- System.out.println(sb.toString());
- br.close();*/
- Stringusername=newString(request.getParameter("username").getBytes("iso-8859-1"),"utf-8");
- Stringpassword=newString(request.getParameter("password").getBytes("iso-8859-1"),"utf-8");
- System.out.println(username);
- System.out.println(password);
- OutputStreamos=response.getOutputStream();
- os.write("put".getBytes("utf-8"));
- }
- }
- packagecom.sw.servlet;
- importjava.io.BufferedReader;
- importjava.io.IOException;
- importjava.io.InputStreamReader;
- importjava.io.OutputStream;
- importjavax.servlet.ServletException;
- importjavax.servlet.ServletInputStream;
- importjavax.servlet.http.HttpServlet;
- importjavax.servlet.http.HttpServletRequest;
- importjavax.servlet.http.HttpServletResponse;
- /**
- *ServletimplementationclassReceiveDataServlet
- */
- publicclassReceiveDataServletextendsHttpServlet{
- privatestaticfinallongserialVersionUID=1L;
- /**
- *@seeHttpServlet#HttpServlet()
- */
- publicReceiveDataServlet(){
- super();
- //TODOAuto-generatedconstructorstub
- }
- /**
- *@seeHttpServlet#doGet(HttpServletRequestrequest,HttpServletResponseresponse)
- */
- protectedvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{
- System.out.println("----------get--------------");
- Stringusername=newString(request.getParameter("username").getBytes("iso-8859-1"),"utf-8");
- Stringpassword=newString(request.getParameter("password").getBytes("iso-8859-1"),"utf-8");
- System.out.println(username);
- System.out.println(password);
- OutputStreamos=response.getOutputStream();
- os.write("get".getBytes("utf-8"));
- }
- /**
- *@seeHttpServlet#doPost(HttpServletRequestrequest,HttpServletResponseresponse)
- */
- protectedvoiddoPost(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{
- System.out.println("----------post--------------");
- BufferedReaderbr=newBufferedReader(newInputStreamReader((ServletInputStream)request.getInputStream()));
- Stringline=null;
- StringBuildersb=newStringBuilder();
- while((line=br.readLine())!=null){
- sb.append(line);
- }
- System.out.println(sb.toString());
- br.close();
- /*Stringusername=newString(request.getParameter("username").getBytes("iso-8859-1"),"utf-8");
- Stringpassword=newString(request.getParameter("password").getBytes("iso-8859-1"),"utf-8");
- System.out.println(username);
- System.out.println(password);
- */OutputStreamos=response.getOutputStream();
- os.write("post".getBytes("utf-8"));
- }
- @Override
- protectedvoiddoDelete(HttpServletRequestrequest,HttpServletResponseresponse)
- throwsServletException,IOException{
- System.out.println("----------delete--------------");
- Stringusername=newString(request.getParameter("username").getBytes("iso-8859-1"),"utf-8");
- Stringpassword=newString(request.getParameter("password").getBytes("iso-8859-1"),"utf-8");
- System.out.println(username);
- System.out.println(password);
- OutputStreamos=response.getOutputStream();
- os.write("delete".getBytes("utf-8"));
- }
- @Override
- protectedvoiddoPut(HttpServletRequestrequest,HttpServletResponseresponse)
- throwsServletException,IOException{
- System.out.println("----------put--------------");
- /*BufferedReaderbr=newBufferedReader(newInputStreamReader((ServletInputStream)request.getInputStream()));
- Stringline=null;
- StringBuildersb=newStringBuilder();
- while((line=br.readLine())!=null){
- sb.append(line);
- }
- System.out.println(sb.toString());
- br.close();*/
- Stringusername=newString(request.getParameter("username").getBytes("iso-8859-1"),"utf-8");
- Stringpassword=newString(request.getParameter("password").getBytes("iso-8859-1"),"utf-8");
- System.out.println(username);
- System.out.println(password);
- OutputStreamos=response.getOutputStream();
- os.write("put".getBytes("utf-8"));
- }
- }
程序中对于request.getInputStream和getParameter的获取方式可能说明的会多少有些问题,我也是通过几组测试后得出的结论。肯定有我没有测试到得。如果有问题,请指出,我会再看到评论后进行测试,修改。
另外,Apache的HttpClient非常好。封装的详细。在我的工作中也用到过,在以后会对于HttpClient进行有些单独的程序笔记。
这里HttpUrlConnection是同事在别的项目中用到的,用法比较简单,我大体给他简单讲解了一下,简明扼要,功能完备,还是很方便,
所以在这里记下来,留个笔记吧。
btw,最近工作比较忙,有2个月没有写些东西了,在工作中确实还遇到了不少有意思的问题,最近刚好快闲下来了,慢慢整理一下。