From 9bf5147337465fdcb1cbd2eb1813b856929d8af6 Mon Sep 17 00:00:00 2001
From: sky <752236348@qq.com>
Date: Sun, 23 May 2021 23:23:35 +0800
Subject: [PATCH 1/2] homework
---
02nio/nio01/.classpath | 27 ++++
02nio/nio01/.project | 23 ++++
.../.settings/org.eclipse.jdt.core.prefs | 8 ++
.../.settings/org.eclipse.m2e.core.prefs | 4 +
02nio/nio01/pom.xml | 5 +
.../java0/nio01/httpclient/HttpClient.java | 123 ++++++++++++++++++
.../java/java0/nio01/netty/HttpHandler.java | 8 +-
02nio/nio02/.classpath | 27 ++++
02nio/nio02/.project | 23 ++++
.../org.eclipse.core.resources.prefs | 3 +
.../.settings/org.eclipse.jdt.core.prefs | 9 ++
.../.settings/org.eclipse.m2e.core.prefs | 4 +
12 files changed, 258 insertions(+), 6 deletions(-)
create mode 100644 02nio/nio01/.classpath
create mode 100644 02nio/nio01/.project
create mode 100644 02nio/nio01/.settings/org.eclipse.jdt.core.prefs
create mode 100644 02nio/nio01/.settings/org.eclipse.m2e.core.prefs
create mode 100644 02nio/nio01/src/main/java/java0/nio01/httpclient/HttpClient.java
create mode 100644 02nio/nio02/.classpath
create mode 100644 02nio/nio02/.project
create mode 100644 02nio/nio02/.settings/org.eclipse.core.resources.prefs
create mode 100644 02nio/nio02/.settings/org.eclipse.jdt.core.prefs
create mode 100644 02nio/nio02/.settings/org.eclipse.m2e.core.prefs
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/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..73710999 100644
--- a/02nio/nio01/src/main/java/java0/nio01/netty/HttpHandler.java
+++ b/02nio/nio01/src/main/java/java0/nio01/netty/HttpHandler.java
@@ -9,6 +9,7 @@
import io.netty.handler.codec.http.FullHttpResponse;
import io.netty.handler.codec.http.HttpUtil;
import io.netty.util.ReferenceCountUtil;
+import java0.nio01.httpclient.HttpClient;
import static io.netty.handler.codec.http.HttpHeaderNames.CONNECTION;
import static io.netty.handler.codec.http.HttpHeaderValues.KEEP_ALIVE;
@@ -44,12 +45,7 @@ public void channelRead(ChannelHandlerContext ctx, Object msg) {
private void handlerTest(FullHttpRequest fullRequest, ChannelHandlerContext ctx) {
FullHttpResponse response = null;
try {
- String value = null; // "hello,kimmking"; // 对接上次作业的httpclient或者okhttp请求另一个url的响应数据
-
-// httpGet ... http://localhost:8801
-// 返回的响应,"hello,nio";
-// value = reponse....
-
+ 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());
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
From c49db314f5810611db0855101abbffb2b5e540f0 Mon Sep 17 00:00:00 2001
From: sky <752236348@qq.com>
Date: Sun, 23 May 2021 23:46:34 +0800
Subject: [PATCH 2/2] homework
---
.../nio01/filter/HeaderHttpRequestFilter.java | 12 ++
.../filter/HeaderHttpResponseFilter.java | 10 ++
.../java0/nio01/filter/HttpRequestFilter.java | 10 ++
.../nio01/filter/HttpResponseFilter.java | 9 ++
.../java/java0/nio01/netty/HttpHandler.java | 117 ++++++++++--------
5 files changed, 104 insertions(+), 54 deletions(-)
create mode 100644 02nio/nio01/src/main/java/java0/nio01/filter/HeaderHttpRequestFilter.java
create mode 100644 02nio/nio01/src/main/java/java0/nio01/filter/HeaderHttpResponseFilter.java
create mode 100644 02nio/nio01/src/main/java/java0/nio01/filter/HttpRequestFilter.java
create mode 100644 02nio/nio01/src/main/java/java0/nio01/filter/HttpResponseFilter.java
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/netty/HttpHandler.java b/02nio/nio01/src/main/java/java0/nio01/netty/HttpHandler.java
index 73710999..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,66 +15,69 @@
import io.netty.handler.codec.http.FullHttpResponse;
import io.netty.handler.codec.http.HttpUtil;
import io.netty.util.ReferenceCountUtil;
+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;
-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;
-
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();
+
+ @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);
+ reqfilter.filter(fullRequest, ctx);
+ if (uri.contains("/test")) {
+ handlerTest(fullRequest, ctx);
+ }
- 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());
+ } 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();
+ }
}