springMVC學習筆記

2021-08-21 11:56:27 字數 4636 閱讀 4214

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的引數預設是必須提供的,可以將其指定為可選的,將@requestparamreqired屬性設定false即可。(如,@requestparam(value="id", required=false)).

如果將@requestparam用於mapmultivaluemap引數,此引數 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  

org.springframework.web.servlet.dispatcherservlet

contextconfiglocation

classpath*:/springmvc.xml

1 /

指明了配置檔案的檔名,不使用預設配置檔名,而使用springmvc.xml配置檔案。

其中**.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 可以檢查使用者請求 日誌記錄 對非標準...