8000 week3 · JavaCourse00/JavaCourseCodes@a0c10ef · GitHub
[go: up one dir, main page]

Skip to content

Commit a0c10ef

Browse files
author
yiwenzhi
committed
week3
1 parent 01d9794 commit a0c10ef

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

45 files changed

+852
-18
lines changed

02nio/netty-server/.classpath

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<classpath>
3+
<classpathentry kind="src" output="target/classes" path="src/main/java">
4+
<attributes>
5+
<attribute name="optional" value="true"/>
6+
<attribute name="maven.pomderived" value="true"/>
7+
</attributes>
8+
</classpathentry>
9+
<classpathentry kind="src" output="target/test-classes" path="src/test/java">
10+
<attributes>
11+
<attribute name="optional" value="true"/>
12+
<attribute name="maven.pomderived" value="true"/>
13+
<attribute name="test" value="true"/>
14+
</attributes>
15+
</classpathentry>
16+
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8">
17+
<attributes>
18+
<attribute name="maven.pomderived" value="true"/>
19+
</attributes>
20+
</classpathentry>
21+
<classpathentry kind="con" path="org.eclipse.m2e.MAVEN2_CLASSPATH_CONTAINER">
22+
<attributes>
23+
<attribute name="maven.pomderived" value="true"/>
24+
</attributes>
25+
</classpathentry>
26+
<classpathentry kind="src" path="target/generated-sources/annotations">
27+
<attributes>
28+
<attribute name="optional" value="true"/>
29+
<attribute name="maven.pomderived" value="true"/>
30+
<attribute name="ignore_optional_problems" value="true"/>
31+
<attribute name="m2e-apt" value="true"/>
32+
</attributes>
33+
</classpathentry>
34+
<classpathentry kind="src" output="target/test-classes" path="target/generated-test-sources/test-annotations">
35+
<attributes>
36+
<attribute name="optional" value="true"/>
37+
<attribute name="maven.pomderived" value="true"/>
38+
<attribute name="ignore_optional_problems" value="true"/>
39+
<attribute name="m2e-apt" value="true"/>
40+
<attribute name="test" value="true"/>
41+
</attributes>
42+
</classpathentry>
43+
<classpathentry kind="output" path="target/classes"/>
44+
</classpath>

02nio/netty-server/.project

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<projectDescription>
3+
<name>netty-server</name>
4+
<comment></comment>
5+
<projects>
6+
</projects>
7+
<buildSpec>
8+
<buildCommand>
9+
<name>org.eclipse.jdt.core.javabuilder</name>
10+
<arguments>
11+
</arguments>
12+
</buildCommand>
13+
<buildCommand>
14+
<name>org.eclipse.m2e.core.maven2Builder</name>
15+
<arguments>
16+
</arguments>
17+
</buildCommand>
18+
</buildSpec>
19+
<natures>
20+
<nature>org.eclipse.jdt.core.javanature</nature>
21+
<nature>org.eclipse.m2e.core.maven2Nature</nature>
22+
</natures>
23+
<filteredResources>
24+
<filter>
25+
<id>1604144598701</id>
26+
<name></name>
27+
<type>30</type>
28+
<matcher>
29+
<id>org.eclipse.core.resources.regexFilterMatcher</id>
30+
<arguments>node_modules|.git|__CREATED_BY_JAVA_LANGUAGE_SERVER__</arguments>
31+
</matcher>
32+
</fil D860 ter>
33+
</filteredResources>
34+
</projectDescription>
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
eclipse.preferences.version=1
2+
encoding//src/main/java=UTF-8
3+
encoding/<project>=UTF-8
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
eclipse.preferences.version=1
2+
org.eclipse.jdt.apt.aptEnabled=false
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
eclipse.preferences.version=1
2+
org.eclipse.jdt.core.compiler.codegen.methodParameters=generate
3+
org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8
4+
org.eclipse.jdt.core.compiler.compliance=1.8
5+
org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled
6+
org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning
7+
org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=ignore
8+
org.eclipse.jdt.core.compiler.processAnnotations=disabled
9+
org.eclipse.jdt.core.compiler.release=disabled
10+
org.eclipse.jdt.core.compiler.source=1.8
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
activeProfiles=
2+
eclipse.preferences.version=1
3+
resolveWorkspaceProjects=true
4+
version=1
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
{
2+
// Use IntelliSense to learn about possible attributes.
3+
// Hover to view descriptions of existing attributes.
4+
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
5+
"version": "0.2.0",
6+
"configurations": [
7+
{
8+
"type": "java",
9+
"name": "Debug (Launch) - Current File",
10+
"request": "launch",
11+
"mainClass": "${file}"
12+
},
13+
{
14+
"type": "java",
15+
"name": "Debug (Launch)-NettyServerApplication<netty-server>",
16+
"request": "launch",
17+
"mainClass": "io.github.kimmking.netty.server.NettyServerApplication",
18+
"projectName": "netty-server"
19+
}
20+
]
21+
}

02nio/netty-server/pom.xml

Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
3+
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4+
<modelVersion>4.0.0</modelVersion>
5+
6+
<groupId>io.github.kimmking</groupId>
7+
<artifactId>netty-server</artifactId>
8+
<version>0.0.1-SNAPSHOT</version>
9+
<packaging>jar</packaging>
10+
11+
<name>netty-server</name>
12+
<description>Demo project for Spring Boot</description>
13+
14+
<parent>
15+
<groupId>org.springframework.boot</groupId>
16+
<artifactId>spring-boot-starter-parent</artifactId>
17+
<version>2.0.4.RELEASE</version>
18+
<relativePath/>
19+
</parent>
20+
21+
<properties>
22+
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
23+
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
24+
<java.version>1.8</java.version>
25+
</properties>
26+
27+
<dependencies>
28+
29+
<dependency>
30+
<groupId>io.netty</groupId>
31+
<artifactId>netty-all</artifactId>
32+
<version>4.1.45.Final</version>
33+
</dependency>
34+
35+
<dependency>
36+
<groupId>org.slf4j</groupId>
37+
<artifactId>slf4j-api</artifactId>
38+
<version>1.7.25</version>
39+
</dependency>
40+
<dependency>
41+
<groupId>org.slf4j</groupId>
42+
<artifactId>slf4j-log4j12</artifactId>
43+
<version>1.7.25</version>
44+
</dependency>
45+
46+
<!--
47+
<dependency>
48+
<groupId>org.springframework.boot</groupId>
49+
<artifactId>spring-boot-starter-web</artifactId>
50+
</dependency>
51+
52+
<dependency>
53+
<groupId>org.springframework.boot</groupId>
54+
<artifactId>spring-boot-starter-test</artifactId>
55+
<scope>test</scope>
56+
</dependency>
57+
-->
58+
59+
</dependencies>
60+
61+
<build>
62+
<plugins>
63+
<plugin>
64+
<groupId>org.springframework.boot</groupId>
65+
<artifactId>spring-boot-maven-plugin</artifactId>
66+
</plugin>
67+
</plugins>
68+
</build>
69+
70+
71+
</project>
Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,74 @@
1+
package io.github.kimmking.netty.server;
2+
3+
import io.netty.buffer.Unpooled;
4+
import io.netty.channel.ChannelFutureListener;
5+
import io.netty.channel.ChannelHandlerContext;
6+
import io.netty.channel.ChannelInboundHandlerAdapter;
7+
import io.netty.handler.codec.http.DefaultFullHttpResponse;
8+
import io.netty.handler.codec.http.FullHttpRequest;
9+
import io.netty.handler.codec.http.FullHttpResponse;
10+
import io.netty.handler.codec.http.HttpUtil;
11+
import io.netty.util.ReferenceCountUtil;
12+
import org.slf4j.Logger;
13+
import org.slf4j.LoggerFactory;
14+
15+
import static io.netty.handler.codec.http.HttpHeaderValues.KEEP_ALIVE;
16+
import static io.netty.handler.codec.http.HttpHeaderNames.CONNECTION;
17+
import static io.netty.handler.codec.http.HttpResponseStatus.NO_CONTENT;
18+
import static io.netty.handler.codec.http.HttpResponseStatus.OK;
19+
import static io.netty.handler.codec.http.HttpVersion.HTTP_1_1;
20+
21+
public class HttpHandler extends ChannelInboundHandlerAdapter {
22+
23+
private static Logger logger = LoggerFactory.getLogger(HttpHandler.class);
24+
25+
@Override
26+
public void channelReadComplete(ChannelHandlerContext ctx) {
27+
ctx.flush();
28+
}
29+
30+
@Override
31+
public void channelRead(ChannelHandlerContext ctx, Object msg) {
32+
try {
33+
//logger.info("channelRead流量接口请求开始,时间为{}", startTime);
34+
FullHttpRequest fullRequest = (FullHttpRequest) msg;
35+
String uri = fullRequest.uri();
36+
//logger.info("接收到的请求url为{}", uri);
37+
if (uri.contains("/test")) {
38+
handlerTest(fullRequest, ctx);
39+
}
40+
} finally {
41+
ReferenceCountUtil.release(msg);
42+
}
43+
}
44+
45+
private void handlerTest(FullHttpRequest fullRequest, ChannelHandlerContext ctx) {
46+
FullHttpResponse response = null;
47+
try {
48+
String value = "hello,kimmking";
49+
response = new DefaultFullHttpResponse(HTTP_1_1, OK, Unpooled.wrappedBuffer(value.getBytes("UTF-8")));
50+
response.headers().set("Content-Type", "application/json");
51+
response.headers().setInt("Content-Length", response.content().readableBytes());
52+
53+
} catch (Exception e) {
54+
logger.error("处理测试接口出错", e);
55+
response = new DefaultFullHttpResponse(HTTP_1_1, NO_CONTENT);
56+
} finally {
57+
if (fullRequest != null) {
58+
if (!HttpUtil.isKeepAlive(fullRequest)) {
59+
ctx.write(response).addListener(ChannelFutureListener.CLOSE);
60+
} else {
61+
response.headers().set(CONNECTION, KEEP_ALIVE);
62+
ctx.write(response);
63+
}
64+
}
65+
}
66+
}
67+
68+
@Override
69+
public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) {
70+
cause.printStackTrace();
71+
ctx.close();
72+
}
73+
74+
}
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
package io.github.kimmking.netty.server;
2+
3+
import io.netty.channel.ChannelInitializer;
4+
import io.netty.channel.ChannelPipeline;
5+
import io.netty.channel.socket.SocketChannel;
6+
import io.netty.handler.codec.http.HttpObjectAggregator;
7+
import io.netty.handler.codec.http.HttpServerCodec;
8+
import io.netty.handler.ssl.SslContext;
9+
10+
public class HttpInitializer extends ChannelInitializer<SocketChannel> {
11+
private final SslContext sslCtx;
12+
13+
public HttpInitializer(SslContext sslCtx) {
14+
this.sslCtx = sslCtx;
15+
}
16+
17+
@Override
18+
public void initChannel(SocketChannel ch) {
19+
ChannelPipeline p = ch.pipeline();
20+
if (sslCtx != null) {
21+
p.addLast(sslCtx.newHandler(ch.alloc()));
22+
}
23+
p.addLast(new HttpServerCodec());
24+
//p.addLast(new HttpServerExpectContinueHandler());
25+
p.addLast(new HttpObjectAggregator(1024 * 1024));
26+
p.addLast(new HttpHandler());
27+
}
28+
}

0 commit comments

Comments
 (0)
0