加入收藏 | 设为首页 | 会员中心 | 我要投稿 河北网 (https://www.hebeiwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 建站 > 正文

Netty 实战:如何编写一个麻小俱全的 Web 框架

发布时间:2019-02-20 09:12:16 所属栏目:建站 来源:逅弈
导读:进修 Netty 也有一段时刻了,为了更好的把握 Netty,我手动造了个轮子,一个基于 Netty 的 web 框架:redant,中文叫红火蚁。建设这个项目标目标首要是进修行使 Netty,俗话说不要等闲的造轮子,可是通过造轮子我们可以学到许多优越开源框架的计划思绪,编

写 Cookie 和读 Cookie 面对着一样的题目,就是写的时辰必要借助于 HttpResponse,将 Cookie 写入 HttpResponse 的 Header 中去,可是用户执行写 Cookie 操纵的时辰,基础就不体谅 HttpResponse,乃至他在写的时辰,还没有 HttpResponse。

这时的做法也是将必要写到 HttpResponse 中的 Cookie 生涯在 ThreadLocal 中,然后在最后通过 channel 写相应之前,将 Cookie 拿出来塞到 HttpResponse 中去即可,如下列代码所示:

  1. @Override 
  2. public void setCookie(Cookie cookie) { 
  3.     TemporaryDataHolder.storeCookie(cookie); 
  4.  
  5. /** 
  6.  * 相应动静 
  7.  */ 
  8. private void writeResponse(){ 
  9.     boolean close = isClose(); 
  10.     response.headers().add(HttpHeaderNames.CONTENT_LENGTH, String.valueOf(response.content().readableBytes())); 
  11.     // 从ThreadLocal中取出待写入的cookie 
  12.     Set<Cookie> cookies = TemporaryDataHolder.loadCookies(); 
  13.     if(!CollectionUtil.isEmpty(cookies)){ 
  14.         for(Cookie cookie : cookies){ 
  15.             // 将cookie写入response中 
  16.             response.headers().add(HttpHeaderNames.SET_COOKIE, ServerCookieEncoder.STRICT.encode(cookie)); 
  17.         } 
  18.     } 
  19.     ChannelFuture future = channel.write(response); 
  20.     if(close){ 
  21.         future.addListener(ChannelFutureListener.CLOSE); 
  22.     } 

拦截器

拦截器是一个框架很重要的成果,通过拦截器可以实现一些通用的事变,好比登录鉴权,事宜处理赏罚等等。记得在 Servlet 的年月,拦截器长短常重要的一个成果,根基上每个体系城市在 web.xml 中设置许多的拦截器。

拦截器的根基头脑是,通过陆续串的类去执行某个拦截的操纵,一旦某个类中的拦截操纵返回了 false,那就终止后头的全部流程,直接返回。

这种场景很是适实用责任链模式去实现,而 Netty 的 pipeline 自己就是一个责任链模式的应用,以是我们就可以通过 pipeline 来实现我们的拦截器。这里我界说了两种范例的拦截器:前置拦截器和后置拦截器。

前置拦截器是在处理赏罚用户的营业逻辑之前的一个拦截操纵,假如该操纵返回了 false 则直接 return,不会继承执行用户的营业逻辑。

后置拦截器就有点差异了,后置拦截器首要就是处理赏罚一些后续的操纵,由于后置拦截器再跟前置拦截器一样,当操纵返回了 false 直接 return 的话,已经没故意义了,由于营业逻辑已经执行完了。

领略清晰了详细的逻辑之后,实现起来就很简朴了,如下列代码所示:

前置拦截器

Netty 拭魅战:怎样编写一个麻小俱全的 Web 框架

后置拦截器

Netty 拭魅战:怎样编写一个麻小俱全的 Web 框架

(编辑:河北网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读