關於java的mvc框架層出不窮,可能你們都會用,可是具體的原理知道不知道呢。因此我想寫一個寫一個簡單mvc的系列博客,主要面向想了解這些原理的。html
其實所謂的mvc框架,基本都是一個原理,就是配置一個filter或者servlet來攔截全部的請求,而後轉發請求。java
這個圖就能說明mvc的工做模式web
1.首先頁面發送一個post請求,請求到某一個action。apache
2.而後由servlet或filter進行攔截,攔截固定後綴的請求,好比*.action,這裏好比咱們發送的請求是UserAction.action,servlet或filter就會攔截下來,而後在servlet裏進行封裝,轉發到某一個action裏。處理完畢後,再經過攔截器進行轉發,回到配置好的頁面。mvc
下面是一個struts2的配置文件(網上找的)。app
- <?xml version="1.0" encoding="UTF-8"?>
- <web-app id="WebApp_9" version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
-
- <display-name>Struts Blank</display-name>
-
- <filter>
- <!-- 配置Struts2核心Filter的名字 -->
- <filter-name>struts2</filter-name>
- <!-- 配置Struts2核心Filter的實現類 -->
- <filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>
- <init-param>
- <!-- 配置Struts2框架默認加載的Action包結構,能夠沒有。 -->
- <param-name>actionPackages</param-name>
- <param-value>org.apache.struts2.showcase.person</param-value>
- </init-param>
- <!-- 配置Struts2框架的配置提供者類 -->
- <init-param>
- <param-name>configProviders</param-name>
- <param-value>lee.MyConfigurationProvider</param-value>
- </init-param>
- </filter>
- <!-- 配置Filter攔截的URL -->
- <filter-mapping>
- <!-- 配置Struts2的核心FilterDispatcher攔截全部用戶請求 -->
- <filter-name>struts2</filter-name>
- <url-pattern>/*</url-pattern>
- </filter-mapping>
-
- <welcome-file-list>
- <welcome-file>index.html</welcome-file>
- </welcome-file-list>
- </web-app>
這裏的org.apache.struts2.dispatcher.FilterDispatcher就是圖中第2步中的攔截器。因爲我沒看源碼,因此就大概說一下這個攔截器在中間都作了什麼動做。框架
1.攔截從頁面發來的請求。假設這裏的請求是 UserAction.actionide
2.而後攔截器會讀取框架配置文件,找到UserAction這個類post
3.找到這個類之後,利用java的反射原理,封裝請求發來的參數url
4.把封裝好的參數轉發給UserAction
5.UserAction執行其中的邏輯,返回一個值,根據這個值,由攔截器轉發執行完畢的結果,跳到制定頁面。
這大概就是一個mvc框架的流程。可見並不複雜,因此我就打算寫一個簡單的框架,來詳細的帶你們理解mvc。
寫這個mvc主要就是用到了java的反射原理,像第2步中,怎麼找到把請求轉發給哪一個類?第3步中的怎麼把頁面的數據進行封裝?還有第5步中怎麼根據值肯定返回哪一個頁面?
這些基本都是用的java反射原理。
在我寫的這個mvc框架中,我是用的註解配置,因此這裏還設計到自定義註解。固然你也能夠本身定製經過xml來配置你的mvc框架。
基本原理都是相同的。
下一篇文章我將講解一下其中的基礎知識。也就是java反射跟自定義註解以及他們在mvc框架中的應用。
其實原本想錄個視頻跟你們講解的,又怕沒多少人看,到時候就白費力氣了。因此就寫博客吧,當一個本身的積累。
若是有錯誤,請你們指出,謝謝!