文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

Netty4之怎么实现HTTP请求、响应

2023-07-05 21:33

关注

本文小编为大家详细介绍“Netty4之怎么实现HTTP请求、响应”,内容详细,步骤清晰,细节处理妥当,希望这篇“Netty4之怎么实现HTTP请求、响应”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。

1.Netty中HTTP请求和响应类

请求(FullHttpRequest)

public interface FullHttpRequest extends HttpRequest, FullHttpMessage {

可以看到,它结合了HttpRequest、FullHttpMessag,作为一个完整的HTTP请求体。

默认实现为DefaultFullHttpRequest

响应(FullHttpResponse)

public interface FullHttpResponse extends HttpResponse, FullHttpMessage {

同样,它结合了HttpResponse、FullHttpMessage

默认实现为DefaultFullHttpResponse

*

2.Netty中客户端、服务端的编解码器

作为服务端而言:

主要工作就是接收客户端请求,将客户端的请求内容解码;发送响应给客户端,并将发送内容编码

所以,服务端需要两个编解码器

* HttpRequestDecoder(将请求内容解码)

* HttpResponseEncoder(将响应内容编码)

作为客户端而言:

主要工作就是发送请求给服务端,并将发送内容编码;接收服务端响应,并将接收内容解码;

所以,客户端需要两个编解码器

* HttpResponseDecoder(将响应内容解码)

* HttpRequestEncoder(将请求内容编码)

3.Server端编写Handler类处理客户请求

创建Handler,命名为HttpHandler,具体内容如下:

import com.alibaba.fastjson.JSONObject;import io.netty.buffer.ByteBuf;import io.netty.buffer.Unpooled;import io.netty.channel.ChannelFutureListener;import io.netty.channel.ChannelHandlerContext;import io.netty.channel.ChannelInboundHandlerAdapter;import io.netty.handler.codec.http.DefaultFullHttpResponse;import io.netty.handler.codec.http.FullHttpRequest;import io.netty.handler.codec.http.FullHttpResponse;import io.netty.handler.codec.http.HttpHeaderNames;import io.netty.handler.codec.http.HttpHeaders;import io.netty.handler.codec.http.HttpMethod;import io.netty.handler.codec.http.HttpResponseStatus;import io.netty.handler.codec.http.HttpVersion;import io.netty.util.CharsetUtil;import lombok.Data;public class HttpHandler extends ChannelInboundHandlerAdapter {@Overridepublic void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception {if(msg instanceof FullHttpRequest){FullHttpRequest req = (FullHttpRequest)msg;try {// 1.获取URIString uri = req.uri();// 2.获取请求体ByteBuf buf = req.content();String content = buf.toString(CharsetUtil.UTF_8);// 3.获取请求方法HttpMethod method = req.method();// 4.获取请求头HttpHeaders headers = req.headers();// 5.根据method,确定不同的逻辑if(method.equals(HttpMethod.GET)){// TODO }if(method.equals(HttpMethod.POST)){// 接收用户输入,并将输入返回给用户Content c = new Content();c.setUri(uri);c.setContent(content);response(ctx, c);}if(method.equals(HttpMethod.PUT)){// TODO }if(method.equals(HttpMethod.DELETE)){// TODO }} finally {req.release();}}}private void response(ChannelHandlerContext ctx, Content c) {// 1.设置响应FullHttpResponse resp = new DefaultFullHttpResponse(HttpVersion.HTTP_1_1,HttpResponseStatus.OK, Unpooled.copiedBuffer(JSONObject.toJSONString(c), CharsetUtil.UTF_8));resp.headers().set(HttpHeaderNames.CONTENT_TYPE, "text/html; charset=UTF-8");// 2.发送// 注意必须在使用完之后,close channelctx.writeAndFlush(resp).addListener(ChannelFutureListener.CLOSE);}}@Dataclass Content{String uri;String content;}

注意:

在处理过程中,把msg转换为FullHttpRequest,可以获取关于请求的所有内容;

在发送响应时必须要监听CLOSE

*

4.测试

启动Server类使用客户端发送请求

在这里,笔者不单独编写Netty客户端代码,直接使用PostMan来充当客户端发送请求,具体如下:

Netty4之怎么实现HTTP请求、响应

发送一个post请求,并填写body,点击send,可以看到响应如下所示:

Netty4之怎么实现HTTP请求、响应

读到这里,这篇“Netty4之怎么实现HTTP请求、响应”文章已经介绍完毕,想要掌握这篇文章的知识点还需要大家自己动手实践使用过才能领会,如果想了解更多相关内容的文章,欢迎关注编程网行业资讯频道。

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯