diff --git a/02nio/nio01/.classpath b/02nio/nio01/.classpath new file mode 100644 index 00000000..5e8a55fe --- /dev/null +++ b/02nio/nio01/.classpath @@ -0,0 +1,27 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/02nio/nio01/.project b/02nio/nio01/.project new file mode 100644 index 00000000..bf51dfe2 --- /dev/null +++ b/02nio/nio01/.project @@ -0,0 +1,23 @@ + + + nio01 + + + + + + org.eclipse.jdt.core.javabuilder + + + + + org.eclipse.m2e.core.maven2Builder + + + + + + org.eclipse.jdt.core.javanature + org.eclipse.m2e.core.maven2Nature + + diff --git a/02nio/nio01/.settings/org.eclipse.jdt.core.prefs b/02nio/nio01/.settings/org.eclipse.jdt.core.prefs new file mode 100644 index 00000000..2f5cc74c --- /dev/null +++ b/02nio/nio01/.settings/org.eclipse.jdt.core.prefs @@ -0,0 +1,8 @@ +eclipse.preferences.version=1 +org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 +org.eclipse.jdt.core.compiler.compliance=1.8 +org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled +org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning +org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=ignore +org.eclipse.jdt.core.compiler.release=disabled +org.eclipse.jdt.core.compiler.source=1.8 diff --git a/02nio/nio01/.settings/org.eclipse.m2e.core.prefs b/02nio/nio01/.settings/org.eclipse.m2e.core.prefs new file mode 100644 index 00000000..f897a7f1 --- /dev/null +++ b/02nio/nio01/.settings/org.eclipse.m2e.core.prefs @@ -0,0 +1,4 @@ +activeProfiles= +eclipse.preferences.version=1 +resolveWorkspaceProjects=true +version=1 diff --git a/02nio/nio01/pom.xml b/02nio/nio01/pom.xml index e42a62f2..1a1e748c 100644 --- a/02nio/nio01/pom.xml +++ b/02nio/nio01/pom.xml @@ -59,6 +59,11 @@ netty-all 4.1.51.Final + + org.apache.httpcomponents + httpclient + 4.5.13 + diff --git a/02nio/nio01/src/main/java/java0/nio01/filter/HeaderHttpRequestFilter.java b/02nio/nio01/src/main/java/java0/nio01/filter/HeaderHttpRequestFilter.java new file mode 100644 index 00000000..1642b0d1 --- /dev/null +++ b/02nio/nio01/src/main/java/java0/nio01/filter/HeaderHttpRequestFilter.java @@ -0,0 +1,12 @@ +package java0.nio01.filter; + +import io.netty.channel.ChannelHandlerContext; +import io.netty.handler.codec.http.FullHttpRequest; + +public class HeaderHttpRequestFilter implements HttpRequestFilter { + + @Override + public void filter(FullHttpRequest fullRequest, ChannelHandlerContext ctx) { + fullRequest.headers().set("testreq", "reqtest"); + } +} diff --git a/02nio/nio01/src/main/java/java0/nio01/filter/HeaderHttpResponseFilter.java b/02nio/nio01/src/main/java/java0/nio01/filter/HeaderHttpResponseFilter.java new file mode 100644 index 00000000..0642888d --- /dev/null +++ b/02nio/nio01/src/main/java/java0/nio01/filter/HeaderHttpResponseFilter.java @@ -0,0 +1,10 @@ +package java0.nio01.filter; + +import io.netty.handler.codec.http.FullHttpResponse; + +public class HeaderHttpResponseFilter implements HttpResponseFilter { + @Override + public void filter(FullHttpResponse response) { + response.headers().set("testresp", "resptest"); + } +} diff --git a/02nio/nio01/src/main/java/java0/nio01/filter/HttpRequestFilter.java b/02nio/nio01/src/main/java/java0/nio01/filter/HttpRequestFilter.java new file mode 100644 index 00000000..617e2dfb --- /dev/null +++ b/02nio/nio01/src/main/java/java0/nio01/filter/HttpRequestFilter.java @@ -0,0 +1,10 @@ +package java0.nio01.filter; + +import io.netty.channel.ChannelHandlerContext; +import io.netty.handler.codec.http.FullHttpRequest; + +public interface HttpRequestFilter { + + void filter(FullHttpRequest fullRequest, ChannelHandlerContext ctx); + +} diff --git a/02nio/nio01/src/main/java/java0/nio01/filter/HttpResponseFilter.java b/02nio/nio01/src/main/java/java0/nio01/filter/HttpResponseFilter.java new file mode 100644 index 00000000..f7ae7b32 --- /dev/null +++ b/02nio/nio01/src/main/java/java0/nio01/filter/HttpResponseFilter.java @@ -0,0 +1,9 @@ +package java0.nio01.filter; + +import io.netty.handler.codec.http.FullHttpResponse; + +public interface HttpResponseFilter { + + void filter(FullHttpResponse response); + +} diff --git a/02nio/nio01/src/main/java/java0/nio01/httpclient/HttpClient.java b/02nio/nio01/src/main/java/java0/nio01/httpclient/HttpClient.java new file mode 100644 index 00000000..fac0beb3 --- /dev/null +++ b/02nio/nio01/src/main/java/java0/nio01/httpclient/HttpClient.java @@ -0,0 +1,123 @@ +package java0.nio01.httpclient; +import java.util.Map; + +import org.apache.http.HttpEntity; +import org.apache.http.client.methods.CloseableHttpResponse; +import org.apache.http.client.methods.HttpGet; +import org.apache.http.client.methods.HttpPost; +import org.apache.http.entity.ContentType; +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; + + +/** + * http客户端 + * + */ +public class HttpClient { + + /** + * post请求传输json数据 + * + * @param url url地址 + * @param json json数据 + * @param encoding 编码方式 + * @param headerMap 请求头中的键值对 + * @return + * @throws Exception + */ + public static String sendPostDataByJson(String url, String json, String encoding, Map headerMap) throws Exception { + String result = ""; + + // 创建httpclient对象 + CloseableHttpClient httpClient = HttpClients.createDefault(); + // 创建post方式请求对象 + HttpPost httpPost = new HttpPost(url); + // 将头信息设置到请求对象中 + if(headerMap != null) { + headerMap.forEach((key, value) -> { + httpPost.addHeader(key, value); + }); + } + // 设置参数到请求对象中 + StringEntity stringEntity = new StringEntity(json, ContentType.APPLICATION_JSON); + stringEntity.setContentEncoding(encoding); + httpPost.setEntity(stringEntity); + // 执行请求操作,并拿到结果(同步阻塞) + CloseableHttpResponse response = httpClient.execute(httpPost); + // 获取结果实体 + // 判断网络连接状态码是否正常(0--200都数正常) + // response.getStatusLine().getStatusCode() == HttpStatus.SC_OK + result = EntityUtils.toString(response.getEntity(), "utf-8"); + // 释放链接 + response.close(); + return result; + } + + public static String sendPostDataByJson(String url, String json) throws Exception { + return sendPostDataByJson(url, json, "utf-8", null); + } + + /** + * post请求传输Xml数据 + * + * @param url url地址 + * @param xml xml数据 + * @param encoding 编码方式 + * @return + * @throws Exception + */ + public static String sendPostDataByXml(String url, String xml, String encoding, Map headerMap) throws Exception { + String result = ""; + // 创建httpclient对象 + CloseableHttpClient httpClient = HttpClients.createDefault(); + // 创建post方式请求对象 + HttpPost httpPost = new HttpPost(url); + if(headerMap != null) { + headerMap.forEach((key, value) -> { + httpPost.addHeader(key, value); + }); + } + // 设置参数到请求对象中 + StringEntity stringEntity = new StringEntity(xml, ContentType.APPLICATION_XML); + stringEntity.setContentEncoding(encoding); + httpPost.setEntity(stringEntity); + // 执行请求操作,并拿到结果(同步阻塞) + CloseableHttpResponse response = httpClient.execute(httpPost); + // 获取结果实体 + // 判断网络连接状态码是否正常(0--200都数正常) + // response.getStatusLine().getStatusCode() == HttpStatus.SC_OK + result = EntityUtils.toString(response.getEntity(), encoding); + // 释放链接 + response.close(); + return result; + } + + public static String sendPostDataByXml(String url, String xml) throws Exception { + return sendPostDataByXml(url, xml, "GBK", null); + } + + // GET 调用 + public static String getAsString(String url) throws Exception{ + CloseableHttpClient httpClient = HttpClients.createDefault(); + HttpGet httpGet = new HttpGet(url); + CloseableHttpResponse response1 = null; + try { + response1 = httpClient.execute(httpGet); + System.out.println(response1.getStatusLine()); + HttpEntity entity1 = response1.getEntity(); + return EntityUtils.toString(entity1, "UTF-8"); + } finally { + if (null != response1) { + response1.close(); + } + } + } + + public static void main(String[] args) throws Exception { + System.out.println(getAsString("http://localhost:8088/api/hello")); + } + +} diff --git a/02nio/nio01/src/main/java/java0/nio01/netty/HttpHandler.java b/02nio/nio01/src/main/java/java0/nio01/netty/HttpHandler.java index 58c6e0a8..bc74ab2d 100644 --- a/02nio/nio01/src/main/java/java0/nio01/netty/HttpHandler.java +++ b/02nio/nio01/src/main/java/java0/nio01/netty/HttpHandler.java @@ -1,5 +1,11 @@ package java0.nio01.netty; +import static io.netty.handler.codec.http.HttpHeaderNames.CONNECTION; +import static io.netty.handler.codec.http.HttpHeaderValues.KEEP_ALIVE; +import static io.netty.handler.codec.http.HttpResponseStatus.NO_CONTENT; +import static io.netty.handler.codec.http.HttpResponseStatus.OK; +import static io.netty.handler.codec.http.HttpVersion.HTTP_1_1; + import io.netty.buffer.Unpooled; import io.netty.channel.ChannelFutureListener; import io.netty.channel.ChannelHandlerContext; @@ -9,70 +15,69 @@ import io.netty.handler.codec.http.FullHttpResponse; import io.netty.handler.codec.http.HttpUtil; import io.netty.util.ReferenceCountUtil; - -import static io.netty.handler.codec.http.HttpHeaderNames.CONNECTION; -import static io.netty.handler.codec.http.HttpHeaderValues.KEEP_ALIVE; -import static io.netty.handler.codec.http.HttpResponseStatus.NO_CONTENT; -import static io.netty.handler.codec.http.HttpResponseStatus.OK; -import static io.netty.handler.codec.http.HttpVersion.HTTP_1_1; +import java0.nio01.filter.HeaderHttpRequestFilter; +import java0.nio01.filter.HeaderHttpResponseFilter; +import java0.nio01.filter.HttpRequestFilter; +import java0.nio01.filter.HttpResponseFilter; +import java0.nio01.httpclient.HttpClient; public class HttpHandler extends ChannelInboundHandlerAdapter { - - @Override - public void channelReadComplete(ChannelHandlerContext ctx) { - ctx.flush(); - } - @Override - public void channelRead(ChannelHandlerContext ctx, Object msg) { - try { - //logger.info("channelRead流量接口请求开始,时间为{}", startTime); - FullHttpRequest fullRequest = (FullHttpRequest) msg; - String uri = fullRequest.uri(); - //logger.info("接收到的请求url为{}", uri); - if (uri.contains("/test")) { - handlerTest(fullRequest, ctx); - } - - } catch(Exception e) { - e.printStackTrace(); - } finally { - ReferenceCountUtil.release(msg); - } - } + private HttpRequestFilter reqfilter = new HeaderHttpRequestFilter(); + + private HttpResponseFilter respFilter = new HeaderHttpResponseFilter(); - private void handlerTest(FullHttpRequest fullRequest, ChannelHandlerContext ctx) { - FullHttpResponse response = null; - try { - String value = null; // "hello,kimmking"; // 对接上次作业的httpclient或者okhttp请求另一个url的响应数据 + @Override + public void channelReadComplete(ChannelHandlerContext ctx) { + ctx.flush(); + } -// httpGet ... http://localhost:8801 -// 返回的响应,"hello,nio"; -// value = reponse.... + @Override + public void channelRead(ChannelHandlerContext ctx, Object msg) { + try { + // logger.info("channelRead流量接口请求开始,时间为{}", startTime); + FullHttpRequest fullRequest = (FullHttpRequest) msg; + String uri = fullRequest.uri(); + // logger.info("接收到的请求url为{}", uri); + reqfilter.filter(fullRequest, ctx); + if (uri.contains("/test")) { + handlerTest(fullRequest, ctx); + } - response = new DefaultFullHttpResponse(HTTP_1_1, OK, Unpooled.wrappedBuffer(value.getBytes("UTF-8"))); - response.headers().set("Content-Type", "application/json"); - response.headers().setInt("Content-Length", response.content().readableBytes()); + } catch (Exception e) { + e.printStackTrace(); + } finally { + ReferenceCountUtil.release(msg); + } + } - } catch (Exception e) { - System.out.println("处理出错:"+e.getMessage()); - response = new DefaultFullHttpResponse(HTTP_1_1, NO_CONTENT); - } finally { - if (fullRequest != null) { - if (!HttpUtil.isKeepAlive(fullRequest)) { - ctx.write(response).addListener(ChannelFutureListener.CLOSE); - } else { - response.headers().set(CONNECTION, KEEP_ALIVE); - ctx.write(response); - } - } - } - } + private void handlerTest(FullHttpRequest fullRequest, ChannelHandlerContext ctx) { + FullHttpResponse response = null; + try { + String value = HttpClient.getAsString("http://localhost:8088/api/hello"); // 本地网关url + response = new DefaultFullHttpResponse(HTTP_1_1, OK, Unpooled.wrappedBuffer(value.getBytes("UTF-8"))); + response.headers().set("Content-Type", "application/json"); + response.headers().setInt("Content-Length", response.content().readableBytes()); + respFilter.filter(response); + } catch (Exception e) { + System.out.println("处理出错:" + e.getMessage()); + response = new DefaultFullHttpResponse(HTTP_1_1, NO_CONTENT); + } finally { + if (fullRequest != null) { + if (!HttpUtil.isKeepAlive(fullRequest)) { + ctx.write(response).addListener(ChannelFutureListener.CLOSE); + } else { + response.headers().set(CONNECTION, KEEP_ALIVE); + ctx.write(response); + } + } + } + } - @Override - public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) { - cause.printStackTrace(); - ctx.close(); - } + @Override + public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) { + cause.printStackTrace(); + ctx.close(); + } } diff --git a/02nio/nio02/.classpath b/02nio/nio02/.classpath new file mode 100644 index 00000000..5e8a55fe --- /dev/null +++ b/02nio/nio02/.classpath @@ -0,0 +1,27 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/02nio/nio02/.project b/02nio/nio02/.project new file mode 100644 index 00000000..5715fa22 --- /dev/null +++ b/02nio/nio02/.project @@ -0,0 +1,23 @@ + + + netty-gateway + + + + + + org.eclipse.jdt.core.javabuilder + + + + + org.eclipse.m2e.core.maven2Builder + + + + + + org.eclipse.jdt.core.javanature + org.eclipse.m2e.core.maven2Nature + + diff --git a/02nio/nio02/.settings/org.eclipse.core.resources.prefs b/02nio/nio02/.settings/org.eclipse.core.resources.prefs new file mode 100644 index 00000000..e9441bb1 --- /dev/null +++ b/02nio/nio02/.settings/org.eclipse.core.resources.prefs @@ -0,0 +1,3 @@ +eclipse.preferences.version=1 +encoding//src/main/java=UTF-8 +encoding/=UTF-8 diff --git a/02nio/nio02/.settings/org.eclipse.jdt.core.prefs b/02nio/nio02/.settings/org.eclipse.jdt.core.prefs new file mode 100644 index 00000000..71df5229 --- /dev/null +++ b/02nio/nio02/.settings/org.eclipse.jdt.core.prefs @@ -0,0 +1,9 @@ +eclipse.preferences.version=1 +org.eclipse.jdt.core.compiler.codegen.methodParameters=generate +org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 +org.eclipse.jdt.core.compiler.compliance=1.8 +org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled +org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning +org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=ignore +org.eclipse.jdt.core.compiler.release=disabled +org.eclipse.jdt.core.compiler.source=1.8 diff --git a/02nio/nio02/.settings/org.eclipse.m2e.core.prefs b/02nio/nio02/.settings/org.eclipse.m2e.core.prefs new file mode 100644 index 00000000..f897a7f1 --- /dev/null +++ b/02nio/nio02/.settings/org.eclipse.m2e.core.prefs @@ -0,0 +1,4 @@ +activeProfiles= +eclipse.preferences.version=1 +resolveWorkspaceProjects=true +version=1