Spring MVC 控制器
在之前的開發與看架構的時候,誤認為一個動作一定要一個控制器來與之對應,這使得我對Spring MVC 沒有很好的印象,用起來就感覺和以前的最原始的servlet 開發是一個模子,像我這麼個偷懶的人,怎麼用這興趣去每個都要相應的寫與開發呢?於是產生了以下疑問。
Spring這麼好的一個架構為何不能支援像struts2.x一樣,通過一個設定檔,一個類,可以寫很多個不同的方法,訪問的時候以帶參數的形式來區分到底調用哪一個業務方法來處理我們相關的請求。在經過半天的尋找資料以及同事的提醒,總算知道了Spring MVC中一個類寫多個方法,完完全全的實現了像struts2.x 那麼方便而又犀利的方法。主要是通過以下兩種方式可以實現。與struts2.x有過而無不及啊。
1.還是繼承老思想,實現控制器方法。在這裡,我們只要繼承了SpringMVCMultiActionController 便可以在裡面寫我們想要的方法了,寫好之後,在設定檔裡面需要讓他依賴於這個ParameterMethodNameResolver 。
<bean id="paramMethodResolver"class="org.springframework.web.servlet.mvc.multiaction.ParameterMethodNameResolver">
<property name="paramName"><value>method</value></property>
</bean>
依賴這個bean後,在寫控制器的時候,讓其繼承MultiActionController這個類。我們就可以在訪問的時候以xxx.do?method=getxxx 就可以訪問了。
2.運用Spring 2.5以後新起的一種方式,註解開發。通過註解的方式,也可以實現相同地功能。註解開法主要是運用AnnotationMethodHandlerAdapter類來進行映射。主要的映射方式是通過設定檔xxx-servlet.xml中<!--:啟動Spring MVC的註解功能,完成請求和註解POJO的映射 -->
<bean class="org.springframework.web.servlet.mvc.annotation.
AnnotationMethodHandlerAdapter"/>
在設定檔中注入這個類以後,就完成了註解的配置,當一個請求發起的時候,這個類就會根據地址來掃描,是否存在控制器中有相應的註解。通過註解來進行各種轉寄和操作。
配置好了設定檔後,就要開始寫控制器,這裡的控制器不需要繼承或實現任何類或介面。換句話說,在這個類裡面不用做其它的任何事,這個類是一個和其它普通類一樣的的類。我們要做的就是在這個類和方法前面加上註解。即可以完成映射。
主要的註解有:@Controller這個註解是最核心的註解,在類前面加上這個註解後,它便成了一個控制器。SpringMVC容器就會監視著這個類。第二個核心註解就是@RequestMapping,加上這個註解後,表示這個方法會經過轉寄。可以直接通過地址欄進行訪問。
幾種常見的控制器
Spring MVC的核心就是控制器,而在我們寫控制器的時候,Spring MVC有那麼多的控制器,我們選用哪一個才是最佳選擇呢?
Spring MVC 的控制器主要都直接或間接的實現了Controller 介面。主要有以下幾類控制器。
1.簡單控制器(AbstractController),適合於無參數或者少參數的訪問,如我們要一子顯示所有留言,顯示所有文章等。在使用該控制器的時候,一般會重寫handleRequestInternal方法。
2.命令控制器(AbstractCommandController),自我感覺可以用簡單控制器替換,適合於更少參數的傳遞訪問。如:顯示我喜歡的文章。。。。。
3.表單控制器(SimpleFormController)這個控制器是最通用的一個控制器,主要用於對錶單的操作和控制。例如:增加,修改文章等。
4.嚮導控制器(AbstractWizardFormController)適用於分步註冊,分步儲存資料的情況下。該控制器裡面有很多方法供選擇。
5.多動作控制器(multiActionController),該控制器允許在同一個類中寫多個不同的方法,以參數的來區別訪問哪一個方法。在這個控制器類中可以定義自己的方法。主要定義方式有public (ModeAndView|Map|String |void)actionName(HttpServletRequest,HttpServletResponse,response).