Java--Jetty用法(使用HttpClient+Jetty发送和接收http请求)

Jetty是一个纯Java编写的开源servlet容器。可以内嵌到Java应用当中,迅速为一些独立运行的Java应用提供网络和web连接。十分适合Java中间件程序中使用。

下面是使用HttpClient发送http请求,Jetty进行接收和处理请求的一个小程序。

首先需要准备Jar包。

准备好之后,下面是代码:

主函数:用来启动jetty服务器端

import org.eclipse.jetty.server.Server;

public class Main {
	public static void main(String[] args) throws Exception {
		Server server = new Server(12345);
		server.setHandler(new JettyReceive());
		server.start();
		server.join();
	}
}

Jetty服务端代码:

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.eclipse.jetty.server.Request;
import org.eclipse.jetty.server.handler.AbstractHandler;

public class JettyReceive extends AbstractHandler {

	@Override
	public void handle(String url, Request baseRequest, HttpServletRequest request, HttpServletResponse response)
			throws IOException, ServletException {
		System.out.println(url);
		System.out.println(getIpAdrress(request));
		System.out.println(getBodyDate(request));
	}

	// 从请求中获取数据
	public String getBodyDate(HttpServletRequest request) {
		String bodyStr = null;
		BufferedReader br = null;

		try {
			// 设置编码
			request.setCharacterEncoding("UTF-8");
			// 创建输入流
			br = new BufferedReader(new InputStreamReader(request.getInputStream()));
			// 获取body内容
			String line = "";
			StringBuffer buf = new StringBuffer();
			while ((line = br.readLine()) != null) {
				buf.append(line);
			}
			bodyStr = buf.toString();
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			if (br != null) {
				try {
					br.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
		}

		return bodyStr;
	}

	/**
	 * 获取request的客户端IP地址
	 * 
	 * @param request
	 * @return
	 */
	private static String getIpAdrress(HttpServletRequest request) {
		String ip = request.getHeader("X-Forwarded-For");

		if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
			ip = request.getHeader("Proxy-Client-IP");
		}
		if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
			ip = request.getHeader("WL-Proxy-Client-IP");
		}
		if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
			ip = request.getHeader("HTTP_CLIENT_IP");
		}
		if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
			ip = request.getHeader("HTTP_X_FORWARDED_FOR");
		}
		if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
			ip = request.getRemoteAddr();
		}
		return ip;
	}

}

HttpClient客户端代码:

import org.apache.http.HttpEntity;
import org.apache.http.client.config.RequestConfig;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;

public class HttpClient {
	public static void main(String[] args) {
		HttpClient.report("http://127.0.0.1:12345/HttpSender", "Hello Jetty,this request from HttpSender");
	}

	/**
	 * 
	 * @param url汇报地址
	 * @param data汇报内容
	 * @return true表示汇报成功,false代表失败
	 */
	public static boolean report(String url, String data) {
		CloseableHttpClient httpClient = null;
		CloseableHttpResponse response = null;
		try {
			// 创建发送端
			httpClient = HttpClients.createDefault();
			// 设置request的超时时间
			RequestConfig requestConfig = RequestConfig.custom().setConnectionRequestTimeout(5000)
					.setConnectionRequestTimeout(5000).setSocketTimeout(5000).build();
			// 创建post请求
			HttpPost httpPost = new HttpPost(url);
			httpPost.setConfig(requestConfig);
			// 设置数据体
			httpPost.setEntity(new StringEntity(data));
			// 发送请求
			response = httpClient.execute(httpPost);
			if (response.getStatusLine().getStatusCode() != 200) {
				return false;
			}

			HttpEntity entity = response.getEntity();

			if (entity != null) {
				if (EntityUtils.toString(entity, "UTF-8").equals("ok")) {
					return true;
				}
			}

		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			try {
				if (response != null) {
					response.close();
				}
			} catch (Exception e2) {
				e2.printStackTrace();
			}
			try {
				if (httpClient != null) {
					httpClient.close();
				}
			} catch (Exception e2) {
				e2.printStackTrace();
			}
		}
		return false;
	}
}

运行时先执行Main类的主函数,启动Jetty服务器,然后再执行HttpClient的主函数,发送Http请求。这就是一个简单的使用HttpClient+Jetty对一个Http请求的发送和处理过程了。

运行结果如下:

喜欢的朋友点个赞哦~~

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

stalin_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值