У меня есть простой сервер 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");
}
}
И у меня есть две проблемы:
Извините за плохой английский
Два "Hello" в консоли, вероятно, связаны с тем, что ваш браузер выполняет два вызова, один для index.html, а другой для значка.
Вы можете использовать curl или wget, чтобы избежать запроса значка.
Для URL-адресов, сопоставляющих разные обработчики, то, как я это делаю (не уверен, что это лучший способ), заключается в том, что я получаю URI в основном обработчике с помощью:
String uri = request.getUri();
а затем протестировать URI против моих устаревших URI и соответственно перенаправить на другие обработчики.
Java взгляните на это один раз. Позвольте мне знать, это то, что вы ищете?