基于Nettty打造自己的MVC服务器
最近开始折腾Netty,体验下NIO编程。既然学习了,就要做点东西出来,要不然不容易掌握学到的东西。在Netty的官方demo上都有各种case的sample,打造Http服务器的核心代码就是从Sample中获取的。
所有代码已上传到github上,地址:点我跳转
Netty的基本概念就不赘述了,主要说明下如何使用。
主题:基于Netty打造自己的HttpMVC服务器
主要思路:基于SpringMVC框架实现原理进行代码分层,主要组件有:HandlerRequestAdapter,HandlerRequestMapping,ViewResolver。
- HandlerRequestAdapter 请求处理
- HandlerRequestMapping 请求url映射,获取到HandlerRequestAdapter
- ViewResolver 视图解析器,通过HandlerRequestAdapter 返回的ModelAndView渲染页面
项目执行流程简要说明:
- 调用NettyHttpServer.main方法,启动Netty服务
- 客户访问url后,Netty回调HttpServerHandler.channelRead0
- 通过url,到HandlerRequestMapping找到对应的HandlerRequestAdapter
- 调用HandlerRequestAdapter.handle方法,进行业务处理后。返回ModelAndView
- ViewResolver 通过ModelAndView解析页面地址,获取到指定文件后返回页面
已实现功能:
- 静态文件访问
- 表单提交处理
- 重定向
至于其他功能,比如模板,session,请求转发等常用web服务器功能,学习到的时候再添加。
uml图(好久没用过uml了,有不对的地方欢迎指正)
项目启动后,访问localhost:8080:
点击表单提交后,后台会输出参数信息,页面跳转到登录结果页面
服务器基本的功能实现了,就需要研究下 HttpServerCodec,HttpObjectAggregator,ChunkedWriteHandler三个类实现原理,等后面有时间在研究。
基于Nettty打造自己的MVC服务器的更多相关文章
- 【转载】打造基于 Centos 7.X 的 spice 服务器
[转载]打造基于 Centos 7.X 的 spice 服务器 https://segmentfault.com/a/1190000011991047
- MVC系列——MVC源码学习:打造自己的MVC框架(四:了解神奇的视图引擎)
前言:通过之前的三篇介绍,我们基本上完成了从请求发出到路由匹配.再到控制器的激活,再到Action的执行这些个过程.今天还是趁热打铁,将我们的View也来完善下,也让整个系列相对完整,博主不希望烂尾. ...
- 基于Maven的Spring + Spring MVC + Mybatis的环境搭建
基于Maven的Spring + Spring MVC + Mybatis的环境搭建项目开发,先将环境先搭建起来.上次做了一个Spring + Spring MVC + Mybatis + Log4J ...
- 基于C#和Asp.NET MVC开发GPS部标视频监控平台
基于C#和Asp.NET MVC开发GPS部标监控平台 目前整理了基于.NET技术的部标平台开发文章,可以参考: 1.部标Jt808协议模拟终端的设计和开发 2.C#版的808GPS服务器开发-> ...
- 智能家居巨头 Aqara 基于 KubeSphere 打造物联网微服务平台
背景 从传统运维到容器化的 Docker Swarm 编排,从 Docker Swarm 转向 Kubernetes,然后在 Kubernetes 运行 SpringCloud 微服务全家桶,到最终拥 ...
- MVC系列——MVC源码学习:打造自己的MVC框架(三:自定义路由规则)
前言:上篇介绍了下自己的MVC框架前两个版本,经过两天的整理,版本三基本已经完成,今天还是发出来供大家参考和学习.虽然微软的Routing功能已经非常强大,完全没有必要再“重复造轮子”了,但博主还是觉 ...
- MVC系列——MVC源码学习:打造自己的MVC框架(二:附源码)
前言:上篇介绍了下 MVC5 的核心原理,整篇文章比较偏理论,所以相对比较枯燥.今天就来根据上篇的理论一步一步进行实践,通过自己写的一个简易MVC框架逐步理解,相信通过这一篇的实践,你会对MVC有一个 ...
- MVC系列——MVC源码学习:打造自己的MVC框架(一:核心原理)
前言:最近一段时间在学习MVC源码,说实话,研读源码真是一个痛苦的过程,好多晦涩的语法搞得人晕晕乎乎.这两天算是理解了一小部分,这里先记录下来,也给需要的园友一个参考,奈何博主技术有限,如有理解不妥之 ...
- 开源倾情奉献:基于.NET打造IP智能网络视频监控系统(一)开放源代码
本文为 Dennis Gao 原创技术文章,发表于博客园博客,未经作者本人允许禁止任何形式的转载. 开源倾情奉献系列链接 开源倾情奉献:基于.NET打造IP智能网络视频监控系统(一)开放源代码 开源倾 ...
随机推荐
- C++养成好的代码习惯
[C++小技巧] -------------------------------------------------------------#ifdef _DEBUG imwrite(" ...
- 改善 Python 程序的 91 个建议
1.引论 建议1:理解Pythonic概念—-详见Python中的<Python之禅> 建议2:编写Pythonic代码 避免不规范代码,比如只用大小写区分变量.使用容易混淆的变量名.害怕 ...
- Java封装 概述
封装:是指隐藏对象的属性和实现细节,仅对外提供公共访问方式.好处:隐藏实现细节,提供公共的访问方式提高了代码的复用性提高安全性 封装原则:将不需要对外提供的内容都隐藏起来把属性隐藏,提供公共方法对其访 ...
- Centos8安装docker-compose
一.首先检查是否有pip 执行命令:piv -V 二.更新pip 执行命令:pip install --upgrade pip 三.下载 setuptools 执行命令 :pip install - ...
- php的一个有意思的命令:-S
php -S localhost:8188 /web 会启动一个监控IP:PORT 的http服务,算是简易的web服务器吧.基本上,实现了PHP+MySQL就可以建立一个简易测试网站的环境.
- ubuntu安装Python3并与Python2自由切换
一.配置ssh链接安装openssh-server sudo apt-get install openssh-server 二.安装Python3及pip sudo apt-get install p ...
- phpspider框架的使用
手册:https://doc.phpspider.org/configs-members.html 参考:https://www.jianshu.com/p/01052508ea7c 不多说,代码贴上 ...
- VideoView--简单的设置全屏幕播放
我说的最主要的是要在布局哪里设置一下,如: <com.example.mypalyer.fullScreen android:id="@+id/videoView1& ...
- php class 访问控制
属性(attribute ) 必须声明访问控制类型 类型: public 公用 protected 受保护的 private 私有的 public 类型的属性 可以在外部访问 protected 及 ...
- SESSION劫持
服务端和客户端之间是通过session(会话)来连接沟通.当客户端的浏览器连接到服务器后,服务器就会建立一个该用户的session.每个用户的session都是独立的,并且由服务器来维护.每个用户的s ...