Netty实现简单HTTP服务器

Netty实现简单HTTP服务器

public class HttpServer {

	public static void main(String[] args) throws InterruptedException {
		EventLoopGroup bossGroup = new NioEventLoopGroup();
		EventLoopGroup workerGroup = new NioEventLoopGroup();
		try {
			ServerBootstrap b = new ServerBootstrap();
			b.group(bossGroup, workerGroup)
					.channel(NioServerSocketChannel.class)
					.childHandler(new ChannelInitializer() {
						@Override
						public void initChannel(SocketChannel ch) throws Exception {
							ChannelPipeline pipeline = ch.pipeline();
							pipeline.addLast(new HttpServerCodec());
							pipeline.addLast(new HttpServerHandler());
						}
					});
			ChannelFuture f = b.bind(8080).sync();
			f.channel().closeFuture().sync();
		} finally {
			workerGroup.shutdownGracefully();
			bossGroup.shutdownGracefully();
		}
	}
}

class HttpServerHandler extends ChannelInboundHandlerAdapter {

	@Override
	public void channelRead(ChannelHandlerContext ctx, Object msg) throws UnsupportedEncodingException {

		if (msg instanceof HttpRequest) {

			// 请求,解码器将请求转换成HttpRequest对象
			HttpRequest request = (HttpRequest) msg;

			// 获取请求参数
			QueryStringDecoder queryStringDecoder = new QueryStringDecoder(request.uri());
			String name = "World";
			if(queryStringDecoder.parameters().get("name") != null) {
					name = queryStringDecoder.parameters().get("name").get(0);
			}

			// 响应HTML
			String responseHtml = "Hello, " + name + "";
			byte[] responseBytes = responseHtml.getBytes("UTF-8");
			int contentLength = responseBytes.length;

			// 构造FullHttpResponse对象,FullHttpResponse包含message body
			FullHttpResponse response = new DefaultFullHttpResponse(HttpVersion.HTTP_1_1, HttpResponseStatus.OK, Unpooled.wrappedBuffer(responseBytes));
			response.headers().set("Content-Type", "text/html; charset=utf-8");
			response.headers().set("Content-Length", Integer.toString(contentLength));

			ctx.writeAndFlush(response);
		}
	}

	@Override
	public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) {
		cause.printStackTrace();
		ctx.close();
	}
}

你可能感兴趣的:(Java学习)