- SpringMVC的工作原理
- 用戶向服務器發送請求,請求被SpringMVC前端控制器DispatchServlet捕獲
- DispatchServlet對請求URL進行解析,得到請求資源標識符(URL),根據該URL調用HandlerMapping將請求映射到處理器HandlerExcutionChain;
- DispatchServlet根據獲得的Handler選擇一個合適的HandlerAdapter適配器
- Handler對數據處理完成以後將返回一個ModelAndView()對象給DispatchServlet;
- Handler返回的ModelAndView()只是一個邏輯視圖並不是一個正式視圖,DispatchServlet通過ViewResolver視圖解析器將邏輯視圖轉化爲真正的視圖View
- DispatchServlet通過model解析出ModelAndView()中的參數,最終展現出完整的view返回客戶端
- SpringMVC常用的註解有哪些?
@RequestMapping:用於請求url映射
@RequestBody:註解實現接收http請求的json數據,將json轉換爲java對象
@ResponseBody:註解實現將conreoller方法返回對象轉化爲json對象響應給客戶
- 如何開啓註解處理器和適配器
我們在項目中一般會在springmvc.xml中通過開啓<mvc:annotation-driven>來實現註解處理器和適配器的開啓。
- 如何解決get和post亂碼問題?
- 解決post請求亂碼:我們可以在web.xml裏邊配置一個CharacterEncodingFilter 過濾器。設置爲utf-8
- 解決get請求亂碼有兩種方法,對於get請求中文參數出現亂碼解決方法有兩個:
1)修改tomcat配置文件添加編碼和工程編碼一致
2)另一種方法對參數進行重新編碼,String username = new String(Request.getParameter("userName").getBytes("ISO8859-1"),"utf-8");
- SpringMvc的控制器是不是單例模式,如果是,有什麼問題,怎麼解決?
是單例模式,所以在多線程訪問的時候有線程安全問題,不要用同步,會影響性能的,解決方案是在控制器裏面不能寫字段。
- 如果你也用過struts2.簡單介紹下springMVC和struts2的區別有哪些?
1)springmvc的入口是一個servlet即前端控制器,而struts2入口是一個filter過慮器。
2)springmvc是基於方法開發(一個url對應一個方法),請求參數傳遞到方法的形參,可以設計爲單例或多例(建議單例),struts2是基於類開發,傳遞參數是通過類的屬性,只能設計爲多例。
3)Struts採用值棧存儲請求和響應的數據,通過OGNL存取數據,springmvc通過參數解析器是將request請求內容解析,並給方法形參賦值,將數據和視圖封裝成ModelAndView對象,最後又將ModelAndView中的模型數據通過reques域傳輸到頁面。Jsp視圖解析器默認使用jstl。
- 如果在攔截請求中,我想攔截get方式提交的方法,怎麼配置?
可以在@RequestMapping註解裏面加上method=RequestMethod.GET
- 怎麼樣在方法裏面得到Request或者Session?
直接在方法的形參中聲明request,SpringMvc就自動把request對象傳入
- SpringMvc中函數的返回值是什麼?
返回值可以有很多類型,有String, ModelAndView,一般用String比較好。
- 當一個方法向AJAX返回特殊對象,譬如Object,List等,需要做什麼處理?
要加上@ResponseBody註解
- SpringMvc裏面攔截器是怎麼寫的
有兩種寫法,一種是實現接口,另外一種是繼承適配器類,然後在SpringMvc的配置文件中配置攔截器即可:
<!-- 配置SpringMvc的攔截器 -->
<mvc:interceptors>
<!-- 配置一個攔截器的Bean就可以了 默認是對所有請求都攔截 -->
<bean id="myInterceptor" class="com.et.action.MyHandlerInterceptor"></bean>
<!-- 只針對部分請求攔截 -->
<mvc:interceptor>
<mvc:mapping path="/modelMap.do" />
<bean class="com.et.action.MyHandlerInterceptorAdapter" />
</mvc:interceptor>
</mvc:interceptors>