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