Spring MVC面試題


1、什么是 Spring MVC?

SpringMvc 是 spring 的一個模塊,基於 MVC 的一個框架,無需中間整合層來整合。

2、Spring MVC 的優點

1)它是基於組件技術的.全部的應用對象,無論控制器和視圖,還是業務對象之類的都是 java組件.並且和 Spring 提供的其他基礎結構緊密集成.
2)不依賴於 Servlet API(目標雖是如此,但是在實現的時候確實是依賴於 Servlet 的)
3)可以任意使用各種視圖技術,而不僅僅局限於 JSP
4)支持各種請求資源的映射策略
5)它應是易於擴展的

3、SpringMVC 工作原理?

1)客戶端發送請求到 DispatcherServlet
2)DispatcherServlet 查詢 handlerMapping 找到處理請求的 Controller
3)Controller 調用業務邏輯后,返回 ModelAndView
4)DispatcherServlet 查詢 ModelAndView,找到指定視圖
5)視圖將結果返回到客戶端

4、SpringMVC 流程?

1)用戶發送請求至前端控制器 DispatcherServlet。
2)DispatcherServlet 收到請求調用 HandlerMapping 處理器映射器。
3)處理器映射器找到具體的處理器(可以根據 xml 配置、注解進行查找),生成處理器對象及處理器攔截器(如果有則生成)一並返回給 DispatcherServlet。
4)DispatcherServlet 調用 HandlerAdapter 處理器適配器。
5)HandlerAdapter 經過適配調用具體的處理器(Controller,也叫后端控制器)。
6)Controller 執行完成返回 ModelAndView。
7)HandlerAdapter 將 controller 執行結果 ModelAndView 返回給 DispatcherServlet。
8)DispatcherServlet 將 ModelAndView 傳給 ViewReslover 視圖解析器。
9)ViewReslover 解析后返回具體 View。
10)DispatcherServlet 根據 View 進行渲染視圖(即將模型數據填充至視圖中)。
11)DispatcherServlet 響應用戶。

5、SpringMvc 的控制器是不是單例模式,如果是,有什么問題,怎么解決?

  是單例模式,所以在多線程訪問的時候有線程安全問題,不要用同步,會影響性能的,解決方案是在控制器里面不能寫字段。

6、如果你也用過 struts2.簡單介紹下 springMVC 和 struts2 的區別有哪些?

1)springmvc 的入口是一個 servlet 即前端控制器,而 struts2 入口是一個 filter 過濾器。
2)springmvc 是基於方法開發(一個 url 對應一個方法),請求參數傳遞到方法的形參,可以設計為單例或多例(建議單例),struts2 是基於類開發,傳遞參數是通過類的屬性,只能設計為多例。
3)Struts 采用值棧存儲請求和響應的數據,通過 OGNL 存取數據,springmvc 通過參數解析器是將 request 請求內容解析,並給方法形參賦值,將數據和視圖封裝成ModelAndView對象,最后又將 ModelAndView 中的模型數據通過 reques 域傳輸到頁面。Jsp 視圖解析器默認使用 jstl。

7、SpingMvc 中的控制器的注解一般用那個,有沒有別的注解可以替代?

一般用@Conntroller 注解,表示是表現層,不能用用別的注解代替。

8、@RequestMapping 注解用在類上面有什么作用?

  是一個用來處理請求地址映射的注解,可用於類或方法上。用於類上,表示類中的所有響應請求的方法都是以該地址作為父路徑。

9、怎么樣把某個請求映射到特定的方法上面?

直接在方法上面加上注解@RequestMapping,並且在這個注解里面寫上要攔截的路徑

10、如果在攔截請求中,我想攔截 get 方式提交的方法,怎么配置?

可以在@RequestMapping 注解里面加上 method=RequestMethod.GET或直接使用@GetMapping

11、怎么樣在方法里面得到 Request,或者 Session?

直接在方法的形參中聲明 request,SpringMvc 就自動把 request 對象傳入

12、我想在攔截的方法里面得到從前台傳入的參數,怎么得到?

直接在形參里面聲明這個參數就可以,但必須名字和傳過來的參數一樣

13、如果前台有很多個參數傳入,並且這些參數都是一個對象的,那么怎么樣快速得到這個對象?

直接在方法中聲明這個對象,SpringMvc 就自動會把屬性賦值到這個對象里面。

14、SpringMvc 中函數的返回值是什么?

返回值可以有很多類型,有 String, ModelAndView,當一般用 String 比較好。

15、SpringMVC 怎么樣設定重定向和轉發的?

  在返回值前面加"forward:“就可以讓結果轉發,譬如"forward:user.do?name=method4” 在返回值前面加"redirect:“就可以讓返回值重定向,譬如"redirect:http://www.baidu.com”

16、SpringMvc 用什么對象從后台向前台傳遞數據的?

  通過 ModelMap 對象,可以在這個對象里面用 put 方法,把對象加到里面,前台就可以通過 el 表達式拿到。

17、SpringMvc 中有個類把視圖和數據都合並的一起的,叫什么?

叫 ModelAndView。

18、怎么樣把 ModelMap 里面的數據放入 Session 里面?

可以在類上面加上@SessionAttributes 注解,里面包含的字符串就是要放入 session 里面的 key

19、SpringMvc 怎么和 AJAX 相互調用的?

通過 Jackson 框架就可以把 Java 里面的對象直接轉化成 Js 可以識別的 Json 對象。
具體步驟如下 :
1)加入 Jackson.jar
2)在配置文件中配置 json 的映射
3)在接受 Ajax 方法里面可以直接返回 Object,List 等,但方法前面要加@ResponseBody注解

20、當一個方法向 AJAX 返回特殊對象,譬如 Object,List 等,需要做什么處理?

要加上@ResponseBody 注解

21、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>

22、講下 SpringMvc 的執行流程

  系統啟動的時候根據配置文件創建 spring 的容器, 首先是發送 http 請求到核心控制器disPatherServlet,spring 容器通過映射器去尋找業務控制器,使用適配器找到相應的業務類,在進業務類時進行數據封裝,在封裝前可能會涉及到類型轉換,執行完業務類后使用ModelAndView 進行視圖轉發,數據放在 model 中,用 map 傳遞數據進行頁面顯示。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM