你們一塊兒寫mvc(一)

關於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

 
 
    1. <?xml version="1.0" encoding="UTF-8"?>  
    2. <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">  
    3.   
    4.     <display-name>Struts Blank</display-name>  
    5.   
    6.     <filter>  
    7.         <!-- 配置Struts2核心Filter的名字 -->  
    8.         <filter-name>struts2</filter-name>  
    9.         <!-- 配置Struts2核心Filter的實現類 -->  
    10.         <filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>  
    11.           <init-param>  
    12.               <!-- 配置Struts2框架默認加載的Action包結構,能夠沒有。 -->  
    13.               <param-name>actionPackages</param-name>  
    14.               <param-value>org.apache.struts2.showcase.person</param-value>  
    15.           </init-param>  
    16.           <!-- 配置Struts2框架的配置提供者類 -->  
    17.           <init-param>  
    18.               <param-name>configProviders</param-name>  
    19.               <param-value>lee.MyConfigurationProvider</param-value>  
    20.           </init-param>  
    21.     </filter>  
    22.     <!-- 配置Filter攔截的URL -->  
    23.     <filter-mapping>  
    24.         <!-- 配置Struts2的核心FilterDispatcher攔截全部用戶請求 -->  
    25.         <filter-name>struts2</filter-name>  
    26.         <url-pattern>/*</url-pattern>  
    27.     </filter-mapping>  
    28.   
    29.     <welcome-file-list>  
    30.         <welcome-file>index.html</welcome-file>  
    31.     </welcome-file-list>  
    32. </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框架中的應用。

其實原本想錄個視頻跟你們講解的,又怕沒多少人看,到時候就白費力氣了。因此就寫博客吧,當一個本身的積累。

 

若是有錯誤,請你們指出,謝謝!

相關文章
相關標籤/搜索