package com.peony.netty.handler; import com.peony.netty.util.ByteBufToBytes; import com.peony.netty.web.UriAdapter; import io.netty.channel.ChannelHandlerContext; import io.netty.channel.ChannelInboundHandlerAdapter; import io.netty.handler.codec.http.DefaultFullHttpResponse; import io.netty.handler.codec.http.FullHttpResponse; import io.netty.handler.codec.http.HttpHeaders; import io.netty.handler.codec.http.HttpRequest; import static io.netty.handler.codec.http.HttpHeaders.Names.*; import static io.netty.handler.codec.http.HttpResponseStatus.NOT_FOUND; import static io.netty.handler.codec.http.HttpResponseStatus.OK; import static io.netty.handler.codec.http.HttpVersion.HTTP_1_1; public class HttpServerHandler extends ChannelInboundHandlerAdapter { private ByteBufToBytes reader; @Override public void channelRead(ChannelHandlerContext ctx, Object msg) { if (msg instanceof HttpRequest) { HttpRequest request = (HttpRequest) msg; // System.out.println("User-Agent: " + request.headers().get("User-Agent")); FullHttpResponse response = new DefaultFullHttpResponse(HTTP_1_1, OK); boolean success = UriAdapter.adapter(request.getUri(), request, response); if (success) { response.setStatus(OK); } else { response.setStatus(NOT_FOUND); } response.headers().set(CONTENT_TYPE, "text/plain; charset=utf-8"); // response.headers().set(CONTENT_TYPE, "text/html; charset=UTF-8"); response.headers().set(CONTENT_LENGTH, response.content().readableBytes()); response.headers().set(CONNECTION, HttpHeaders.Values.KEEP_ALIVE); ctx.write(response); ctx.flush(); } } @Override public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) { // 当出现异常就关闭连接 cause.printStackTrace(); ctx.close(); } }