springmvc是模型-檢視-控制器的縮寫,整個框架是圍繞dispatcherservlet而設計的,dispatcherservlet繼承了httpservlet,是乙個真實的servlet,因此可以在web.xml檔案中生命。另外需要使用url匹配元件制定dispatcherservlet處理的請求,例如:
org.springframework.web.servlet.dispatcherservlet
1/example/*
在上述的配置中,所有以/example開始的請求都會被名為example的dispatcherservlet所處理。
dispatcherservlet在初始化時,springmvc會查詢web應用下web_inf目錄下的[servlet-name]-servlet.xml並建立在此檔案定義的bean。
dispatcherservlet使用了其專有的bean來處理請求和渲染檢視。
dispatcherservlet支援的初始化引數:
contextconfiglocation :傳給上下文contextclass使用的路徑引數,用來說明在**查詢上下文(配置檔案)。支援以,分隔的多個路徑引數。當路徑引數出現重複時,近者優先。
controller實現:
@controller :表明了被註解的類的服務角色——控制器。
uri(統一資源識別符號)模板模式:uri模板是乙個類似於uri的字串,其中包含了乙個或多個變數。當你將這些變數替換掉時,就變回了uri。
可以在方法的輸入引數上使用註解@pathvariable繫結uri的模板引數:
public string findowner(@pathvariable string ownerid, model model)
uri模板「/owners/」指定了引數ownerid,當控制器處理這個請求時,會將uri中相匹配的部分賦值給ownerid變數。例如:當傳入/owners/fred
請求時,owernid
的值就是fred
。
當在map引數使用@pathvarable註解時,map會填充所有uri模板變數。
例如"/spring-web/spring-web-3.0.5.jar"
這樣的uri,該如何拆分成多個部分?
public void handle(@pathvariable string version, @pathvariable string extension) }
當乙個url與多個模板模式匹配時,會設法找出最具體的那乙個路徑。
當乙個 url 與多個模式匹配時,會設法找出最具體的那乙個路徑。
當模式中的 uri 模版變數和萬用字元的數量相對較少,會認為其相對具體。如:/hotels//*
相對/hotels//**
更加合適,因為/hotels//*
只有乙個uri 模版變數和乙個萬用字元,而 hotels//**` 有乙個 uri 模版變數和兩個萬用字元。
當兩個模式中的 uri 模版變數和萬用字元數量相同時,更詳細的那乙個會認為相對適合。如/foo/bar*
比/foo/*
更為詳細。
當兩個模式中變數個數詳細程度相同時,使用更少萬用字元的那乙個會相對具體。
支援的方法引數型別:
1、request或response物件,選擇任意指定的request或response型別,如servletrequest或httpservletrequest。
2、session物件,需要是httpsession型別。
3、inputstream和outputstream
等。可支援的返回值型別:
1、modelandview
2、model
3、map
4、view
5、string
6、void
等。引數繫結:
使用@requestparam將請求引數繫結到方法引數中。
@controller
@sessionattributes("pet")
public class editpetform
// ...
}
@requestparam的引數預設是必須提供的,可以將其指定為可選的,將@requestparam
的reqired
屬性設定false
即可。(如,@requestparam(value="id", required=false)
).
如果將@requestparam
用於map
或multivaluemap
引數,此引數 map 會填充所有的請求引數。
使用@requestbody對映請求物件
@requestbody註解表示將該引數與http請求物件相繫結。
public void handle(@requestbody string body, writer writer) throws ioexception
使用@responsebody對映響應物件
此註解用在方法上,用來表示直接將返回資料寫到 http 響應體裡。
使用@restcontroller建立rest控制器
如果控制器實現rest api,就只會返回json 、xml或其他的自定義**型別。可以在控制器上新增@restcontroller
註解
在方法上使用@modelattribute。@modelattribute
用來將常用屬性填充到模型裡。如:填充下拉框陳述、寵物型別、或命令物件(如 account,用於表示 html 表單資料)。
@modelattribute
方法的兩種使用方式。第一種,在方法裡隱式新增乙個屬性並返回;第二種,方法裡接收model
引數,並將任意個屬性新增到model
中。你可以根據自身需要選擇其中一種使用方式。
在方法引數上使用 @modelattribute:
@modelattribute
註解的方法引數,表示該引數會從模型中檢索。如果該引數不在模型中,此引數會先執行初始化或後新增到模型裡;如果引數存在模型裡,此引數欄位會填充所有匹配其名稱的請求引數。
視**析
viewresolver和view是spring處理檢視的兩個重要的介面,viewresolver提供了檢視名稱和真實檢視之間的對映,view是負責解決某個檢視的技術的請求預處理和請求的後續處理。
springmvc中的所有handler方法都需要解析某乙個邏輯檢視名稱,可以是顯示的,例如返回string,view,modelandview例項。也可以是隱式的。spring中檢視通過邏輯檢視名稱進行定位,並使用視**析器進行解析。
例如,解析jsp檢視技術,可以使用urlbasedviewresolver解析器,此解析器將檢視名稱轉換成為url,並將請求傳遞到
requestdispatcher,以便渲染檢視。
視**析器鏈:spring中提供了多種檢視技術,因此可以定**析器鏈,用於解析不同的檢視。
重定向到檢視
檔案上傳
springmvc配置檔案講解:
在web.xml中配置前端控制器dispatcherservlet。
org.springframework.web.servlet.dispatcherservlet
1 *.form
1是啟動順序,讓這個servlet隨servletp容器一起啟動。
*.form 會攔截*.form結尾的請求。
在沒有配置的時候:
在dispatcherservlet的初始化過程中,框架會在web應用的 web-inf資料夾下尋找名為[servlet-name]-servlet.xml 的配置檔案,生成檔案中定義的bean。
springmvc指明了配置檔案的檔名,不使用預設配置檔名,而使用springmvc.xml配置檔案。org.springframework.web.servlet.dispatcherservlet
contextconfiglocation
classpath*:/springmvc.xml
1 /
其中**.xml 這裡可以使用多種寫法
1、不寫,使用預設值:/web-inf/-servlet.xml
2、/web-inf/classes/springmvc.xml
3、classpath*:springmvc-mvc.xml
4、多個值用逗號分隔
servlet攔截匹配規則:
1、攔截*.do、*.htm, 例如:/user/add.do
這是最傳統的方式,最簡單也最實用。不會導致靜態檔案(jpg,js,css)被攔截。
2、攔截/,例如:/user/add
可以實現現在很流行的rest風格。很多網際網路型別的應用很喜歡這種風格的url。
弊端:會導致靜態檔案(jpg,js,css)被攔截後不能正常顯示。想實現rest風格,事情就是麻煩一些。後面有解決辦法還算簡單。
3、攔截/*,這是乙個錯誤的方式,請求可以走到action中,但轉到jsp時再次被攔截,不能訪問到jsp。
spring mvc 學習筆記
今天主要學習spring mvc 框架的內容,以及相關的配置,如果有 不對,希望大家可以給指正,小弟在這裡先謝謝大家!spring在servlet初始化的時候通常有2種載入配置檔案的方式,一種是spring中在servlelt中配置檔案的方式,另外就是web.xml配置乙個 進行配置檔案的載入。第一...
SpringMVC 學習筆記
一 什麼是springmvc springmvc是spring框架的乙個模組,springmvc和spring無需通過中間整合層進行開發。springmvc是乙個基於mvc的web框架。spring web mvc和struts2都屬於表現層的框架,它是spring框架的一部分,我們可以從sprin...
Spring MVC 學習筆記
springmvc中各個部件簡介 相對於同為 mvc的 struts 來說,它是乙個輕量級的框架,但它能實現的內容有很多,例如 所有的請求都通過springmvc統一的入口dispatcherservlet,可以用其進行資源和許可權的管理 過濾器,filter 可以檢查使用者請求 日誌記錄 對非標準...