封装 HttpURLConnection
2011-12-27 14:49
525 查看
HttpURLConnection为javaAPI提供的一种Rest访问的方式。其支持对Post,Delete,Get,Put等方式的访问。
以下为对于HttpURLConnection对Post等方式访问的一段代码。
view
plain copy
to clipboard print ?
package com.sw.study.urlConnection;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLConnection;
import java.util.HashMap;
import java.util.Map;
public class URLConnectionUtil {
private static final String SERVLET_POST = "POST" ;
private static final String SERVLET_GET = "GET" ;
private static final String SERVLET_DELETE = "DELETE" ;
private static final String SERVLET_PUT = "PUT" ;
private static String prepareParam(Map<String,Object> paramMap){
StringBuffer sb = new StringBuffer();
if (paramMap.isEmpty()){
return "" ;
}else {
for (String key: paramMap.keySet()){
String value = (String)paramMap.get(key);
if (sb.length()< 1 ){
sb.append(key).append("=" ).append(value);
}else {
sb.append("&" ).append(key).append( "=" ).append(value);
}
}
return sb.toString();
}
}
public static void doPost(String urlStr,Map<String,Object> paramMap ) throws Exception{
URL url = new URL(urlStr);
HttpURLConnection conn = (HttpURLConnection)url.openConnection();
conn.setRequestMethod(SERVLET_POST);
String paramStr = prepareParam(paramMap);
conn.setDoInput(true );
conn.setDoOutput(true );
OutputStream os = conn.getOutputStream();
os.write(paramStr.toString().getBytes("utf-8" ));
os.close();
BufferedReader br = new BufferedReader( new InputStreamReader(conn.getInputStream()));
String line ;
String result ="" ;
while ( (line =br.readLine()) != null ){
result += "/n" +line;
}
System.out.println(result);
br.close();
}
public static void doGet(String urlStr,Map<String,Object> paramMap ) throws Exception{
String paramStr = prepareParam(paramMap);
if (paramStr == null || paramStr.trim().length()< 1 ){
}else {
urlStr +="?" +paramStr;
}
System.out.println(urlStr);
URL url = new URL(urlStr);
HttpURLConnection conn = (HttpURLConnection)url.openConnection();
conn.setRequestMethod(SERVLET_PUT);
conn.setRequestProperty("Content-Type" , "text/html; charset=UTF-8" );
conn.connect();
BufferedReader br = new BufferedReader( new InputStreamReader(conn.getInputStream()));
String line ;
String result ="" ;
while ( (line =br.readLine()) != null ){
result += "/n" +line;
}
System.out.println(result);
br.close();
}
public static void doPut(String urlStr,Map<String,Object> paramMap) throws Exception{
URL url = new URL(urlStr);
HttpURLConnection conn = (HttpURLConnection)url.openConnection();
conn.setRequestMethod(SERVLET_PUT);
String paramStr = prepareParam(paramMap);
conn.setDoInput(true );
conn.setDoOutput(true );
OutputStream os = conn.getOutputStream();
os.write(paramStr.toString().getBytes("utf-8" ));
os.close();
BufferedReader br = new BufferedReader( new InputStreamReader(conn.getInputStream()));
String line ;
String result ="" ;
while ( (line =br.readLine()) != null ){
result += "/n" +line;
}
System.out.println(result);
br.close();
}
public static void doDelete(String urlStr,Map<String,Object> paramMap) throws Exception{
String paramStr = prepareParam(paramMap);
if (paramStr == null || paramStr.trim().length()< 1 ){
}else {
urlStr +="?" +paramStr;
}
System.out.println(urlStr);
URL url = new URL(urlStr);
HttpURLConnection conn = (HttpURLConnection)url.openConnection();
conn.setDoOutput(true );
conn.setRequestMethod(SERVLET_DELETE);
//屏蔽掉的代码是错误的,java.net.ProtocolException: HTTP method DELETE doesn't support output
/* OutputStream os = conn.getOutputStream();
os.write(paramStr.toString().getBytes("utf-8"));
os.close(); */
if (conn.getResponseCode() == 200 ){
System.out.println("成功" );
}else {
System.out.println(conn.getResponseCode());
}
}
public static void main(String[] args) throws Exception{
String urlStr = "http://localhost:8080/SwTest/ReceiveDataServlet" ;
Map<String,Object> map = new HashMap<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);
}
}
view
plain
package com.sw.study.urlConnection;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLConnection;
import java.util.HashMap;
import java.util.Map;
public class URLConnectionUtil {
private static final String SERVLET_POST = "POST" ;
private static final String SERVLET_GET = "GET" ;
private static final String SERVLET_DELETE = "DELETE" ;
private static final String SERVLET_PUT = "PUT" ;
private static String prepareParam(Map<String,Object> paramMap){
StringBuffer sb = new StringBuffer();
if(paramMap.isEmpty()){
return "" ;
}else{
for(String key: paramMap.keySet()){
String value = (String)paramMap.get(key);
if(sb.length()<1){
sb.append(key).append("=").append(value);
}else{
sb.append("&").append(key).append("=").append(value);
}
}
return sb.toString();
}
}
public static void doPost(String urlStr,Map<String,Object> paramMap ) throws Exception{
URL url = new URL(urlStr);
HttpURLConnection conn = (HttpURLConnection)url.openConnection();
conn.setRequestMethod(SERVLET_POST);
String paramStr = prepareParam(paramMap);
conn.setDoInput(true);
conn.setDoOutput(true);
OutputStream os = conn.getOutputStream();
os.write(paramStr.toString().getBytes("utf-8"));
os.close();
BufferedReader br = new BufferedReader(new InputStreamReader(conn.getInputStream()));
String line ;
String result ="";
while( (line =br.readLine()) != null ){
result += "/n"+line;
}
System.out.println(result);
br.close();
}
public static void doGet(String urlStr,Map<String,Object> paramMap ) throws Exception{
String paramStr = prepareParam(paramMap);
if(paramStr == null || paramStr.trim().length()<1){
}else{
urlStr +="?"+paramStr;
}
System.out.println(urlStr);
URL url = new URL(urlStr);
HttpURLConnection conn = (HttpURLConnection)url.openConnection();
conn.setRequestMethod(SERVLET_PUT);
conn.setRequestProperty("Content-Type","text/html; charset=UTF-8");
conn.connect();
BufferedReader br = new BufferedReader(new InputStreamReader(conn.getInputStream()));
String line ;
String result ="";
while( (line =br.readLine()) != null ){
result += "/n"+line;
}
System.out.println(result);
br.close();
}
public static void doPut(String urlStr,Map<String,Object> paramMap) throws Exception{
URL url = new URL(urlStr);
HttpURLConnection conn = (HttpURLConnection)url.openConnection();
conn.setRequestMethod(SERVLET_PUT);
String paramStr = prepareParam(paramMap);
conn.setDoInput(true);
conn.setDoOutput(true);
OutputStream os = conn.getOutputStream();
os.write(paramStr.toString().getBytes("utf-8"));
os.close();
BufferedReader br = new BufferedReader(new InputStreamReader(conn.getInputStream()));
String line ;
String result ="";
while( (line =br.readLine()) != null ){
result += "/n"+line;
}
System.out.println(result);
br.close();
}
public static void doDelete(String urlStr,Map<String,Object> paramMap) throws Exception{
String paramStr = prepareParam(paramMap);
if(paramStr == null || paramStr.trim().length()<1){
}else{
urlStr +="?"+paramStr;
}
System.out.println(urlStr);
URL url = new URL(urlStr);
HttpURLConnection conn = (HttpURLConnection)url.openConnection();
conn.setDoOutput(true);
conn.setRequestMethod(SERVLET_DELETE);
//屏蔽掉的代码是错误的,java.net.ProtocolException: HTTP method DELETE doesn't support output
/* OutputStream os = conn.getOutputStream();
os.write(paramStr.toString().getBytes("utf-8"));
os.close(); */
if(conn.getResponseCode() ==200){
System.out.println("成功");
}else{
System.out.println(conn.getResponseCode());
}
}
public static void main(String[] args) throws Exception{
String urlStr = "http://localhost:8080/SwTest/ReceiveDataServlet";
Map<String,Object> map = new HashMap<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端程序
view
plain copy
to clipboard print ?
package com.sw.servlet;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStream;
import javax.servlet.ServletException;
import javax.servlet.ServletInputStream;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* Servlet implementation class ReceiveDataServlet
*/
public class ReceiveDataServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
public ReceiveDataServlet() {
super ();
// TODO Auto-generated constructor stub
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("----------get--------------" );
String username = new String(request.getParameter( "username" ).getBytes( "iso-8859-1" ), "utf-8" );
String password = new String(request.getParameter( "password" ).getBytes( "iso-8859-1" ), "utf-8" );
System.out.println(username);
System.out.println(password);
OutputStream os = response.getOutputStream();
os.write("get" .getBytes( "utf-8" ));
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("----------post--------------" );
BufferedReader br = new BufferedReader( new InputStreamReader((ServletInputStream)request.getInputStream()));
String line = null ;
StringBuilder sb = new StringBuilder();
while ((line = br.readLine())!= null ){
sb.append(line);
}
System.out.println(sb.toString());
br.close();
/* String username = new String(request.getParameter("username").getBytes("iso-8859-1"),"utf-8");
String password = new String(request.getParameter("password").getBytes("iso-8859-1"),"utf-8");
System.out.println(username);
System.out.println(password);
*/ OutputStream os = response.getOutputStream();
os.write("post" .getBytes( "utf-8" ));
}
@Override
protected void doDelete(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
System.out.println("----------delete--------------" );
String username = new String(request.getParameter( "username" ).getBytes( "iso-8859-1" ), "utf-8" );
String password = new String(request.getParameter( "password" ).getBytes( "iso-8859-1" ), "utf-8" );
System.out.println(username);
System.out.println(password);
OutputStream os = response.getOutputStream();
os.write("delete" .getBytes( "utf-8" ));
}
@Override
protected void doPut(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
System.out.println("----------put--------------" );
/* BufferedReader br = new BufferedReader(new InputStreamReader((ServletInputStream)request.getInputStream()));
String line = null;
StringBuilder sb = new StringBuilder();
while((line = br.readLine())!=null){
sb.append(line);
}
System.out.println(sb.toString());
br.close();*/
String username = new String(request.getParameter( "username" ).getBytes( "iso-8859-1" ), "utf-8" );
String password = new String(request.getParameter( "password" ).getBytes( "iso-8859-1" ), "utf-8" );
System.out.println(username);
System.out.println(password);
OutputStream os = response.getOutputStream();
os.write("put" .getBytes( "utf-8" ));
}
}
view
plain
package com.sw.servlet;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStream;
import javax.servlet.ServletException;
import javax.servlet.ServletInputStream;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* Servlet implementation class ReceiveDataServlet
*/
public class ReceiveDataServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
public ReceiveDataServlet() {
super();
// TODO Auto-generated constructor stub
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("----------get--------------");
String username = new String(request.getParameter("username").getBytes("iso-8859-1"),"utf-8");
String password = new String(request.getParameter("password").getBytes("iso-8859-1"),"utf-8");
System.out.println(username);
System.out.println(password);
OutputStream os = response.getOutputStream();
os.write("get".getBytes("utf-8"));
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("----------post--------------");
BufferedReader br = new BufferedReader(new InputStreamReader((ServletInputStream)request.getInputStream()));
String line = null;
StringBuilder sb = new StringBuilder();
while((line = br.readLine())!=null){
sb.append(line);
}
System.out.println(sb.toString());
br.close();
/* String username = new String(request.getParameter("username").getBytes("iso-8859-1"),"utf-8");
String password = new String(request.getParameter("password").getBytes("iso-8859-1"),"utf-8");
System.out.println(username);
System.out.println(password);
*/ OutputStream os = response.getOutputStream();
os.write("post".getBytes("utf-8"));
}
@Override
protected void doDelete(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
System.out.println("----------delete--------------");
String username = new String(request.getParameter("username").getBytes("iso-8859-1"),"utf-8");
String password = new String(request.getParameter("password").getBytes("iso-8859-1"),"utf-8");
System.out.println(username);
System.out.println(password);
OutputStream os = response.getOutputStream();
os.write("delete".getBytes("utf-8"));
}
@Override
protected void doPut(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
System.out.println("----------put--------------");
/* BufferedReader br = new BufferedReader(new InputStreamReader((ServletInputStream)request.getInputStream()));
String line = null;
StringBuilder sb = new StringBuilder();
while((line = br.readLine())!=null){
sb.append(line);
}
System.out.println(sb.toString());
br.close();*/
String username = new String(request.getParameter("username").getBytes("iso-8859-1"),"utf-8");
String password = new String(request.getParameter("password").getBytes("iso-8859-1"),"utf-8");
System.out.println(username);
System.out.println(password);
OutputStream os = response.getOutputStream();
os.write("put".getBytes("utf-8"));
}
}
程序中对于request.getInputStream和getParameter的获取方式可能说明的会多少有些问题,我也是通过几组测试后得出的结论。肯定有我没有测试到得。如果有问题,请指出,我会再看到评论后进行测试,修改。
另外,Apache的HttpClient非常好。封装的详细。在我的工作中也用到过,在以后会对于HttpClient进行有些单独的程序笔记。
这里HttpUrlConnection是同事在别的项目中用到的,用法比较简单,我大体给他简单讲解了一下,简明扼要,功能完备,还是很方便,
所以在这里记下来,留个笔记吧。
btw,最近工作比较忙,有2个月没有写些东西了,在工作中确实还遇到了不少有意思的问题,最近刚好快闲下来了,慢慢整理一下。
以下为对于HttpURLConnection对Post等方式访问的一段代码。
view
plain copy
to clipboard print ?
package com.sw.study.urlConnection;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLConnection;
import java.util.HashMap;
import java.util.Map;
public class URLConnectionUtil {
private static final String SERVLET_POST = "POST" ;
private static final String SERVLET_GET = "GET" ;
private static final String SERVLET_DELETE = "DELETE" ;
private static final String SERVLET_PUT = "PUT" ;
private static String prepareParam(Map<String,Object> paramMap){
StringBuffer sb = new StringBuffer();
if (paramMap.isEmpty()){
return "" ;
}else {
for (String key: paramMap.keySet()){
String value = (String)paramMap.get(key);
if (sb.length()< 1 ){
sb.append(key).append("=" ).append(value);
}else {
sb.append("&" ).append(key).append( "=" ).append(value);
}
}
return sb.toString();
}
}
public static void doPost(String urlStr,Map<String,Object> paramMap ) throws Exception{
URL url = new URL(urlStr);
HttpURLConnection conn = (HttpURLConnection)url.openConnection();
conn.setRequestMethod(SERVLET_POST);
String paramStr = prepareParam(paramMap);
conn.setDoInput(true );
conn.setDoOutput(true );
OutputStream os = conn.getOutputStream();
os.write(paramStr.toString().getBytes("utf-8" ));
os.close();
BufferedReader br = new BufferedReader( new InputStreamReader(conn.getInputStream()));
String line ;
String result ="" ;
while ( (line =br.readLine()) != null ){
result += "/n" +line;
}
System.out.println(result);
br.close();
}
public static void doGet(String urlStr,Map<String,Object> paramMap ) throws Exception{
String paramStr = prepareParam(paramMap);
if (paramStr == null || paramStr.trim().length()< 1 ){
}else {
urlStr +="?" +paramStr;
}
System.out.println(urlStr);
URL url = new URL(urlStr);
HttpURLConnection conn = (HttpURLConnection)url.openConnection();
conn.setRequestMethod(SERVLET_PUT);
conn.setRequestProperty("Content-Type" , "text/html; charset=UTF-8" );
conn.connect();
BufferedReader br = new BufferedReader( new InputStreamReader(conn.getInputStream()));
String line ;
String result ="" ;
while ( (line =br.readLine()) != null ){
result += "/n" +line;
}
System.out.println(result);
br.close();
}
public static void doPut(String urlStr,Map<String,Object> paramMap) throws Exception{
URL url = new URL(urlStr);
HttpURLConnection conn = (HttpURLConnection)url.openConnection();
conn.setRequestMethod(SERVLET_PUT);
String paramStr = prepareParam(paramMap);
conn.setDoInput(true );
conn.setDoOutput(true );
OutputStream os = conn.getOutputStream();
os.write(paramStr.toString().getBytes("utf-8" ));
os.close();
BufferedReader br = new BufferedReader( new InputStreamReader(conn.getInputStream()));
String line ;
String result ="" ;
while ( (line =br.readLine()) != null ){
result += "/n" +line;
}
System.out.println(result);
br.close();
}
public static void doDelete(String urlStr,Map<String,Object> paramMap) throws Exception{
String paramStr = prepareParam(paramMap);
if (paramStr == null || paramStr.trim().length()< 1 ){
}else {
urlStr +="?" +paramStr;
}
System.out.println(urlStr);
URL url = new URL(urlStr);
HttpURLConnection conn = (HttpURLConnection)url.openConnection();
conn.setDoOutput(true );
conn.setRequestMethod(SERVLET_DELETE);
//屏蔽掉的代码是错误的,java.net.ProtocolException: HTTP method DELETE doesn't support output
/* OutputStream os = conn.getOutputStream();
os.write(paramStr.toString().getBytes("utf-8"));
os.close(); */
if (conn.getResponseCode() == 200 ){
System.out.println("成功" );
}else {
System.out.println(conn.getResponseCode());
}
}
public static void main(String[] args) throws Exception{
String urlStr = "http://localhost:8080/SwTest/ReceiveDataServlet" ;
Map<String,Object> map = new HashMap<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);
}
}
view
plain
package com.sw.study.urlConnection;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLConnection;
import java.util.HashMap;
import java.util.Map;
public class URLConnectionUtil {
private static final String SERVLET_POST = "POST" ;
private static final String SERVLET_GET = "GET" ;
private static final String SERVLET_DELETE = "DELETE" ;
private static final String SERVLET_PUT = "PUT" ;
private static String prepareParam(Map<String,Object> paramMap){
StringBuffer sb = new StringBuffer();
if(paramMap.isEmpty()){
return "" ;
}else{
for(String key: paramMap.keySet()){
String value = (String)paramMap.get(key);
if(sb.length()<1){
sb.append(key).append("=").append(value);
}else{
sb.append("&").append(key).append("=").append(value);
}
}
return sb.toString();
}
}
public static void doPost(String urlStr,Map<String,Object> paramMap ) throws Exception{
URL url = new URL(urlStr);
HttpURLConnection conn = (HttpURLConnection)url.openConnection();
conn.setRequestMethod(SERVLET_POST);
String paramStr = prepareParam(paramMap);
conn.setDoInput(true);
conn.setDoOutput(true);
OutputStream os = conn.getOutputStream();
os.write(paramStr.toString().getBytes("utf-8"));
os.close();
BufferedReader br = new BufferedReader(new InputStreamReader(conn.getInputStream()));
String line ;
String result ="";
while( (line =br.readLine()) != null ){
result += "/n"+line;
}
System.out.println(result);
br.close();
}
public static void doGet(String urlStr,Map<String,Object> paramMap ) throws Exception{
String paramStr = prepareParam(paramMap);
if(paramStr == null || paramStr.trim().length()<1){
}else{
urlStr +="?"+paramStr;
}
System.out.println(urlStr);
URL url = new URL(urlStr);
HttpURLConnection conn = (HttpURLConnection)url.openConnection();
conn.setRequestMethod(SERVLET_PUT);
conn.setRequestProperty("Content-Type","text/html; charset=UTF-8");
conn.connect();
BufferedReader br = new BufferedReader(new InputStreamReader(conn.getInputStream()));
String line ;
String result ="";
while( (line =br.readLine()) != null ){
result += "/n"+line;
}
System.out.println(result);
br.close();
}
public static void doPut(String urlStr,Map<String,Object> paramMap) throws Exception{
URL url = new URL(urlStr);
HttpURLConnection conn = (HttpURLConnection)url.openConnection();
conn.setRequestMethod(SERVLET_PUT);
String paramStr = prepareParam(paramMap);
conn.setDoInput(true);
conn.setDoOutput(true);
OutputStream os = conn.getOutputStream();
os.write(paramStr.toString().getBytes("utf-8"));
os.close();
BufferedReader br = new BufferedReader(new InputStreamReader(conn.getInputStream()));
String line ;
String result ="";
while( (line =br.readLine()) != null ){
result += "/n"+line;
}
System.out.println(result);
br.close();
}
public static void doDelete(String urlStr,Map<String,Object> paramMap) throws Exception{
String paramStr = prepareParam(paramMap);
if(paramStr == null || paramStr.trim().length()<1){
}else{
urlStr +="?"+paramStr;
}
System.out.println(urlStr);
URL url = new URL(urlStr);
HttpURLConnection conn = (HttpURLConnection)url.openConnection();
conn.setDoOutput(true);
conn.setRequestMethod(SERVLET_DELETE);
//屏蔽掉的代码是错误的,java.net.ProtocolException: HTTP method DELETE doesn't support output
/* OutputStream os = conn.getOutputStream();
os.write(paramStr.toString().getBytes("utf-8"));
os.close(); */
if(conn.getResponseCode() ==200){
System.out.println("成功");
}else{
System.out.println(conn.getResponseCode());
}
}
public static void main(String[] args) throws Exception{
String urlStr = "http://localhost:8080/SwTest/ReceiveDataServlet";
Map<String,Object> map = new HashMap<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端程序
view
plain copy
to clipboard print ?
package com.sw.servlet;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStream;
import javax.servlet.ServletException;
import javax.servlet.ServletInputStream;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* Servlet implementation class ReceiveDataServlet
*/
public class ReceiveDataServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
public ReceiveDataServlet() {
super ();
// TODO Auto-generated constructor stub
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("----------get--------------" );
String username = new String(request.getParameter( "username" ).getBytes( "iso-8859-1" ), "utf-8" );
String password = new String(request.getParameter( "password" ).getBytes( "iso-8859-1" ), "utf-8" );
System.out.println(username);
System.out.println(password);
OutputStream os = response.getOutputStream();
os.write("get" .getBytes( "utf-8" ));
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("----------post--------------" );
BufferedReader br = new BufferedReader( new InputStreamReader((ServletInputStream)request.getInputStream()));
String line = null ;
StringBuilder sb = new StringBuilder();
while ((line = br.readLine())!= null ){
sb.append(line);
}
System.out.println(sb.toString());
br.close();
/* String username = new String(request.getParameter("username").getBytes("iso-8859-1"),"utf-8");
String password = new String(request.getParameter("password").getBytes("iso-8859-1"),"utf-8");
System.out.println(username);
System.out.println(password);
*/ OutputStream os = response.getOutputStream();
os.write("post" .getBytes( "utf-8" ));
}
@Override
protected void doDelete(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
System.out.println("----------delete--------------" );
String username = new String(request.getParameter( "username" ).getBytes( "iso-8859-1" ), "utf-8" );
String password = new String(request.getParameter( "password" ).getBytes( "iso-8859-1" ), "utf-8" );
System.out.println(username);
System.out.println(password);
OutputStream os = response.getOutputStream();
os.write("delete" .getBytes( "utf-8" ));
}
@Override
protected void doPut(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
System.out.println("----------put--------------" );
/* BufferedReader br = new BufferedReader(new InputStreamReader((ServletInputStream)request.getInputStream()));
String line = null;
StringBuilder sb = new StringBuilder();
while((line = br.readLine())!=null){
sb.append(line);
}
System.out.println(sb.toString());
br.close();*/
String username = new String(request.getParameter( "username" ).getBytes( "iso-8859-1" ), "utf-8" );
String password = new String(request.getParameter( "password" ).getBytes( "iso-8859-1" ), "utf-8" );
System.out.println(username);
System.out.println(password);
OutputStream os = response.getOutputStream();
os.write("put" .getBytes( "utf-8" ));
}
}
view
plain
package com.sw.servlet;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStream;
import javax.servlet.ServletException;
import javax.servlet.ServletInputStream;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* Servlet implementation class ReceiveDataServlet
*/
public class ReceiveDataServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
public ReceiveDataServlet() {
super();
// TODO Auto-generated constructor stub
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("----------get--------------");
String username = new String(request.getParameter("username").getBytes("iso-8859-1"),"utf-8");
String password = new String(request.getParameter("password").getBytes("iso-8859-1"),"utf-8");
System.out.println(username);
System.out.println(password);
OutputStream os = response.getOutputStream();
os.write("get".getBytes("utf-8"));
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("----------post--------------");
BufferedReader br = new BufferedReader(new InputStreamReader((ServletInputStream)request.getInputStream()));
String line = null;
StringBuilder sb = new StringBuilder();
while((line = br.readLine())!=null){
sb.append(line);
}
System.out.println(sb.toString());
br.close();
/* String username = new String(request.getParameter("username").getBytes("iso-8859-1"),"utf-8");
String password = new String(request.getParameter("password").getBytes("iso-8859-1"),"utf-8");
System.out.println(username);
System.out.println(password);
*/ OutputStream os = response.getOutputStream();
os.write("post".getBytes("utf-8"));
}
@Override
protected void doDelete(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
System.out.println("----------delete--------------");
String username = new String(request.getParameter("username").getBytes("iso-8859-1"),"utf-8");
String password = new String(request.getParameter("password").getBytes("iso-8859-1"),"utf-8");
System.out.println(username);
System.out.println(password);
OutputStream os = response.getOutputStream();
os.write("delete".getBytes("utf-8"));
}
@Override
protected void doPut(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
System.out.println("----------put--------------");
/* BufferedReader br = new BufferedReader(new InputStreamReader((ServletInputStream)request.getInputStream()));
String line = null;
StringBuilder sb = new StringBuilder();
while((line = br.readLine())!=null){
sb.append(line);
}
System.out.println(sb.toString());
br.close();*/
String username = new String(request.getParameter("username").getBytes("iso-8859-1"),"utf-8");
String password = new String(request.getParameter("password").getBytes("iso-8859-1"),"utf-8");
System.out.println(username);
System.out.println(password);
OutputStream os = response.getOutputStream();
os.write("put".getBytes("utf-8"));
}
}
程序中对于request.getInputStream和getParameter的获取方式可能说明的会多少有些问题,我也是通过几组测试后得出的结论。肯定有我没有测试到得。如果有问题,请指出,我会再看到评论后进行测试,修改。
另外,Apache的HttpClient非常好。封装的详细。在我的工作中也用到过,在以后会对于HttpClient进行有些单独的程序笔记。
这里HttpUrlConnection是同事在别的项目中用到的,用法比较简单,我大体给他简单讲解了一下,简明扼要,功能完备,还是很方便,
所以在这里记下来,留个笔记吧。
btw,最近工作比较忙,有2个月没有写些东西了,在工作中确实还遇到了不少有意思的问题,最近刚好快闲下来了,慢慢整理一下。
相关文章推荐
- 封装 HttpURLConnection
- Android之用HttpURLConnection参数以XML形式封装的部分关键代码
- HttpURLConnection的封装以及Callback的使用
- HttpClient 和 HttpUrlConnection 简单封装
- Android中HttpURLConnection与HttpClient的使用与封装
- Android中HttpURLConnection与HttpClient的使用与封装
- HttpURLConnection+AsyncTask+接口回调实现简易get联网请求封装框架
- 封装HttpURLConnection
- HttpUrlConnection与HttpClient的认识(四) -HttpClient的封装
- 基于HttpUrlConnection的简单封装SimpleHttp
- 封装 HttpURLConnection
- HttpURLConnection封装
- 封装的Http请求(HttpURLConnection和okHttp)
- 【封装】异步HttpURLConnection网络访问
- 一个HttpURLConnection的封装
- android 网络编程之HttpURLConnection与HttpClient使用与封装
- 封装HttpURLConnection
- HttpUrlConnection与HttpClient的认识(四) -HttpClient的封装
- HttpURLConnection 单独封装网络请求工具类
- 网络请求封装类lmxHttpUrlConnection