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>() {
@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 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);
}
String responseHtml =
"<html><body>Hello, " + name +
"</body></html>";
byte[] responseBytes = responseHtml.getBytes(
"UTF-8");
int contentLength = responseBytes.length;
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();
}
}