大家一起寫mvc(一)


關於java的mvc框架層出不窮,可能大家都會用,但是具體的原理知道不知道呢。所以我想寫一個寫一個簡單mvc的系列博客,主要面向想了解這些原理的。

其實所謂的mvc框架,基本都是一個原理,就是配置一個filter或者servlet來攔截所有的請求,然后轉發請求。

這個圖就能說明mvc的工作模式

1.首先頁面發送一個post請求,請求到某一個action。

2.然后由servlet或filter進行攔截,攔截固定后綴的請求,比如*.action,這里比如我們發送的請求是UserAction.action,servlet或filter就會攔截下來,然后在servlet里進行封裝,轉發到某一個action里。處理完畢后,再通過攔截器進行轉發,回到配置好的頁面。

下面是一個struts2的配置文件(網上找的)。

 
         
    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.action

2.然后攔截器會讀取框架配置文件,找到UserAction這個類

3.找到這個類以后,利用java的反射原理,封裝請求發來的參數

4.把封裝好的參數轉發給UserAction

5.UserAction執行其中的邏輯,返回一個值,根據這個值,由攔截器轉發執行完畢的結果,跳到制定頁面。

這大概就是一個mvc框架的流程。可見並不復雜,所以我就打算寫一個簡單的框架,來詳細的帶大家理解mvc。

寫這個mvc主要就是用到了java的反射原理,像第2步中,怎么找到把請求轉發給哪個類?第3步中的怎么把頁面的數據進行封裝?還有第5步中怎么根據值確定返回哪個頁面?

這些基本都是用的java反射原理。

在我寫的這個mvc框架中,我是用的注解配置,所以這里還設計到自定義注解。當然你也可以自己定制通過xml來配置你的mvc框架。

基本原理都是相同的。

下一篇文章我將講解一下其中的基礎知識。也就是java反射跟自定義注解以及他們在mvc框架中的應用。

其實本來想錄個視頻跟大家講解的,又怕沒多少人看,到時候就白費力氣了。所以就寫博客吧,當一個自己的積累。

 

如果有錯誤,請大家指出,謝謝!

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM