Java 不同URL的Netty处理程序
我有一个简单的netty4服务器,带有一个处理程序:Java 不同URL的Netty处理程序,java,http,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
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());
}
}
公共类上传服务器{
私人最终国际港口;
公共上载服务器(int端口){
this.port=端口;
}
public void run()引发异常{
EventLoopGroup bossGroup=新的NioEventLoopGroup();
EventLoopGroup workerGroup=新的NioEventLoopGroup();
试一试{
ServerBootstrap b=新的ServerBootstrap();
b、 组(bossGroup、workerGroup)
.channel(NioServerSocketChannel.class)
.childHandler(新的服务器初始值设定项());
Channel ch=b.bind(port.sync().Channel();
ch.closeFuture().sync();
}最后{
bossGroup.shutdownGracefully();
workerGroup.shutdownGracefully();
}
}
公共静态void main(字符串[]args)引发异常{
国际港口;
如果(args.length>0){
port=Integer.parseInt(args[0]);
}否则{
端口=8080;
}
新建上载服务器(端口).run();
}
私有类ServerInitializer扩展了ChannelInitializer{
@凌驾
public void initChannel(SocketChannel ch)引发异常{
ChannelPipeline p=通道管道();
p、 addLast(“解码器”,新的HttpRequestDecoder());
p、 addLast(“编码器”,新的HttpResponseEncoder());
p、 addLast(“handler”,newuploadServerHandler());
}
}
这个处理器呢
public class UploadServerHandler extends SimpleChannelInboundHandler<Object> {
@Override
protected void channelRead0(ChannelHandlerContext channelHandlerContext, Object o) throws Exception {
System.out.println("HEllO");
}
公共类UploadServerHandler扩展了SimpleChannelInboundHandler{
@凌驾
受保护的无效channelRead0(ChannelHandlerContext ChannelHandlerContext,对象o)引发异常{
System.out.println(“你好”);
}
}
我有两个问题:
- 如果我启动这个项目并在浏览器中转到localhost:8080,我会看到 在控制台中“你好”两次
- 我想知道如何在uploadServerHandler中为不同的URL映射不同的处理程序
String uri = request.getUri();
然后根据我的known URI测试URI,并相应地重定向到其他处理程序。谢谢!但是带参数的请求呢?看起来像“xxx.net/getbyname?name=mike”?Re:request params-使用一些代码精确显示如何“重定向到其他处理程序”会很好。正如您可能理解的,搜索“netty重定向到其他处理程序”会产生垃圾,因为这一切都与HTTP302重定向有关