加入收藏 | 设为首页 | 会员中心 | 我要投稿 常州站长网 (https://www.0519zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 运营中心 > 建站资源 > 优化 > 正文

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

发布时间:2019-02-21 11:27:43 所属栏目:优化 来源:逅弈
导读:副标题#e# 学习 Netty 也有一段时间了,为了更好的掌握 Netty,我手动造了个轮子,一个基于 Netty 的 web 框架:redant,中文叫红火蚁。创建这个项目的目的主要是学习使用 Netty,俗话说不要轻易的造轮子,但是通过造轮子我们可以学到很多优秀开源框架的设
副标题[/!--empirenews.page--]

学习 Netty 也有一段时间了,为了更好的掌握 Netty,我手动造了个轮子,一个基于 Netty 的 web 框架:redant,中文叫红火蚁。创建这个项目的目的主要是学习使用 Netty,俗话说不要轻易的造轮子,但是通过造轮子我们可以学到很多优秀开源框架的设计思路,编写优美的代码,更好的提升自己。

PS:项目地址:https://github.com/all4you/redant

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

快速启动

Redant 是一个基于 Netty 的 Web 容器,类似 Tomcat 和 WebLogic 等容器

只需要启动一个 Server,默认的实现类是 NettyHttpServer 就能快速启动一个 web 容器了,如下所示:

  1. public final class ServerBootstrap { 
  2.     public static void main(String[] args) { 
  3.         Server nettyServer = new NettyHttpServer(); 
  4.         // 各种初始化工作 
  5.         nettyServer.preStart(); 
  6.         // 启动服务器 
  7.         nettyServer.start(); 
  8.     } 

我们可以直接启动 redant-example 模块中的 ServerBootstrap 类,因为 redant-example 中有很多示例的 Controller,我们直接运行 example 中的 ServerBootstrap,启动后你会看到如下的日志信息:

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

在 redant-example 模块中,内置了以下几个默认的路由:

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

启动成功后,,可以访问 http://127.0.0.1:8888/ 查看效果,如下图所示:

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

如果你可以看到 "Welcome to redant!" 这样的消息,那就说明你启动成功了。

自定义路由

框架实现了自定义路由,通过 @Controller @Mapping 注解就可以唯一确定一个自定义路由。如下列的 UserController 所示:

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

和 Spring 的使用方式一样,访问 /user/list 来看下效果,如下图所示:

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

结果渲染

目前支持 json、html、xml、text 等类型的结果渲染,用户只需要在 方法的 @Mapping 注解上通过 renderType 来指定具体的渲染类型即可,如果不指定的话,默认以 json 类型范围。

如下图所示,首页就是通过指定 renderType 为 html 来返回一个 html 页面的:

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

IOC容器

从 UserController 的代码中,我们看到 userServerce 对象是通过 @Autowired 注解自动注入的,这个功能是任何一个 IOC 容器基本的能力,下面我们来看看如何实现一个简单的 IOC 容器。

首先定义一个 BeanContext 接口,如下所示:

  1. public interface BeanContext { 
  2.     /** 
  3.      * 获得Bean 
  4.      * @param name Bean的名称 
  5.      * @return Bean 
  6.      */ 
  7.     Object getBean(String name); 
  8.     /** 
  9.      * 获得Bean 
  10.      * @param name Bean的名称 
  11.      * @param clazz Bean的类 
  12.      * @param <T> 泛型 
  13.      * @return Bean 
  14.      */ 
  15.     <T> T getBean(String name,Class<T> clazz); 

(编辑:常州站长网)

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

热点阅读