Netty实现简单HTTP服务器

来源:互联网 发布:k姐陈洁淘宝为什么火 编辑:程序博客网 时间:2024/05/20 09:22

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<SocketChannel>() {@Overridepublic 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 {@Overridepublic 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);}// 响应HTMLString responseHtml = "<html><body>Hello, " + name + "</body></html>";byte[] responseBytes = responseHtml.getBytes("UTF-8");int contentLength = responseBytes.length;// 构造FullHttpResponse对象,FullHttpResponse包含message bodyFullHttpResponse 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);}}@Overridepublic void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) {cause.printStackTrace();ctx.close();}}