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请求的发送和处理过程了。
运行结果如下:
喜欢的朋友点个赞哦~~