Netty обработчики для разных URL

1

У меня есть простой сервер 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 в браузере, я вижу "HEELO" дважды в консоли.
  • Я хочу знать, как реализовать отображение разных обработчиков для разных URL-адресов в моем uploadServerHandler

Извините за плохой английский

Теги:
http
netty

2 ответа

2
Лучший ответ

Два "Hello" в консоли, вероятно, связаны с тем, что ваш браузер выполняет два вызова, один для index.html, а другой для значка.

Вы можете использовать curl или wget, чтобы избежать запроса значка.

Для URL-адресов, сопоставляющих разные обработчики, то, как я это делаю (не уверен, что это лучший способ), заключается в том, что я получаю URI в основном обработчике с помощью:

  String uri = request.getUri();

а затем протестировать URI против моих устаревших URI и соответственно перенаправить на другие обработчики.

  • 0
    Спасибо! а как насчет запроса с параметрами? выглядеть как "xxx.net/getbyname?name=mike"?
  • 1
    Re: запрос параметров - используйте QueryStringDecoder
0

Java взгляните на это один раз. Позвольте мне знать, это то, что вы ищете?

Ещё вопросы

Сообщество Overcoder
Наверх
Меню