1. 程式人生 > >spring mvc面試總結

spring mvc面試總結

  • SpringMVC的工作原理
  1. 使用者向伺服器傳送請求,請求被SpringMVC前端控制器DispatchServlet捕獲
  2. DispatchServlet對請求URL進行解析,得到請求資源識別符號(URL),根據該URL呼叫HandlerMapping將請求對映到處理器HandlerExcutionChain;
  3. DispatchServlet根據獲得的Handler選擇一個合適的HandlerAdapter介面卡
  4. Handler對資料處理完成以後將返回一個ModelAndView()物件給DispatchServlet;
  5. Handler返回的ModelAndView()只是一個邏輯檢視並不是一個正式檢視,DispatchServlet通過ViewResolver檢視解析器將邏輯檢視轉化為真正的檢視View
  6. DispatchServlet通過model解析出ModelAndView()中的引數,最終展現出完整的view返回客戶端
  • SpringMVC常用的註解有哪些?

   @RequestMapping:用於請求url對映

   @RequestBody:註解實現接收http請求的json資料,將json轉換為java物件

   @ResponseBody:註解實現將conreoller方法返回物件轉化為json物件響應給客戶

  • 如何開啟註解處理器和介面卡

        我們在專案中一般會在springmvc.xml中通過開啟<mvc:annotation-driven>來實現註解處理器和介面卡的開啟。

  • 如何解決get和post亂碼問題?
  1. 解決post請求亂碼:我們可以在web.xml裡邊配置一個CharacterEncodingFilter 過濾器。設定為utf-8
  2. 解決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>