1. 程式人生 > >springMVC問答題(簡答題)

springMVC問答題(簡答題)

1.Spring MVC 的執行原理

https://images2015.cnblogs.com/blog/249993/201612/249993-20161212142542042-2117679195.jpg

        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)它應是易於擴充套件的