java-Netty-如何检测/提取帖子内容?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java-Netty-如何检测/提取帖子内容?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2997字,纯文字阅读大概需要5分钟。
内容图文
![java-Netty-如何检测/提取帖子内容?](/upload/InfoBanner/zyjiaocheng/682/331b29ecd060496ba7e6edd65d5fad0b.jpg)
我正在使用Netty 5.0,并且对它的http函数仍然是新的.
我需要通过json字符串在Netty服务器和JavaScript应用程序之间进行通信.
服务器处理程序非常简单,如以下代码所示:
public class HttpServerHandler extends SimpleChannelInboundHandler<Object> {
@Override
protected void messageReceived(ChannelHandlerContext ctx, Object msg) throws Exception {
System.out.println(msg);
}
}
初始化代码:
public class NettyHttpServerInitializer extends ChannelInitializer<SocketChannel> {
@Override
public void initChannel(SocketChannel ch) throws Exception {
ChannelPipeline pipeline = ch.pipeline();
pipeline.addLast("framer", new DelimiterBasedFrameDecoder(8192, Delimiters.lineDelimiter()));
pipeline.addLast("decoder", new StringDecoder(Charset.forName("UTF-8")));
pipeline.addLast("encoder", new StringEncoder(Charset.forName("UTF-8")));
pipeline.addLast("handler", new HttpServerHandler());
}
}
每当客户端通过post方法发送json字符串时,服务器都会输出:
POST / HTTP/1.1
Host: localhost:8080
Connection: keep-alive
Content-Length: 51
Origin: http://127.0.0.1:8888
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.111 Safari/537.36
Content-Type: application/x-www-form-urlencoded
Accept: */ *
Referer: http://127.0.0.1:8888/MyWebApp02.html
Accept-Encoding: gzip, deflate
Accept-Language: en-US,en;q=0.8
{"cmd":"he", "ver":1, "dvt":3}
我需要的只是最后一行,json字符串.但是,服务器以多字符串形式接收输入,因此我无法将它们转换为高级结构(例如HttpRequest)来获取该内容.我可以解析/检查所有字符串以检测json字符串,但看起来这是最糟糕的方法.我曾尝试改善代码(例如使用SimpleChannelInboundHandler< FullHttpRequest> ;,删除DelimiterBasedFrameDecoder),但到目前为止还算不上什么.
解决方法:
要创建Web服务器,应将HttpServerCodec与可选的HttpObjectAggregator结合使用.
您的ChannelInitializer应该如下所示:
public class NettyHttpServerInitializer extends ChannelInitializer<SocketChannel> {
@Override
public void initChannel(SocketChannel ch) throws Exception {
ChannelPipeline pipeline = ch.pipeline();
pipeline.addLast("http", new HttpServerCodec());
// optional, makes life easier
pipeline.addLast("dechunker", new HttpObjectAggregator(65536));
pipeline.addLast("handler", new HttpServerHandler());
}
}
如果存在HttpObjectAggregator或其他类型的HttpRequest消息,则处理程序将处理FullHttpRequest(这比较困难,请参见示例this).
我将主要集中回答我们收到的FullHttpRequest.
收到FullHttpRequest时,我们可以做一些事情:
>使用request.getUri()获取uri
>获取request.getMethod()使用的HTTP方法
>使用request.headers()获取标题
>使用request.content()获取POST / PUT请求的内容
要回答您的问题,您应该首先调用request.getMethod()来检查方法是POST还是PUT,然后调用request.content()来获取内容.
例:
public class HttpServerHandler extends SimpleChannelInboundHandler<FullHttpRequest> {
@Override
protected void messageReceived(ChannelHandlerContext ctx, FullHttpRequest msg) throws Exception {
if(msg.getMethod().equals(HttpMethod.POST) || msg.getMethod().equals(HttpMethod.PUT)) {
System.out.println(msg.content().toString(Charset.forName("UTF-8")));
}
}
}
内容总结
以上是互联网集市为您收集整理的java-Netty-如何检测/提取帖子内容?全部内容,希望文章能够帮你解决java-Netty-如何检测/提取帖子内容?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。