日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > java >内容正文

java

java web项目_[适合初中级Java程序员修炼手册从0搭建整个Web项目](二)

發(fā)布時間:2023/12/10 java 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java web项目_[适合初中级Java程序员修炼手册从0搭建整个Web项目](二) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

前言

文本已收錄至我的GitHub倉庫,歡迎Star:github.com/bin392328206種一棵樹最好的時間是十年前,其次是現(xiàn)在

six-finger-web

一個Web后端框架的輪子從處理Http請求【基于Netty的請求級Web服務(wù)器】 到mvc【接口封裝轉(zhuǎn)發(fā))】,再到ioc【依賴注入】,aop【切面】,再到 rpc【遠程過程調(diào)用】最后到orm【數(shù)據(jù)庫操作】全部自己擼一個(簡易)的輪子。

github

為啥要寫這個輪子

其實是這樣的,小六六自己平時呢?有時候喜歡看看人家的源碼比如Spring,但是小六六的水平可能不怎么樣,每次看都看得暈頭轉(zhuǎn)向,然后就感覺里面的細(xì)節(jié)太難了,然后我就只能觀其總體的思想,然后我就想我如果可以根據(jù)各位前輩的一些思考,自己擼一個簡單的輪子出來,那我后面去理解作者的思想是不是簡單點呢?于是呢 six-finger-web就面世了,它其實就是我的一個學(xué)習(xí)過程,然后我把它開源出來,希望能幫助那些對于學(xué)習(xí)源碼有困難的同學(xué)。還有就是可以鍛煉一下自己的編碼能力,因為平時我們總是crud用的Java api都是那些,久而久之,很多框架類的api我們根本就不熟練了,所以借此機會,鍛煉一下。

特點

  • 內(nèi)置由 Netty 編寫 HTTP 服務(wù)器,無需額外依賴 Tomcat 之類的 web 服務(wù)(剛好小六六把Netty系列寫完,順便用下)
  • 代碼簡單易懂(小六六自己寫不出框架大佬那種高類聚,低耦合的代碼),能力稍微強一點看代碼就能懂,弱點的也沒關(guān)系,小六六有配套的從0搭建教程。
  • 支持MVC相關(guān)的注解確保和SpringMVC的用法類似
  • 支持Spring IOC 和Aop相關(guān)功能
  • 支持類似于Mybatis相關(guān)功能
  • 支持類似于Dubbo的rpc相關(guān)功能
  • 對于數(shù)據(jù)返回,只支持Json格式

絮叨

此教程只適合初中級水平,因為作者本身水平不高,不喜勿噴,今天是文章的第二篇,實現(xiàn)一個簡單的SpringMVC,參考的是Guide哥的jsoncat。 好了,下面我給大家來一一走一遍搭建流程

這邊建議一邊下載源碼,一邊來看,如果覺得有問題的話

總結(jié)的包結(jié)構(gòu)

首先我們來看看寫完了MVC之后的包結(jié)構(gòu),以至于大家心里有數(shù)

pom的修改

首先第一步,我先把pom文件新增的地方給大家看看

引入他們一個是反射,因為寫輪子,反射肯定用的多,還有一個就是json轉(zhuǎn)換工具

具體MVC的實現(xiàn)

這邊我先把整體的思想給大家捋捋,這個只是一個簡單的實現(xiàn),還有很多的細(xì)節(jié)沒有完成

首先,我們看看我們寫業(yè)務(wù)是個怎么樣的樣子,如下圖

好,這個就是我們最終要做到的效果,對吧,那我們?yōu)g覽器請求的時候長什么樣呢?

它長這樣,那其實久很清晰了,SpringMVC要實現(xiàn)的就是不同請求走不同的方法嘛,這就是核心思想嘛??偟膩碚f其實就三個部分

  • 一個是原有的server的改造
  • 一個是springmvc相關(guān)容器組件的初始化
  • 一個是http請求的請求流程處理

下面,我一一來講解

改造Netty服務(wù)器的請求部分

這邊我解題然后把找類 方法的流程給大家,大家自己去看源碼

HttpRequestHandler->channelRead0

其實服務(wù)器這邊需要改造的地方也不多,就是通過請求,來找到不同的處理器,然后再去處理我們的業(yè)務(wù),然后根據(jù)業(yè)務(wù)的返回值,然后我們再去封裝一些成功或者失敗,然后這邊來看看server包下面的幾個類,具體的代碼,大家就自己去看了,每個類基本上有注釋

springmvc相關(guān)組件的初始化

首先我們再來看看我們的啟動類這邊, 類 ApplicationServer

然后我們就可以往下跟代碼了,其實大家看源碼也是這樣,但是源碼的話細(xì)節(jié)畢竟多,所以難懂點

類 DispatcherMethodMapper->loadRoutes

這個類的東西還比較多,基本上很多地方我寫了注釋,如果不懂的可以私下請教,然后我們大致來分析一下吧!

  • 第一個肯定是加載包的掃描路徑,因為我這個是基于注解的,我就在配置文件中配置掃描路徑
  • 之后就是遍歷里面的.class文件,然后找到類上面的注解,如果有RestController 說明他這個類是用來處理請求的,然后遍歷類中的方法,然后去一個個分析 PostMapping RequestMapping GetMapping 反正也就是if else 然后把這些方法,把請求的url封裝到一個springmvc的容器中,等請求來的時候,就去容器中匹配,然后找到對應(yīng)的方法,再填充對應(yīng)的參數(shù),就可以執(zhí)行方法了,具體的呢?建議大家跟著源碼來看哈

之后便是我們的主流程了,我們來看看主題流程怎么走的

還是在服務(wù)端那個類那跟起 HttpRequestHandler->channelRead0

我們來看這個方法中的

RequestHandlerFactory->create

其實就是根據(jù)不同的請求方式,找到對應(yīng)的處理類

然后我們接下去看 HttpRequestHandler->channelRead0

然后大家看,這個方法,才是我們的重頭戲,也就是我們處理的核心了,我們往下跟 RequestHandler 發(fā)現(xiàn)是一個接口

假設(shè)我們是Get請求找到他的實現(xiàn)類

GetRequestHandler->handle 這個就是我們真正要看的邏輯所在了,我們往下看

封裝請求參數(shù)和路徑參數(shù)

DispatcherMethodMapper->getMethodDetail

MethodDetail->build

這個就是核心填充的方法了,當(dāng)填充完成之后我們會獲得一個對象,這個對象就比較厲害了,他包含,當(dāng)前要執(zhí)行的方法 請求參數(shù)等,如下圖 GetRequestHandler->handle

接著往下

我們來看下,里面的核心方法 ParameterResolver->resolve

根據(jù)不同的方式去填充,然后填充完成之后呢

通過反射去拿到當(dāng)前要執(zhí)行的對象,然后再通過反射去執(zhí)行對應(yīng)的方法,至此mvc的所有流程走完了

我們看看請求的結(jié)果

要執(zhí)行的RestController

請求 http://localhost:8081/user/小六六寫MVC

結(jié)尾

好了,我們把MVC的小小流程寫完了,代碼也上傳了,希望大家好好學(xué)習(xí),一起加油,后面就要擼ioc 和aop了。

日常求贊

好了各位,以上就是這篇文章的全部內(nèi)容了,能看到這里的人呀,都是真粉。

創(chuàng)作不易,各位的支持和認(rèn)可,就是我創(chuàng)作的最大動力,我們下篇文章

六脈神劍 | 文 【原創(chuàng)】如果本篇博客有任何錯誤,請批評指教,不勝感激 !

總結(jié)

以上是生活随笔為你收集整理的java web项目_[适合初中级Java程序员修炼手册从0搭建整个Web项目](二)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。