溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

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

發(fā)布時間:2020-03-26 07:29:31 來源:網(wǎng)絡(luò) 閱讀:561 作者:淺嫣 欄目:開發(fā)技術(shù)

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


SpringMVC的工作流程

  1. 用戶發(fā)送請求至前端控制器DispatcherServlet。

  2. DispatcherServlet收到請求后調(diào)用HandlerMapping處理器映射器。

  3. 處理器映射器根據(jù)請求url找到具體的處理器,生成處理器對象及處理器攔截器(如果有則生成)一同返回給DispatcherServlet。

  4. DispatcherServlet通過HandlerAdapter處理器適配器調(diào)用處理器。

  5. 執(zhí)行處理器(Controller,也叫后端控制器)。

  6. Controller執(zhí)行完成返回ModelAndView。

  7. HandlerAdapter將Controller執(zhí)行結(jié)果ModelAndView返回給DispatcherServlet。

  8. DispatcherServlet將ModelAndView傳給ViewReslover視圖解析器。

  9. ViewReslover解析后返回具體View。

  10. DispatcherServlet對View進行渲染視圖(即將模型數(shù)據(jù)填充至視圖中)。

  11. DispatcherServlet響應(yīng)用戶。

MyBatis工作流程

1.加載配置文件。
 2.生成SqlSessionFactory。
 3.建立SqlSession。
 4.調(diào)用MyBatis提供的API。
 5.查詢Map配置文件。
 6.返回結(jié)果。
 7.關(guān)閉SqlSession。

springMVC和struts2的區(qū)別有哪些

  1. SpringMVC的入口是一個Servlet即前端控制器,而Struts2入口是一個Filter過慮器。

  2. SpringMVC是基于方法開發(fā)(一個url對應(yīng)一個方法),請求參數(shù)傳遞到方法的形參,可以設(shè)計為單例或多例(建議單例),Struts2是基于類開發(fā),傳遞參數(shù)是通過類的屬性,只能設(shè)計為多例。

  3. Struts采用值棧存儲請求和響應(yīng)的數(shù)據(jù),通過OGNL存取數(shù)據(jù), SpringMVC通過參數(shù)解析器是將request請求內(nèi)容解析,并給方法形參賦值,將數(shù)據(jù)和視圖封裝成ModelAndView對象,最后又將ModelAndView中的模型數(shù)據(jù)通過reques域傳輸?shù)巾撁?。jsp視圖解析器默認使用jstl。

SSM優(yōu)缺點、使用場景

  1. Mybatis和hibernate不同,它不完全是一個ORM框架,因為MyBatis需要程序員自己編寫Sql語句,不過Mybatis可以通過XML或注解方式靈活配置要運行的sql語句,并將java對象和sql語句映射生成最終執(zhí)行的sql,最后將sql執(zhí)行的結(jié)果再映射生成java對象。

  2. Mybatis學習門檻低,簡單易學,程序員直接編寫原生態(tài)sql,可嚴格控制sql執(zhí)行性能,靈活度高,非常適合對關(guān)系數(shù)據(jù)模型要求不高的軟件開發(fā),例如互聯(lián)網(wǎng)軟件、企業(yè)運營類軟件等,因為這類軟件需求變化頻繁,一但需求變化要求成果輸出迅速。但是靈活的前提是Mybatis無法做到數(shù)據(jù)庫無關(guān)性,如果需要實現(xiàn)支持多種數(shù)據(jù)庫的軟件則需要自定義多套sql映射文件,工作量大。

  3. Hibernate對象/關(guān)系映射能力強,數(shù)據(jù)庫無關(guān)性好,對于關(guān)系模型要求高的軟件(例如需求固定的定制化軟件)如果用hibernate開發(fā)可以節(jié)省很多代碼,提高效率。但是Hibernate的學習門檻高,要精通門檻更高,而且怎么設(shè)計O/R映射,在性能和對象模型之間如何權(quán)衡,以及怎樣用好Hibernate需要具有很強的經(jīng)驗和能力才行。

  4. 總之,按照用戶的需求在有限的資源環(huán)境下只要能做出維護性、擴展性良好的軟件架構(gòu)都是好架構(gòu),所以框架只有適合才是最好。

什么是控制反轉(zhuǎn)、依賴注入 以及依賴注入的方式

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

如何處理post或get請求參數(shù)亂碼問題

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

get請求亂碼解決:修改tomcat配置文件添加編碼與項目編碼一致,或者對參數(shù)進行重新編碼,兩種方式代碼如下。

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


向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI