對Spring MVC初學的認識 編輯

在經過對SSH框架的學習,想必大家也對這樣的框架有了一個新的認識,但回頭想一想,無論我們做多大或者是多小的項目的時候,前面的操作是不是麻煩而繁瑣,但是有必須每一步都不能少,是吧,呵呵

那遇到這樣的問題我們的前輩是怎麼樣去解決的呢,其實就是今天的主題了 -- Spring MVC

那這樣的一個東西到底是什麼呢? 我們先姑且這樣叫吧,呵呵,希望大家不要介意,相信大家學習完之後,對它會有全新的認識,而這種認識,我希望是發自每個人內心對它最真實的理解,好了,廢話不多說,開始吧!

首先是要一定說明的是,這倒是說明是什麼?對吧

Spring MVC 是SpringFrameWork的後續產品,並且已經融入到Spring Web Flow中

同時Spring MVC 分離了控制器,模型對象,分派器(其實我不知道這是什麼)以及處理程序對象的角色,這種分離讓它們更容易進行定製.

說了這些很官方的話,我都有點暈了,呵呵,先上一個原理流程圖吧,相信會比較直觀!

 

Spring MVC 原理圖

 

Spring MVC 對應原理流程步驟:

 

1.Web客戶端 --> DispatcherServlet  用戶發送一個請求到,首先到DispatcherServlet中(先交給前端控制器,進行全局的流程控制)

 

2.DispatcherServlet --> HandlerMapping 解析用戶在前臺提交的請求,並按照我們的要求分配到指定的Controller(相當於struts2中的action)

 

3.DispatcherServlet --> Controller 進入指定的Controller對象,執行裏面的方法,返回需要的字符串(ModelAndView),在Controller裏面需要對bean進行操作,也就是會和Model進行交互

 

4.DispatcherServlet --> ViewResolver 解析從Controller中返回的字符串,並轉換爲有效的JSP路徑

 

5.DispatcherServlet --> JSP 將轉換好的JSP路徑,指定到特定的頁面

 

6.JSP --> Web客戶端 將某一個特定的頁面顯示在客戶端界面

 

好了,以上就是Spring MVC的流程,是不是有了一定的認識了,不急,後面還有呢...

 

 

 

有了基本的認識, 那就開始編碼吧!(我是用的是Springframework-3.2.8)

 

大家都知道的,打開編譯器,準備開始開發一個項目的時候,第一步就是新建項目。哈哈!

 

是不是會有一點無語,呵呵,不是別的,只是活躍一下氣氛,原因你懂的。。

 

好吧,這一步就不列入編碼步驟裏了吧,下面正式開始!

 

第一步:添加架包

 

   

是不是覺得架包很少啊,沒錯,這就是Spring MVC的特點,繼續讓它顛覆你的想法吧

 

 

第二步:一定是web.xml文件了

 

    

 

   這裏就是上面提到的DispatcherServlet -- 前端控制器

 

   後面的"*.do"就是用來攔截頁面用戶的請求,這裏規定凡是以 .do 結尾的請求都會命中,當然這個可以自己定義,需要說明的是,不管自己定義的是什麼,一定要遵守,呵呵,是不是突然覺得好有道理!

 

 

 

第三步:在WEB-INF中配置 mvc-servlet.xml文件(要求名稱必須以Web.xml中的<servlet-name>節點中的名字開頭+servlet.xml)算了,直接上圖吧:

 

 

Java代碼
  1. <span style="font-family:Courier New;color:#6600CC;"><</span><span style="color:#6600CC;">?xml version="1.0" encoding="UTF-8"?>    
  2. <span style="font-family:Courier New;"><</span>beans xmlns="http://www.springframework.org/schema/beans"    
  3.     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"    
  4.     xmlns:context="http://www.springframework.org/schema/context"    
  5.     xmlns:mvc="http://www.springframework.org/schema/mvc"    
  6.     xsi:schemaLocation="    
  7.         http://www.springframework.org/schema/beans     
  8.         http://www.springframework.org/schema/beans/spring-beans-3.2.xsd    
  9.         http://www.springframework.org/schema/context     
  10.         http://www.springframework.org/schema/context/spring-context-3.2.xsd    
  11.         http://www.springframework.org/schema/mvc     
  12.         http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd    
  13.         ">    
  14.     
  15.     <bean id="parameterMethodNameResolver"    
  16.         class="org.springframework.web.servlet.mvc.multiaction.ParameterMethodNameResolver">    
  17.         <property name="paramName" value="action"></property>    
  18.     </bean>    
  19.     
  20.     <bean id="user" class="com.mvc.controller.UserController">    
  21.         <property name="methodNameResolver" ref="parameterMethodNameResolver"></property>    
  22.     </bean>    
  23.     
  24.     <span style="color:#999999;"><!-- 解析地址欄上的請求 --></span>    
  25.     <bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">    
  26.         <property name="mappings">    
  27.             <props>    
  28.                 <!-- key對應的url-pattern,值是控制器的bean id -->    
  29.                 <prop key="login.do">user</prop>    
  30.             </props>    
  31.         </property>    
  32.     </bean></span>    
  33. <span style="color:#999999;">    
  34.     </span><span style="color:#6600CC;"><span style="color:#999999;"><!-- 個人表示不建議使用 -->    
  35.     <!-- 在有需要進行controller跳轉的時候,就不能使用這個方法 -->    
  36.     <!-- 視圖解析器,在轉發前要到模型進行處理 (就是智能的在返回的字符串轉換成爲頁面) --></span>    
  37.     <bean class="org.springframework.web.servlet.view.UrlBasedViewResolver">    
  38.         <property name="viewClass"    
  39.             value="org.springframework.web.servlet.view.JstlView"></property>    
  40.         <property name="prefix" value="/" />    
  41.         <property name="suffix" value=".jsp" />    
  42.     </bean>    
  43. </beans></span>    
 

需要解釋:如果某一個Controller中需要調用不用的方法時,就必須指定定義方法的名字,例如請求的路徑爲:
    user.do?action=userLogin
(1).需要指定定義方法的名字:<property name="paramName" value="action" />
    定義之後,程序就知道在action之後的就是需要進入的某一個方法

   (如果是調用同一個方法,當然就不需要定義這個,但是只要有一個Controller需要不同的方法,就需要定義)

 

(2).解析之後Controller路徑,這裏用到了Spring的控制反轉(IOC),其他就不同多說
        <property name="methodNameResolver" ref="parameterMethodNameResolver" />
        給Controller定義方法名解析器
        2.1. 可以應用已經定義好的解析器(見上)
        2.2. 可以爲每一個Bean單獨定義解析器   

 

(3).解析所有來自頁面中命中的請求,並分配到不同的Controller中

 

(4).在配置文件中,如果使用最後一個bean裏面的內容,如果需要返回到"index.jsp"頁面時,就可以直接返回"index"就OK了,這個配置文件就是爲我們返回的字符串,前後自動加上"/"和".jsp".

 

一旦有了這個配置之後,就不能在Controller中進行對Controller的跳轉,因爲它會所有的返回字符串前後都加上"/"和".jsp",而這明顯不是我們所需要的,所以一般不會使用這種方法!

 

 

 

  到這裏了,需要靜一靜,好好理一下思路.

 

 

 

第四步:定義一個UserController,並繼承MultiactionController類

 

 

Java代碼
  1. <span style="font-family:Courier New;color:#6600CC;">public class UserController extends MultiActionController {    
  2.         
  3.     public ModelAndView login(HttpServletRequest req,    
  4.             HttpServletResponse resp, User user) throws Exception{    
  5.                     
  6.         String result = "";    
  7.         if(user.getName().equals("jack")){    
  8.             req.getSession().setAttribute("user", user);    
  9.             result = "login.do?action=login";//可進行Controller之間的跳轉    
  10.                         result = "index.jsp?age=22";//可傳值到頁面上    
  11.         }else{    
  12.             result = "login.jsp";    
  13.         }    
  14.         return new ModelAndView(result);    
  15.     }    
  16. }</span>    
 

(1).上面的代碼中繼承的是 MultiactionController類,意味着可以用來定義多個不同的方法,以請求中action後面的名字來定

    當然還可以直接完成Controller接口,意味着當前整個Controller 中,只有一個方法,且必須給定

 

(2).在方法中的參數默認情況下是兩個,分別是HttpServletRequset和HttpServletResponse對象,當然在此之外,還可以定義一個對象類型的參數,主要是簡化表單提交多個參數(目前只瞭解到這裏)
寫到這裏,就差不多了,不出意外的話,你應該可以完成一個比較簡單的Spring MVC框架的小項目了

 

最後,謝謝你的信賴,看完了整篇內容,如遇到有問題的地方,望反饋給我,也希望共同進步!

拜拜~~~

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章