java架构搭建(七)--HttpURLConnection与HttpClient工具类实例

在项目中使用到HttpClient,也尝试使用了HttpURLConnection。写成一个工具类,方便以后调用,同时也作为两者

使用的对比。


NetUtil

package org.base.common.net;

import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.UnsupportedEncodingException;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLEncoder;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;

import org.apache.commons.httpclient.DefaultHttpMethodRetryHandler;
import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.HttpException;
import org.apache.commons.httpclient.NameValuePair;
import org.apache.commons.httpclient.methods.GetMethod;
import org.apache.commons.httpclient.methods.PostMethod;
import org.apache.commons.httpclient.params.HttpMethodParams;

/**
 * HttpClient与HttpURLConnection使用实例
 * @author lushuaiyin
 *
 */
public class NetUtil {
	private static String METHOD_TYPE_GET="GET";
	private static String METHOD_TYPE_POST="POST";
	
	public static String requestByHttpURLConnection(String protocol,String host,int port,String action,Map paramsMap,String methodType){
		String result="";
		String url="";
		String urlParam="";
		if(protocol==null||protocol.trim().equals("")){
			protocol="http";
		}
		if(host==null||host.trim().equals("")||action==null||action.trim().equals("")){
			System.out.println("客户端----url 参数不完整,请检查传参!");
		}else{
			if(action.startsWith("/")){
				action=action.substring(1);
			}
			url+=protocol+"://"+host.trim()+":"+String.valueOf(port)+"/"+action.trim();
			//参数
			if(paramsMap==null||paramsMap.size()<=0){
				
			}else{
				int i=0;
				for(Iterator it=paramsMap.keySet().iterator();it.hasNext();i++){
					String key=(String)it.next();
					String value=(String)paramsMap.get(key);
					try {
						if(i==0){
							urlParam+="?"+key+"="+URLEncoder.encode(value, "UTF-8");
					    }else{
					    	urlParam+="&"+key+"="+URLEncoder.encode(value, "UTF-8");
					    }
					} catch (UnsupportedEncodingException e) {
						e.printStackTrace();
					}
					
				}
			}
		}
		
		OutputStream os=null;
		InputStream is=null;;
		InputStreamReader isr=null;;
		BufferedReader br=null;
		try{
			
			if(methodType==null||methodType.trim().equals("")){
				methodType=NetUtil.METHOD_TYPE_GET;
				url+=urlParam;
			}else if(methodType.trim().equals(NetUtil.METHOD_TYPE_GET)){
				methodType=NetUtil.METHOD_TYPE_GET;
				url+=urlParam;
			}else if(methodType.trim().equals(NetUtil.METHOD_TYPE_POST)){//post请求
				methodType=NetUtil.METHOD_TYPE_POST;
			}else{
				methodType=NetUtil.METHOD_TYPE_GET;
				url+=urlParam;
			}
			URL requestUrl=new URL(url);
			HttpURLConnection connect=(HttpURLConnection)requestUrl.openConnection();
			
			System.out.println("客户端----请求url:"+url);
			
			connect.setDoInput(true);//是否可读
			connect.setDoOutput(true);//是否可写
			connect.setRequestMethod(methodType);
			connect.setUseCaches(false);//是否用缓存
			connect.setRequestProperty("Content-Type", "text/plain");
			connect.setRequestProperty("Accept-Charset", "UTF-8");
			connect.setConnectTimeout(60*1000);
			connect.setReadTimeout(60*1000);
			
			connect.connect();
			
			//post与get请求发送方式不同,参数是通过OutputStream发送
			if(methodType.trim().equals(NetUtil.METHOD_TYPE_POST)){
//				DataOutputStream out = new DataOutputStream(connect
//		                .getOutputStream());
//				String aa="?myhobby=assssss";
//				out.writeBytes(aa);
				
				
				os=connect.getOutputStream();
				os.write(urlParam.getBytes("UTF-8"));
				os.flush();
				os.close();
			}
			//读取返回信息
			if(connect.getInputStream()!=null){
				is=connect.getInputStream();
				isr=new InputStreamReader(is);
				br=new BufferedReader(isr);
				
				StringBuffer buf=new StringBuffer("");
				String temp="";
				while((temp=br.readLine())!=null){
					buf.append(temp);
				}
				result=buf.toString();
			}else{
				System.out.println("客户端----返回流为空");
			}
			
			
		}catch(Exception e){
			result="客户端----请求异常,请联系管理员。";
			e.printStackTrace();
		}finally{
			try{
				if(br!=null){
					br.close();
				}
				if(isr!=null){
					isr.close();
				}
				if(is!=null){
					is.close();
				}
				if(os!=null){
					os.close();
				}
			}catch (IOException e) {
				e.printStackTrace();
			}
			
		}
		System.out.println("客户端----httpURLConnection使用方法:"+methodType+",并收到响应信息如下:");
		System.out.println(result);
		return result;
	}
	//
	
	public static String requestByHttpClient(String protocol,String host,int port,String action,Map paramsMap,String methodType){
		String result="";
		if(protocol==null||protocol.trim().equals("")){
			protocol="http";
		}
		if(methodType==null||methodType.trim().equals("")){
			methodType=NetUtil.METHOD_TYPE_GET;
		}else if(methodType.trim().equals(NetUtil.METHOD_TYPE_GET)){
			methodType=NetUtil.METHOD_TYPE_GET;
		}else if(methodType.trim().equals(NetUtil.METHOD_TYPE_POST)){//post请求
			methodType=NetUtil.METHOD_TYPE_POST;
		}else{
			methodType=NetUtil.METHOD_TYPE_GET;
		}
		if(action.startsWith("/")){
			action=action.substring(1);
		}
		
		//参数
		NameValuePair[] params=null;
		String urlParam="";
		if(paramsMap==null||paramsMap.size()<=0){
			
		}else{
			params=new NameValuePair[paramsMap.size()];
			int i=0;
			for(Iterator it=paramsMap.keySet().iterator();it.hasNext();i++){
				String key=(String)it.next();
				String value=(String)paramsMap.get(key);
				NameValuePair pa=null;
				try {
					pa = new NameValuePair(key,URLEncoder.encode(value, "UTF-8"));
					
					if(i==0){
						urlParam+="?"+key+"="+URLEncoder.encode(value, "UTF-8");
				    }else{
				    	urlParam+="&"+key+"="+URLEncoder.encode(value, "UTF-8");;
				    }
				} catch (UnsupportedEncodingException e) {
					e.printStackTrace();
				}
				params[i]=pa;
				
				
			}
		}
		
		
		HttpClient http=new HttpClient();
		GetMethod getMethod=null;
		PostMethod postMethod=null;
		String url=protocol+"://"+host+":"+String.valueOf(port)+"/"+action+urlParam;
		System.out.println("客户端----请求url:"+url);
		
		http.getHostConfiguration().setHost(host, port, protocol);
		if(methodType==NetUtil.METHOD_TYPE_GET){
			getMethod=new GetMethod("/"+action);
			getMethod.setRequestHeader("Content-type", "text/plain;charset=UTF-8");
			getMethod.getParams().setParameter(HttpMethodParams.RETRY_HANDLER, new DefaultHttpMethodRetryHandler());
			if(params!=null){
				getMethod.setQueryString(params);
			}
		}else{
			postMethod=new PostMethod("/"+action);
			postMethod.setRequestHeader("Content-type", "text/plain;charset=UTF-8");
			//参数
			if(params!=null){
				postMethod.setRequestBody(params);
			}
		}//end post
		
		
		try {
			if(methodType==NetUtil.METHOD_TYPE_GET){
				int ret=http.executeMethod(getMethod);
				
			}else{
				int ret=http.executeMethod(postMethod);
			}
			
		} catch (HttpException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
		InputStream is=null;
		InputStreamReader isr=null;
		BufferedReader br=null;
		
		StringBuffer buf=new StringBuffer("");
		try{
			if(methodType==NetUtil.METHOD_TYPE_GET){
				if(getMethod.getResponseBodyAsStream()!=null){
					is=getMethod.getResponseBodyAsStream();
				}
			}else{
				if(postMethod.getResponseBodyAsStream()!=null){
					is=postMethod.getResponseBodyAsStream();
				}
			}
			isr=new InputStreamReader(is,"UTF-8");
			br=new BufferedReader(isr);
			String temp=null;
			while((temp=br.readLine())!=null){
				buf.append(temp);
			}
			result=buf.toString();
			
		}catch(IOException e){
			result="客户端----请求异常,请联系管理员。";
			e.printStackTrace();
		}finally{
			try{
				if(br!=null){
					br.close();
				}
				if(isr!=null){
					isr.close();
				}
				if(is!=null){
					is.close();
				}
				if(postMethod!=null){
					postMethod.releaseConnection();
				}
			}catch(IOException e){
				e.printStackTrace();
			}
		}
		System.out.println("客户端----httpclient使用方法:"+methodType+",并收到响应信息如下:");
		System.out.println(result);
		return result;
	}	
	public static void main(String[] dsd){
		String protocol="http";
//		String host="10.55.15.43";
		String host="118.198.140.203";
		int port=8080;
		String action="/frame/servlet/TestServlet";
		Map paramsMap=new HashMap();
		paramsMap.put("myname", "lushuaiyin");
		paramsMap.put("myhobby", "onepiece");
		
		NetUtil.requestByHttpURLConnection(protocol, host, port, action, paramsMap, NetUtil.METHOD_TYPE_GET);
//		NetUtil.requestByHttpURLConnection(protocol, host, port, action, paramsMap, NetUtil.METHOD_TYPE_POST);
		
		
//		NetUtil.requestByHttpClient(protocol, host, port, action, paramsMap, NetUtil.METHOD_TYPE_GET);
//		NetUtil.requestByHttpClient(protocol, host, port, action, paramsMap, NetUtil.METHOD_TYPE_POST);
		
	}

}


写个servlet作为服务端的测试代码,TestServlet

package org.test;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.URLDecoder;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Iterator;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class TestServlet extends HttpServlet {
	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;

	public void init(){
		System.out.println(" TestServlet init---");
	}
	
	public void destroy() {  
		System.out.println(" TestServlet destroy---");
        super.destroy();  
    }
	
	public void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
		//编码设置,防止乱码。
        response.setHeader("Cache-Control", "no-cache");
        response.setCharacterEncoding("UTF-8");
        
        response.setContentType("text/plain;chatset=utf-8");
        response.setCharacterEncoding("UTF-8");
        PrintWriter pw=response.getWriter();
        
        
		System.out.println("服务端~~~~doGet here is TestServlet");
		String pares="";
		if(request.getParameterMap()!=null&&request.getParameterMap().size()>0){
			int i=0;
			
			for(Iterator it=(Iterator)request.getParameterMap().keySet().iterator();it.hasNext();i++){
				String key=(String)it.next();
				String[] values=(String[])request.getParameterMap().get(key);
				String value=values[0];//request的参数map值是数组,即可一对多,这里认为一个参数名对应一个参数值
				value=URLDecoder.decode(value, "UTF-8");
				if(i==request.getParameterMap().size()-1){
					pares+="key:"+key+",value:"+value+".";
				}else{
					pares+="key:"+key+",value:"+value+";";
				}
			}
			System.out.println("服务端~~~~doGet方法获取传参--"+pares);
		}else{
			System.out.println("服务端~~~~doGet方法没有获取到传参...");
		}
		
		//往客户端回写数据
		pw.println("来自服务端~~~~doGet方法获取传参--"+pares+"\r\n");
		//或使用write方法
//		pw.write("来自服务端~~~~doGet方法获取传参--"+pares+"\r\n1111111111");
		SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
		pw.println("来自服务端~~~~doGet方法获取传参时间--"+sdf.format(new Date())+"\r\n");
    }

    public void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
    	//编码设置,防止乱码。
        response.setHeader("Cache-Control", "no-cache");
        response.setCharacterEncoding("UTF-8");
        
        response.setContentType("text/plain;chatset=utf-8");
        response.setCharacterEncoding("UTF-8");
        PrintWriter pw=response.getWriter();
        
        System.out.println("服务端~~~~doPost here is TestServlet");
        
        
        String pares="";
        String paramResult="";
        InputStream is=null;;
		InputStreamReader isr=null;;
		BufferedReader br=null;
		StringBuffer buf=new StringBuffer("");
		try{
			is=request.getInputStream();
			isr=new InputStreamReader(is);
			br=new BufferedReader(isr);
			
			String temp="";
			while((temp=br.readLine())!=null){
				buf.append(temp);
			}
			
			if(buf.toString()!=null&&!buf.toString().trim().equals("")){
				pares=buf.toString();
				String[] paresArr=pares.split("&");
				if(paresArr!=null&&paresArr.length>0){
					for(int i=0;i<paresArr.length;i++){
						String pam=paresArr[i];
						if(pam.startsWith("?")){
							pam=pam.substring(1);
						}
						String[] realpam=pam.split("=");
						if(realpam!=null&&realpam.length==2){
							String paramKey=realpam[0];
							String paramValue=realpam[1];
							if(i==paresArr.length-1){
								paramResult+="key:"+paramKey+",value:"+paramValue+".";
							}else{
								paramResult+="key:"+paramKey+",value:"+paramValue+";";
							}
						}
					}
				}
			
				System.out.println("服务端~~~~doPost方法获取传参--"+paramResult);
			}else{
				System.out.println("服务端~~~~doPost方法没有获取到传参...");
			}
			
		}catch(Exception e){
			e.printStackTrace();
		}finally{
			try{
				if(br!=null){
					br.close();
				}
				if(isr!=null){
					isr.close();
				}
				if(is!=null){
					is.close();
				}
			}catch (IOException e) {
				e.printStackTrace();
			
		}
		
		
        //往客户端回写数据
  		pw.println("来自服务端~~~~doPost方法获取传参--"+paramResult);
  		SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
  		pw.println("来自服务端~~~~doPost方法获取传参时间--"+sdf.format(new Date()));
    }
}
}

web.xml访问配置:

	<servlet>
       <servlet-name>TestServlet</servlet-name>
       <servlet-class>org.test.TestServlet</servlet-class>
       <load-on-startup>1</load-on-startup>
    </servlet>

    <servlet-mapping>
       <servlet-name>TestServlet</servlet-name>
       <url-pattern>/servlet/TestServlet</url-pattern>
    </servlet-mapping>


以下是测试打印结果:


requestByHttpClient    POST  
----------------------------------------
服务端打印:
服务端~~~~doPost here is TestServlet
服务端~~~~doPost方法获取传参--key:myhobby,value:onepiece;key:myname,value:lushuaiyin.


客户端打印:
log4j:WARN No appenders could be found for logger (org.apache.commons.httpclient.HttpClient).
log4j:WARN Please initialize the log4j system properly.
客户端----请求url:http://118.198.140.203:8080/frame/servlet/TestServlet?myhobby=onepiece&myname=lushuaiyin
客户端----httpclient使用方法:POST,并收到响应信息如下:
来自服务端~~~~doPost方法获取传参--key:myhobby,value:onepiece;key:myname,value:lushuaiyin.来自服务端~~~~doPost方法获取传参时间--2013-05-01 12:28:01




requestByHttpClient    GET  
-------------------------------------
服务端打印:
服务端~~~~doGet here is TestServlet
服务端~~~~doGet方法获取传参--key:myhobby,value:onepiece;key:myname,value:lushuaiyin.


客户端打印:
log4j:WARN No appenders could be found for logger (org.apache.commons.httpclient.HttpClient).
log4j:WARN Please initialize the log4j system properly.
客户端----请求url:http://118.198.140.203:8080/frame/servlet/TestServlet?myhobby=onepiece&myname=lushuaiyin
客户端----httpclient使用方法:GET,并收到响应信息如下:
来自服务端~~~~doGet方法获取传参--key:myhobby,value:onepiece;key:myname,value:lushuaiyin.来自服务端~~~~doGet方法获取传参时间--2013-05-01 12:29:00



########################################################################

requestByHttpURLConnection    POST  
-------------------------------------


服务端打印:
服务端~~~~doPost here is TestServlet
服务端~~~~doPost方法获取传参--key:myhobby,value:onepiece;key:myname,value:lushuaiyin.


客户端打印:
客户端----请求url:http://118.198.140.203:8080/frame/servlet/TestServlet
客户端----httpURLConnection使用方法:POST,并收到响应信息如下:
来自服务端~~~~doPost方法获取传参--key:myhobby,value:onepiece;key:myname,value:lushuaiyin.来自服务端~~~~doPost方法获取传参时间--2013-05-01 12:30:04



requestByHttpURLConnection    GET  
-------------------------------------
服务端打印:
服务端~~~~doGet here is TestServlet
服务端~~~~doGet方法获取传参--key:myhobby,value:onepiece;key:myname,value:lushuaiyin.


客户端打印:
客户端----请求url:http://118.198.140.203:8080/frame/servlet/TestServlet?myhobby=onepiece&myname=lushuaiyin
客户端----httpURLConnection使用方法:GET,并收到响应信息如下:
来自服务端~~~~doGet方法获取传参--key:myhobby,value:onepiece;key:myname,value:lushuaiyin.来自服务端~~~~doGet方法获取传参时间--2013-05-01 12:31:02



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值