最近開始折騰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三個類實現原理,等後面有時間在研究。