1. 程式人生 > >SpringMVC+MyBatis面試題 SpringMVC工作流程、MyBatis工作流程

SpringMVC+MyBatis面試題 SpringMVC工作流程、MyBatis工作流程

SpringMVC的工作流程

  1. 使用者傳送請求至前端控制器DispatcherServlet。
  2. DispatcherServlet收到請求後呼叫HandlerMapping處理器對映器。
  3. 處理器對映器根據請求url找到具體的處理器,生成處理器物件及處理器攔截器(如果有則生成)一同返回給DispatcherServlet。
  4. DispatcherServlet通過HandlerAdapter處理器介面卡呼叫處理器。
  5. 執行處理器(Controller,也叫後端控制器)。
  6. Controller執行完成返回ModelAndView。
  7. HandlerAdapter將Controller執行結果ModelAndView返回給DispatcherServlet。
  8. DispatcherServlet將ModelAndView傳給ViewReslover檢視解析器。
  9. ViewReslover解析後返回具體View。
  10. DispatcherServlet對View進行渲染檢視(即將模型資料填充至檢視中)。
  11. DispatcherServlet響應使用者。

MyBatis工作流程

1.載入配置檔案。
2.生成SqlSessionFactory。
3.建立SqlSession。
4.呼叫MyBatis提供的API。
5.查詢Map配置檔案。
6.返回結果。
7.關閉SqlSession。

springMVC和struts2的區別有哪些

  1. SpringMVC的入口是一個Servlet即前端控制器,而Struts2入口是一個Filter過慮器。
  2. SpringMVC是基於方法開發(一個url對應一個方法),請求引數傳遞到方法的形參,可以設計為單例或多例(建議單例),Struts2是基於類開發,傳遞引數是通過類的屬性,只能設計為多例。
  3. Struts採用值棧儲存請求和響應的資料,通過OGNL存取資料, SpringMVC通過引數解析器是將request請求內容解析,並給方法形參賦值,將資料和檢視封裝成ModelAndView物件,最後又將ModelAndView中的模型資料通過reques域傳輸到頁面。jsp檢視解析器預設使用jstl。

SSM優缺點、使用場景

  1. Mybatis和hibernate不同,它不完全是一個ORM框架,因為MyBatis需要程式設計師自己編寫Sql語句,不過Mybatis可以通過XML或註解方式靈活配置要執行的sql語句,並將java物件和sql語句對映生成最終執行的sql,最後將sql執行的結果再對映生成java物件。
  2. Mybatis學習門檻低,簡單易學,程式設計師直接編寫原生態sql,可嚴格控制sql執行效能,靈活度高,非常適合對關係資料模型要求不高的軟體開發,例如網際網路軟體、企業運營類軟體等,因為這類軟體需求變化頻繁,一但需求變化要求成果輸出迅速。但是靈活的前提是Mybatis無法做到資料庫無關性,如果需要實現支援多種資料庫的軟體則需要自定義多套sql對映檔案,工作量大。
  3. Hibernate物件/關係對映能力強,資料庫無關性好,對於關係模型要求高的軟體(例如需求固定的定製化軟體)如果用hibernate開發可以節省很多程式碼,提高效率。但是Hibernate的學習門檻高,要精通門檻更高,而且怎麼設計O/R對映,在效能和物件模型之間如何權衡,以及怎樣用好Hibernate需要具有很強的經驗和能力才行。
  4. 總之,按照使用者的需求在有限的資源環境下只要能做出維護性、擴充套件性良好的軟體架構都是好架構,所以框架只有適合才是最好。

什麼是控制反轉、依賴注入 以及依賴注入的方式

控制反轉就是本來你該做的事情,你不去做了,讓系統去做。比如,你獲取一個物件的時候,往往需要new出例項來,如果用了控制反轉,那這件事情 就不需要你做了,你只需要在配置檔案xml中配置好,系統就幫你new了。
控制反轉也叫依賴注入,就是把該用到的東西提前注入進去,下次直接用,而不是每次都new。
依賴注入方式:構造器依賴注入和Setter方法注入。

如何處理post或get請求引數亂碼問題

post請求亂碼解決:在web.xml中加入CharacterEncodingFilter。程式碼如下。

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

get請求亂碼解決:修改tomcat配置檔案新增編碼與專案編碼一致,或者對引數進行重新編碼,兩種方式程式碼如下。

<ConnectorURIEncoding="utf-8" connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443"/>
String userName = new String(request.getParamter("userName").getBytes("ISO8859-1"),"utf-8")