更新時間:2022-12-27 15:03:39 來源:動力節(jié)點(diǎn) 瀏覽1230次
1、什么是Spring MVC ?簡單介紹下你對springMVC的理解?
Spring MVC是一個基于Java的實(shí)現(xiàn)了MVC設(shè)計(jì)模式的請求驅(qū)動類型的輕量級Web框架,通過把Model,View,Controller分離,將web層進(jìn)行職責(zé)解耦,把復(fù)雜的web應(yīng)用分成邏輯清晰的幾部分,簡化開發(fā),減少出錯,方便組內(nèi)開發(fā)人員之間的配合。
2、SpringMVC的流程?
1、用戶發(fā)起請求到控制器 DispatcherServlet(前端控制器)
2、前端控制器去handlerMapper查找Handler對象
3、HandlerMapper返回HandlerExecutorChain 執(zhí)行鏈(包含兩部分內(nèi)容:Handler ,攔截器集合)
4、前端控制器,通過HandlerAdapter 適配器執(zhí)行 Handler對象
5、Handler處理具體的業(yè)務(wù)邏輯
6、Handler處理完業(yè)務(wù)邏輯之后,返回ModelAndView 其中的View是視圖名稱
7、將ModelAndView返回前端控制器
8、前端控制器,通過ModelAndView 中的視圖名稱。在視圖解析器中查找視圖
9、返回真正的View 視圖對象
10、渲染視圖
11、返回用戶響應(yīng)
3、Springmvc的優(yōu)點(diǎn):
(1)可以支持各種視圖技術(shù),而不僅僅局限于JSP;
(2)與Spring框架集成(如IoC容器、AOP等);
(3)清晰的角色分配:前端控制器(dispatcherServlet) , 請求到處理器映射(handlerMapping), 處理器適配器(HandlerAdapter), 視圖解析器(ViewResolver)。
(4) 支持各種請求資源的映射策略。
4、Spring MVC的主要組件?
(1)前端控制器 DispatcherServlet(不需要程序員開發(fā))
作用:接收請求、響應(yīng)結(jié)果,相當(dāng)于轉(zhuǎn)發(fā)器,有了DispatcherServlet 就減少了其它組件之間的耦合度。
(2)處理器映射器HandlerMapping(不需要程序員開發(fā))
作用:根據(jù)請求的URL來查找Handler
(3)處理器適配器HandlerAdapter
注意:在編寫Handler的時候要按照HandlerAdapter要求的規(guī)則去編寫,這樣適配器HandlerAdapter才可以正確的去執(zhí)行Handler。
(4)處理器Handler(需要程序員開發(fā))
(5)視圖解析器 ViewResolver(不需要程序員開發(fā))
作用:進(jìn)行視圖的解析,根據(jù)視圖邏輯名解析成真正的視圖(view)
(6)視圖View(需要程序員開發(fā)jsp)
View是一個接口, 它的實(shí)現(xiàn)類支持不同的視圖類型(jsp,freemarker,pdf等等)
5、springMVC和struts2的區(qū)別有哪些?
(1)springmvc的入口是一個servlet即前端控制器(DispatchServlet),而struts2入口是一個filter過慮器(StrutsPrepareAndExecuteFilter)。
(2)springmvc是基于方法開發(fā)(一個url對應(yīng)一個方法),請求參數(shù)傳遞到方法的形參,可以設(shè)計(jì)為單例或多例(建議單例),struts2是基于類開發(fā),傳遞參數(shù)是通過類的屬性,只能設(shè)計(jì)為多例。
(3)Struts采用值棧存儲請求和響應(yīng)的數(shù)據(jù),通過OGNL存取數(shù)據(jù),springmvc通過參數(shù)解析器是將request請求內(nèi)容解析,并給方法形參賦值,將數(shù)據(jù)和視圖封裝成ModelAndView對象,最后又將ModelAndView中的模型數(shù)據(jù)通過reques域傳輸?shù)巾撁妗sp視圖解析器默認(rèn)使用jstl。
6、SpringMVC怎么樣設(shè)定重定向和轉(zhuǎn)發(fā)的?
(1)轉(zhuǎn)發(fā):在返回值前面加"forward:",譬如"forward:user.do?name=method4"
(2)重定向:在返回值前面加"redirect:",譬如"redirect:http://www.baidu.com"
7、SpringMvc怎么和AJAX相互調(diào)用的?
通過Jackson框架就可以把Java里面的對象直接轉(zhuǎn)化成Js可以識別的Json對象。具體步驟如下 :
(1)加入Jackson.jar
(2)在配置文件中配置json的映射
(3)在接受Ajax方法里面可以直接返回Object,List等,但方法前面要加上@ResponseBody注解。
8、如何解決POST請求中文亂碼問題,GET的又如何處理呢?
(1)解決post請求亂碼問題:
在web.xml中配置一個CharacterEncodingFilter過濾器,設(shè)置成utf-8;
<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)get請求中文參數(shù)出現(xiàn)亂碼解決方法有兩個:
①修改tomcat配置文件添加編碼與工程編碼一致,如下:
<ConnectorURIEncoding="utf-8" connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443"/>
②另外一種方法對參數(shù)進(jìn)行重新編碼:
String userName = new String(request.getParamter("userName").getBytes("ISO8859-1"),"utf-8")
ISO8859-1是tomcat默認(rèn)編碼,需要將tomcat編碼后的內(nèi)容按utf-8編碼。
9、Spring MVC的異常處理 ?
答:可以將異常拋給Spring框架,由Spring框架來處理;我們只需要配置簡單的異常處理器,在異常處理器中添視圖頁面即可。
10、SpringMvc的控制器是不是單例模式,如果是,有什么問題,怎么解決?
答:是單例模式,所以在多線程訪問的時候有線程安全問題,不要用同步,會影響性能的,解決方案是在控制器里面不能寫字段。
11、 SpringMVC常用的注解有哪些?
@RequestMapping:用于處理請求 url 映射的注解,可用于類或方法上。用于類上,則表示類中的所有響應(yīng)請求的方法都是以該地址作為父路徑。
@RequestBody:注解實(shí)現(xiàn)接收http請求的json數(shù)據(jù),將json轉(zhuǎn)換為java對象。
@ResponseBody:注解實(shí)現(xiàn)將conreoller方法返回對象轉(zhuǎn)化為json對象響應(yīng)給客戶。
12、SpingMvc中的控制器的注解一般用那個,有沒有別的注解可以替代?
答:一般用@Controller注解,也可以使用@RestController,@RestController注解相當(dāng)于@ResponseBody + @Controller,表示是表現(xiàn)層,除此之外,一般不用別的注解代替。
以上就是“對我們非常有幫助的spring mvc面試題”,你能回答上來嗎?如果想要了解更多的Java面試題相關(guān)內(nèi)容,可以關(guān)注動力節(jié)點(diǎn)Java官網(wǎng)。
相關(guān)閱讀
初級 202925
初級 203221
初級 202629
初級 203743