詳細(xì)面試資料請(qǐng)加群399809657顿天,或者請(qǐng)留言自取正勒。
1、什么是SpringMvc悼尾?
答:SpringMvc是spring的一個(gè)模塊柿扣,基于MVC的一個(gè)框架,無需中間整合層來整合闺魏。
2未状、Spring MVC的優(yōu)點(diǎn):
答:
1)它是基于組件技術(shù)的.全部的應(yīng)用對(duì)象,無論控制器和視圖,還是業(yè)務(wù)對(duì)象之類的都是 java組件.并且和Spring提供的其他基礎(chǔ)結(jié)構(gòu)緊密集成.
2)不依賴于Servlet API(目標(biāo)雖是如此,但是在實(shí)現(xiàn)的時(shí)候確實(shí)是依賴于Servlet的)
3)可以任意使用各種視圖技術(shù),而不僅僅局限于JSP
4)支持各種請(qǐng)求資源的映射策略
5)它應(yīng)是易于擴(kuò)展的
3、SpringMVC工作原理析桥?
答:
1)客戶端發(fā)送請(qǐng)求到DispatcherServlet
2)DispatcherServlet查詢handlerMapping找到處理請(qǐng)求的Controller
3)Controller調(diào)用業(yè)務(wù)邏輯后司草,返回ModelAndView
4)DispatcherServlet查詢ModelAndView,找到指定視圖
5)視圖將結(jié)果返回到客戶端
4泡仗、SpringMVC流程埋虹?
答:
1)用戶發(fā)送請(qǐng)求至前端控制器DispatcherServlet。
2)DispatcherServlet收到請(qǐng)求調(diào)用HandlerMapping處理器映射器沮焕。
3)處理器映射器找到具體的處理器(可以根據(jù)xml配置吨岭、注解進(jìn)行查找),生成處理器對(duì)象及處理器攔截器(如果有則生成)一并返回給DispatcherServlet峦树。
4)DispatcherServlet調(diào)用HandlerAdapter處理器適配器辣辫。
5)HandlerAdapter經(jīng)過適配調(diào)用具體的處理器(Controller,也叫后端控制器)魁巩。
6)Controller執(zhí)行完成返回ModelAndView急灭。
7)HandlerAdapter將controller執(zhí)行結(jié)果ModelAndView返回給DispatcherServlet。
8)DispatcherServlet將ModelAndView傳給ViewReslover視圖解析器谷遂。
9)ViewReslover解析后返回具體View葬馋。
10)DispatcherServlet根據(jù)View進(jìn)行渲染視圖(即將模型數(shù)據(jù)填充至視圖中)。
11)DispatcherServlet響應(yīng)用戶。
6畴嘶、SpringMvc的控制器是不是單例模式,如果是,有什么問題,怎么解決蛋逾?
答:是單例模式,所以在多線程訪問的時(shí)候有線程安全問題,不要用同步,會(huì)影響性能的,解決方案是在控制器里面不能寫字段。
7窗悯、如果你也用過struts2.簡(jiǎn)單介紹下springMVC和struts2的區(qū)別有哪些?
答:
1)springmvc的入口是一個(gè)servlet即前端控制器区匣,而struts2入口是一個(gè)filter過慮器。
2)springmvc是基于方法開發(fā)(一個(gè)url對(duì)應(yīng)一個(gè)方法)蒋院,請(qǐng)求參數(shù)傳遞到方法的形參亏钩,可以設(shè)計(jì)為單例或多例(建議單例),struts2是基于類開發(fā)欺旧,傳遞參數(shù)是通過類的屬性姑丑,只能設(shè)計(jì)為多例。
3)Struts采用值棧存儲(chǔ)請(qǐng)求和響應(yīng)的數(shù)據(jù)辞友,通過OGNL存取數(shù)據(jù)栅哀,springmvc通過參數(shù)解析器是將request請(qǐng)求內(nèi)容解析,并給方法形參賦值踏枣,將數(shù)據(jù)和視圖封裝成ModelAndView對(duì)象昌屉,最后又將ModelAndView中的模型數(shù)據(jù)通過reques域傳輸?shù)巾撁娓泼伞sp視圖解析器默認(rèn)使用jstl茵瀑。
8、SpingMvc中的控制器的注解一般用那個(gè),有沒有別的注解可以替代躬厌?
答:一般用@Conntroller注解,表示是表現(xiàn)層,不能用用別的注解代替马昨。
9、 @RequestMapping注解用在類上面有什么作用扛施?
答:是一個(gè)用來處理請(qǐng)求地址映射的注解鸿捧,可用于類或方法上。用于類上疙渣,表示類中的所有響應(yīng)請(qǐng)求的方法都是以該地址作為父路徑匙奴。
10、怎么樣把某個(gè)請(qǐng)求映射到特定的方法上面妄荔?
答:直接在方法上面加上注解@RequestMapping,并且在這個(gè)注解里面寫上要攔截的路徑
11泼菌、如果在攔截請(qǐng)求中,我想攔截get方式提交的方法,怎么配置?
答:可以在@RequestMapping注解里面加上method=RequestMethod.GET
12啦租、怎么樣在方法里面得到Request,或者Session哗伯?
答:直接在方法的形參中聲明request,SpringMvc就自動(dòng)把request對(duì)象傳入
13、我想在攔截的方法里面得到從前臺(tái)傳入的參數(shù),怎么得到篷角?
答:直接在形參里面聲明這個(gè)參數(shù)就可以,但必須名字和傳過來的參數(shù)一樣
14焊刹、如果前臺(tái)有很多個(gè)參數(shù)傳入,并且這些參數(shù)都是一個(gè)對(duì)象的,那么怎么樣快速得到這個(gè)對(duì)象?
答:直接在方法中聲明這個(gè)對(duì)象,SpringMvc就自動(dòng)會(huì)把屬性賦值到這個(gè)對(duì)象里面。
15虐块、SpringMvc中函數(shù)的返回值是什么俩滥?
答:返回值可以有很多類型,有String, ModelAndView,當(dāng)一般用String比較好。
16贺奠、SpringMVC怎么樣設(shè)定重定向和轉(zhuǎn)發(fā)的举农?
答:在返回值前面加"forward:"就可以讓結(jié)果轉(zhuǎn)發(fā),譬如"forward:user.do?name=method4" 在返回值前面加"redirect:"就可以讓返回值重定向,譬如"redirect:http://www.baidu.com"
17、SpringMvc用什么對(duì)象從后臺(tái)向前臺(tái)傳遞數(shù)據(jù)的敞嗡?
答:通過ModelMap對(duì)象,可以在這個(gè)對(duì)象里面用put方法,把對(duì)象加到里面,前臺(tái)就可以通過el表達(dá)式拿到颁糟。
18、SpringMvc中有個(gè)類把視圖和數(shù)據(jù)都合并的一起的,叫什么喉悴?
答:叫ModelAndView棱貌。
19、怎么樣把ModelMap里面的數(shù)據(jù)放入Session里面箕肃?
答:可以在類上面加上@SessionAttributes注解,里面包含的字符串就是要放入session里面的key
20婚脱、SpringMvc怎么和AJAX相互調(diào)用的?
答:
通過Jackson框架就可以把Java里面的對(duì)象直接轉(zhuǎn)化成Js可以識(shí)別的Json對(duì)象勺像。
具體步驟如下 :
1)加入Jackson.jar
2)在配置文件中配置json的映射
3)在接受Ajax方法里面可以直接返回Object,List等,但方法前面要加上@ResponseBody注解
21障贸、當(dāng)一個(gè)方法向AJAX返回特殊對(duì)象,譬如Object,List等,需要做什么處理?
答:要加上@ResponseBody注解
22吟宦、SpringMvc里面攔截器是怎么寫的
答:有兩種寫法,一種是實(shí)現(xiàn)接口,另外一種是繼承適配器類,然后在SpringMvc的配置文件中配置攔截器即可:
<mvc:interceptors>
<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>
23篮洁、講下SpringMvc的執(zhí)行流程
答:系統(tǒng)啟動(dòng)的時(shí)候根據(jù)配置文件創(chuàng)建spring的容器, 首先是發(fā)送http請(qǐng)求到核心控制器disPatherServlet,spring容器通過映射器去尋找業(yè)務(wù)控制器殃姓,使用適配器找到相應(yīng)的業(yè)務(wù)類袁波,在進(jìn)業(yè)務(wù)類時(shí)進(jìn)行數(shù)據(jù)封裝,在封裝前可能會(huì)涉及到類型轉(zhuǎn)換蜗侈,執(zhí)行完業(yè)務(wù)類后使用ModelAndView進(jìn)行視圖轉(zhuǎn)發(fā)篷牌,數(shù)據(jù)放在model中,用map傳遞數(shù)據(jù)進(jìn)行頁面顯示踏幻。