spring mvc面試總結
- 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>