Spring3MVC 學習筆記 五

2021-08-27 09:07:57 字數 3775 閱讀 9009

abstracturlviewcontroller

提供根據請求url 路徑直接轉化為邏輯檢視名的支援基類,即不需要功能處理,直接根據url 計算出邏輯檢視名,

並選擇具體檢視進行展示:

urldecode:是否進行url解碼,不指定則預設使用伺服器編碼進行解碼(如tomcat預設iso-8859-1);

urlpathhelper:用於解析請求路徑的工具類,預設為org.springframework.web.util.urlpathhelper。

urlfilenameviewcontroller 是它的乙個實現者,因此我們應該使用urlfilenameviewcontroller

urlfilenameviewcontroller

將請求的url 路徑轉換為邏輯檢視名並返回的轉換控制器,即不需要功能處理,直接根據url 計算出邏輯檢視名,

並選擇具體檢視進行展示:

根據請求url路徑計算邏輯檢視名;

/index1/*:可以匹配/index1/demo,但不匹配/index1/demo/demo,如/index1/demo邏輯檢視名為demo;

/index2/**:可以匹配/index2 路徑下的所有子路徑,如匹配/index2/demo,或/index2/demo/demo,

「/index2/demo」的邏輯檢視名為demo,而「/index2/demo/demo」邏輯檢視名為demo/demo;

/*.html:可以匹配如/abc.html,邏輯檢視名為abc,字尾會被刪除(不僅僅可以是html);

/index3/*.html:可以匹配/index3/abc.html,邏輯檢視名也是abc;

上述模式為spring web mvc使用的ant-style 模式進行匹配的:

如請求為「/long/long」將匹配第乙個「/long/long」,但請求「/long/acd」則將匹配「/long/**」,如請求「/long/aa/abc」

則匹配「/long/**/abc」,如請求「/abc」則將匹配「/**」

urlfilenameviewcontroller 還提供了如下屬性:

prefix:生成邏輯檢視名的字首;

suffix:生成邏輯檢視名的字尾;

protected string postprocessviewname(string viewname)

當 prefix=「test」,suffix=「test」,如上所示的/*.htm:可以匹配如/abc.htm,但邏輯檢視名將變為testabctest。

如上: 可以實現一些偽靜態的url

multiactioncontroller 一對多的關係 處理

之前學過的控制器如abstractcommandcontroller、******formcontroller

等一般對應乙個功能處理方法(如新增),如果

我要實現比如最簡單的使用者增刪改查(crud create-read-update-delete),那該怎麼辦呢?

解決方案

1、每乙個功能對應乙個控制器,如果是crud 則需要四個控制器,但這樣我們的控制器會暴增,肯定不可取;

2、使用spring web mvc提供的multiactioncontroller,用於支援在乙個控制器裡新增多個功能處理方法,即將多個請

求的處理方法放置到乙個控制器裡,這種方式不錯。

問題1、multiactioncontroller 如何將不同的請求對映不同的請求的功能處理方法呢?

spring web mvc提供了methodnameresolver(方法名解析器)用於解析當前請求到需要執行的功能處理方法的方法名。

預設使用internalpathmethodnameresolver 實現類, 另外還提供了parametermethodnameresolver 和

propertiesmethodnameresolver,當然我們也可以自己來實現,稍候我們仔細研究下它們是如何工作的。

2、那我們的功能處理方法應該怎麼寫呢?

哦,原來如此,我們只需要按照如上格式寫我們的功能處理方法即可;

此處需要注意一下幾點:

1、返回值:即模型和檢視部分;

modelandview:模型和檢視部分,之前已經見過了;

map:只返回模型資料,邏輯檢視名會根據requesttoviewnametranslator 實現類來計算,稍候討論;

string:只返回邏輯檢視名;

void:表示該功能方法直接寫出response響應(如果其他返回值型別(如map)返回null則和void進行相同的處理);

2、actionname:功能方法名字;由methodnameresolver 根據請求資訊解析功能方法名,通過反射呼叫;

3、形參列表:順序固定,「」表示可選

即在請求的功能處理過程中遇到異常會交給異常處

理方法進行處理,式如下所示:

multiactioncontroller 會使用最接近的異常型別來匹配對應的異常處理方法,示例如下所示:

//處理payexception

//處理exception

multiactioncontroller類實現

類定義:public class multiactioncontroller extends abstractcontroller implements lastmodified ,繼承了abstractcontroller,

並實現了lastmodified介面,預設返回-1;

核心屬性:

delegate:功能處理的委託物件,即我們要呼叫請求處理方法所在的物件,預設是this;

methodnameresolver:功能處理方法名解析器,即根據請求資訊來解析需要執行的delegate的功能處理方法的方法名。

multiactioncontroller  使用methodnameresolver來解析請求到功能處理方法的方法名

propertiesmethodnameresolver:提供自定義的從請求url 解析功能方法的方法名,使用一組使用者自定義的

模式到功能方法名的對映,對映使用properties 物件存放

requesttoviewnametranslator

用於直接將請求轉換為邏輯檢視名。預設實現為defaultrequesttoviewnametranslator。

strus2與spring3 mvc的差別

比較了一下strus2與spring3 mvc的差別 好了 我們來整理一下 spring mvc是方法級別的攔截,乙個方法對應乙個request上下文,而方法同時又跟乙個url對應,所以說從架構本身上 spring3 mvc就容易實現restful url。struts2是類級別的攔截,乙個類對應乙...

Spring3 MVC請求引數獲取的幾種方法小結

spring3 mvc請求引數獲取的幾種方法 一 通過 pathvariabl獲取路徑中的引數 requestmapping value user method requestmethod.get public string printmessage1 pathvariable string id,...

spring 3 mvc中對title2的處理

在spring mvc3中可以用title2的框架簡化,下面是步驟 1 加上包,包如下圖 2 在spring mvc中設定title框架 webcontent web inf spring servlet.xml org.springframework.web.servlet.view.tiles2...