2、最初の例のネッティー、シンプルなHTTPサーバ

単純なHTTPリクエストを開始するネッティーサーバが処理することができます。

前の手順に従ってネッティー書かを使用します。コードを貼り付けます。

サーバ

1  インポートio.netty.bootstrap.ServerBootstrap;
 2  インポートio.netty.channel.ChannelFuture;
 3  インポートio.netty.channel.EventLoopGroup;
 4  インポートio.netty.channel.nio.NioEventLoopGroup;
 5  インポートio.netty.channel。 socket.nio.NioServerSocketChannel;
 6。 
7。 / ** 
8。   * @ClassName:TestServe
 9。   * @description:主な役割が説明されたが、疑似サーバを書くにHTTPリクエストをサポートしています。リクエストヘッダを参照することができ、データはまた、自身の応答を構築することができる
 10    * @CreateDate:23時08 2019年7月3日
 11    * @Versionを:1.0
 12である  * / 
13はある 公共の クラス{TESTSERVER
 14  
15      公共 静的 ボイドメイン(文字列[]引数)がスローInterruptedExceptionある{
 16          EventLoopGroup bossGroup = 新しい新しい NioEventLoopGroupを(); // 無限ループのセットを受信するためのスレッド・イベント・ループ
17          EventLoopGroup workerGroup = 新しい新しい NioEventLoopGroup(); // スレッド処理するためのイベントループ無限ループグループ
18である 
。19          試み{
 20は             // スタータ
21は              = ServerBootstrap ServerBootstrapの新しい新ServerBootstrap()は、
 22である              serverBootstrap.group(bossGroup、workerGroup)//追加の二つはスレッドグループ設けられ
23である                      .Channel(NioServerSocketChannel。クラス24                      .childHandler(新しい新しい TestSereverInitlalizer()); // これは、クラスを初期化するために提供される
25  
26である              ChannelFuture ChannelFuture = serverBootstrap.bind(8899).syncを(); // ブロックし待機
27  
28              ..; channelFuture.channel()closeFuture()同期()
 29          } 最後に{
 30              bossGroup.shutdownGracefullyを(); //閉じるエレガント
 31は             workerGroup.shutdownGracefully();
 32          }
 33で 
34れています     }
35 }

Initlalizer

1つの インポートio.netty.channel.ChannelInitializer。
2  インポートio.netty.channel.ChannelPipeline。
3  輸入io.netty.channel.socket.SocketChannel。
4  インポートio.netty.handler.codec.http.HttpServerCodec。
5  
6  パブリック クラス TestSereverInitlalizerは延び ChannelInitializer <たSocketChannel> {
 7  
8      @Override
 9      保護 ボイド initChannel(のSocketChannel CH)がスロー例外{
 10          ChannelPipelineパイプライン= )(ch.pipelineします。
11  
12         pipeline.addLast( "httpServerCodec"、新たな新 HttpServerCodec()); // で使用されるHTTP 
13は          pipeline.addLast( "testHttpSereverHandle"、新たな新 TestHttpServerHandler()); // 予め設定ハンドラは、最後に追加
14  
15      }
 16 }

ハンドラ

1つの インポートio.netty.buffer.ByteBuf。
2  インポートio.netty.buffer.Unpooled。
3  インポートio.netty.channel.ChannelHandlerContext。
4  インポートio.netty.channel.SimpleChannelInboundHandler。
5  輸入 io.netty.handler.codec.http *。;
6  インポートio.netty.util.CharsetUtil。
7  
8  インポートjava.net.URI。
9つの インポートのjava.net.URL。
10の 
11  パブリック クラス TestHttpServerHandlerは延び SimpleChannelInboundHandler <HttpObject> {
 12  
13     @Override
 14は     保護 ボイド channelRead0(ChannelHandlerContext CTX、HttpObject MSG)をスロー例外{
 15  
16          のSystem.out.println(msg.getClass());
 17  
18である         ([リモートのctx.channel()())のSystem.out.println。
 19  
20          のIF(MSG のinstanceofのHttpRequest){ // これを追加しない場合はカールを使用してアクセスする場合、与えられたアクセスブラウザは文句はありません
 21  //             するSystem.out.printlnを( "行っ!!!!!") 、
22である 
23である              のHttpRequestのHttpRequest = (HttpRequestの)MSG;
 24  
25              のSystem.out.println( "リクエストメソッド名" +。httpRequest.getMethod()名());
 26である 
27              URI URI = 新しい新しいURI(httpRequest.uri());
 28              IF( "/favicon.ico" .equals(uri.getPath())){
 29                  のSystem.out .println( "リクエストfavicon.icoを" );
 30                  リターン;
 31である             }
 32  
33であるが             、// クライアントにコンテンツを返さ
34で              ByteBuf Unpooled.copiedBuffer含量=( "Hello World"の;、CharsetUtil.UTF_8)
 35              // 建設応答
36              レスポンス= FullHttpResponse 新新DefaultFullHttpResponse(HttpVersion.HTTP_1_1、HttpResponseStatus.OK、コンテンツ)。
37              response.headers()セット(HttpHeaderNames.CONTENT_TYPE、 "text / plainで"。 )。
38              。response.headers()セット(HttpHeaderNames.CONTENT_LENGTH、content.readableBytes())。
39  
40              ctx.writeAndFlush(応答)。
41              ctx.channel()クローズ()。
42          }
 43  
44      }
 45  
46      @Override
 47      公共 ボイド channelActive(ChannelHandlerContext CTX)がスロー例外{
 48          のSystem.out.printlnは( "アクティブチャネル");
49          スーパー.channelActive(CTX);
50      }
 51  
52      @Override
 53      公共 ボイド channelInactive(ChannelHandlerContext CTX)がスロー例外{
 54          のSystem.out.println( "チャネル非アクティブ" )。
55          スーパー.channelInactive(CTX);
56      }
 57  
58      @Override
 59      公共 ボイド channelRegistered(ChannelHandlerContext CTX)がスロー例外{
 60          のSystem.out.println( "登録チャネル" )。
61人の         スーパー.channelRegistered(CTX)。
62      }
 63  
64      @Override
 65      公共 ボイド channelUnregistered(ChannelHandlerContext CTX)がスロー例外{
 66          のSystem.out.println( "未登録のチャンネル" )。
67          スーパーは(CTX)を.channelUnregistered。
68      }
 69  
70      @Override
 71      公共 ボイド handlerAdded(ChannelHandlerContext CTX)がスロー例外{
 72          のSystem.out.println( "ハンドラが追加の" )。
73          スーパー(CTX)を.handlerAdded。
74      }
 75 }

 

おすすめ

転載: www.cnblogs.com/amibandoufu/p/11442648.html