java - 不同 URL 的 Netty 处理程序

标签 java http netty

我有一个带有一个处理程序的简单 netty4 服务器:

public class UploadServer {

private final int port;

public UploadServer(int port) {
    this.port = port;
}

public void run() throws Exception {
    EventLoopGroup bossGroup = new NioEventLoopGroup();
    EventLoopGroup workerGroup = new NioEventLoopGroup();
    try {
        ServerBootstrap b = new ServerBootstrap();
        b.group(bossGroup, workerGroup)
                .channel(NioServerSocketChannel.class)
                .childHandler(new ServerInitializer());
        Channel ch = b.bind(port).sync().channel();
        ch.closeFuture().sync();
    } finally {
        bossGroup.shutdownGracefully();
        workerGroup.shutdownGracefully();
    }
}

public static void main(String[] args) throws Exception {
    int port;
    if (args.length > 0) {
        port = Integer.parseInt(args[0]);
    } else {
        port = 8080;
    }
    new UploadServer(port).run();
}

private class ServerInitializer extends ChannelInitializer<SocketChannel>{
    @Override
    public void initChannel(SocketChannel ch) throws Exception {
        ChannelPipeline p = ch.pipeline();
        p.addLast("decoder", new HttpRequestDecoder());
        p.addLast("encoder", new HttpResponseEncoder());
        p.addLast("handler", new UploadServerHandler());
    }
}

和这个处理程序

public class UploadServerHandler extends SimpleChannelInboundHandler<Object> {
@Override
protected void channelRead0(ChannelHandlerContext channelHandlerContext, Object o) throws Exception {
    System.out.println("HEllO");
}

我有两个问题:

  • 如果我启动这个项目并在浏览器中转到 localhost:8080,我会看到 在控制台中“你好”两次。
  • 我想知道如何在我的 uploadServerHandler 中为不同的 URL 实现映射不同的处理程序

抱歉英语不好

最佳答案

控制台中的两个“Hello”可能与您的浏览器进行两次调用有关,一次调用 index.html,另一个调用 favicon。

您可以使用 curl 或 wget 来避免请求网站图标。

对于 url 映射不同的处理程序,我这样做的方式(虽然不确定这是最好的方法)是我在主处理程序中获取 URI:

  String uri = request.getUri();

然后根据我已知的 URI 测试 URI,并相应地重定向到其他处理程序。

关于java - 不同 URL 的 Netty 处理程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24035254/

相关文章:

java - 是否有可能在运行时获取java类的serialVersionUID

java - 通过接口(interface)中的对象常量使用反射进行迭代

http - 如何通过命令行以多行形式向 HTTP 服务器发送请求?

http - 将响应正文从 curl 请求保存到文件

java - 在 Netty 中处理 Http 状态码 302 Moved Temporarily

java - 关闭 netty 连接会使连接处于 TIMED_WAIT 状态

indexing - 如何使用 java API 在现有的 elasticsearch 索引中添加更多文档?

java - HttpURLConnection 超时设置

java - Tomcat 不允许我使用 Jersey (Jax-RS) 发送@POST 请求

java - 如何使 Netty 示例正常运行