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>

 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章