springMVC問答題(簡答題)
1.Spring MVC 的執行原理
Spring MVC的執行流程就是一次請求和響應的過程:
- 首先,使用者向伺服器傳送請求, 請求被前端控制器 DispatherServlet 截獲,對 url 進行解析;
- 前端控制器訪問HandlerMapping(處理器對映器)請求獲取Handler,HandlerMapping(處理器對映器)返回Handler;
- 中央處理器請求HandlerAdatper處理器介面卡,執行Handler,Handler執行完畢返回一個ModelAndView;
- ModelAndView通過HandlerAdatper處理器介面卡返回ModelAndView給中央處理器;
- 中央處理器請求ViewResolver檢視解析器進行檢視解析返回一個View;
- 渲染檢視將model資料轉為response響應找到相應的檢視進行渲染;
- 將檢視渲染的結果返回給客戶端
2.Spring MVC 的 Controller 是單例的嗎?
是單例的。
3.Spring MVC 的 Controller 是執行緒安全的嗎?
是執行緒安全的。
原因:Spring MVC 雖然是單例的, 但是 Spring MVC 是方法級別的,資料傳輸是通過方法的引數傳遞的,因此在類中沒有共享屬性,不存線上程不安全的問題。
4. Spring MVC 和 Struts2的區別、優缺點?
1)、Spring MVC 開發效率和效能要優於Struts2。
2)、Spring MVC繼承了 Ajax,使用 @ResponseBody註解寫入 HTTP 響應正文,一般在非同步獲取資料時使用,使用@RequestBody 註解則是將 HTTP 請求正文插入方法中,使用適合的 HttpMessageConverter 將請求體寫入某個物件。
3)、Struts中使用Ajax 比較麻煩。
4)、Spring MVC 通過前端控制器 DispatcherServlet 完成請求的分發。入口是一個Servlet。
5)、Struts2 通過 FilterDispatcher(2.1.3以前)或StrutsPrepareAndExecuteFilter(2.1.3和以後)完成請求的分發。入口是一個 Filter。
6)、Spring MVC 是基於方法級別傳遞資料。單例項情況下不存線上程安全的問題。因為Spring MVC的引數是在控制器的方法中傳遞的。
7)、Struts2是基於類級別傳輸資料。Struts2單例項情況下有執行緒併發問題,多例項情況下沒有執行緒併發問題,但是效率又很低。也可以在單例項情況下使用ActionContext類傳遞資料,但是比較麻煩。
5.SpringMVC中都有哪些配置:
檢視解析器、放行靜態資源、掃描controller、檔案上傳下載、json型別轉換器、自定義攔截器、全域性異常處理
6.SpringMVC有哪些檢視解析器,他們的作用以及配置:
1)InternalResourceViewResolver
2)FreeMarkerViewResolver
3)XmlViewResolver
4)ServletContextTemplateResolver (spring boot themyleaf)
檢視解析器的作用是把邏輯檢視的名字解析為真正的檢視
配置:在SpringMVC的配置檔案中配置一個bean,指向檢視解析器,然後配置檢視的字首和字尾
7.簡介Spring MVC中的ModelAndView類?
ModelAndView是控制器處理方法的返回值,既包含模型資料資訊,又包含檢視資訊
8.簡介Spring MVC中的註解:@RequestMapping,@RequestParam
@RequestMapping:配置請求的url地址,可以用在類上和方法上。
@RequestParam:傳遞引數
9.Spring,SpringMVC ,Struts2,hibernate,mybatis 分別是解決什麼問題的?
SpringMVC 和 Struts2 是MVC框架,主要是將系統分為檢視、模型、控制器三個層次,負責接收請求,呼叫業務層介面,給檢視層返回需要的資料。降低系統的耦合性。
hibernate 和 mybatis 是持久層框架,解決如何存取資料庫中的資料的問題,提高資料操作的效率。
Spring 實現 依賴注入的功能,例如將dao物件注入 service 層,同時 spring 面向切面的特性可以實現程式中事物管理的功能,日誌記錄的功能等。
10.SpringMVC和hibernate的區別,為什麼要一起用?
它們的職責不同。 SpringMVC解決的是系統分層架構的問題,負責接收請求,呼叫業務層介面,給檢視層返回需要的資料。
hibernate解決的是資料持久化的問題,可以方便的做資料操作。他們整合在一起提高開發效率。
11.Struts2和springMVC的重定向和轉發
1)Struts2請求轉發實現方式:
-
dispatcher —— 請求轉發到一個頁面 (預設),不可以用這種方式轉發到一個action
-
chain —— 一個action請求轉發至另一個 action
-
redirect —— 響應重定向到一個頁面/action
-
redirectAction —— 一個action響應重定向至另一個 action
-
stream —— 檔案下載
2)Springmvc請求轉發實現方式:
-
return "redirect:/ toList ";
-
return ”forward:/toList”;
12.如何解決POST請求中文亂碼問題,GET的又如何處理呢?
1)在web.xml中加入:
<filter>
<filter-name>CharacterEncodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>utf-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>CharacterEncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
2)以上可以解決post請求亂碼問題。對於get請求中文引數出現亂碼解決方法有兩個:
(1)修改tomcat配置檔案新增編碼與工程編碼一致,如下:
<ConnectorURIEncoding="utf-8" connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443"/>
(2)另外一種方法對引數進行重新編碼:
String userName = new String(request.getParamter("userName").getBytes("ISO8859-1"),"utf-8") ;
ISO8859-1是tomcat預設編碼,需要將tomcat編碼後的內容按utf-8編碼
13.什麼是Spring MVC框架的控制器?
控制器提供對應用程式行為的訪問,通常通過服務介面實現。控制器解析使用者的輸入,並將其轉換為一個由檢視呈現給使用者的模型。Spring 通過一種極其抽象的方式實現控制器,它允許使用者建立多種型別的控制器。
14.SpringMvc特點有哪些?
1)它是基於元件技術的,全部的應用物件,無論控制器和檢視,還是業務物件之類的都是java元件,並且和Spring提供的其他基礎結構緊密整合
2)可以任意使用各種檢視技術,而不僅僅侷限於JSP
3)支援各種請求資源的對映策略
4)它應是易於擴充套件的