SpringMVC常見面試題總結【概念】
什麼是Spring MVC?介紹你對SpringMVC的理解。
springmvc是一個基於java實現了mvc設計模式的輕量級web框架,通過把model,view,controller分離,將web層進行解耦,把複雜的web應用分成幾部分,簡化開發。
SpringMVC的流程?
1.使用者傳送請求被前端DispatcherServlet捕獲, 2.DispatcherServlet捕獲到請求後,呼叫HandlerMapping處理對映器,請求獲取Handle 3.處理器對映器跟據請求url找到具體的處理器,生成處理器物件及處理器攔截器並返回給DispatcherServlet 4.DispatcherServlet呼叫HandlerAdapter處理器介面卡 5.HandlerAdapter經過適配呼叫handler 6.Handler執行完成返回ModelAndView 7.HandlerApdater將Handler執行結果ModelAndView返回給DispatcherServlet 8.DispatcherServlet講講ModelAndView傳給ViewResolver檢視解析器進行解析 9.ViewResolver解析後返回具體View 10.DispatcherServlet對View進行檢視渲染(即將模型資料充至檢視中)然後DispatcherServlet響應使用者
SpringMVC的優點:
與spring框架繼承,支援各種請求資源的對映策略,支援各種檢視技術
SpringMVC的主要元件?
前端控制器DispatcherServlet: 作用:接受請求,響應結果,相當於轉發器 處理器對映器HandlerMapping 作用:跟據請求的·url來查詢Handler 處理器介面卡HandlerAdapter 處理器Handler(需要程式設計師開發) 檢視解析器 ViewResolver(不需要程式設計師開發) 作用:進行檢視的解析,根據檢視邏輯名解析成真正的檢視檢視View(需要程式設計師開發jsp)
SpringMVC怎樣設定重定向和轉發?
1.轉發:在返回值前面加“forward” 2.重定向:在返回值前面加:“redirect”
SpringMVC怎麼樣和AJAX相互呼叫的?
通過jackson框架把java裡面的物件直接轉化為js可以識別的json物件,具體步驟: 加入jar包:jackson.jar 在配置檔案中配置json的對映 在接受Ajax方法裡面直接返回list等,但在方法前面加@ResponseBody註解
如何解決POST請求中文亂碼問題,GET又如處理?
1.解決post請求亂碼方法 在web.xml配置一個過濾器,設定成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請求解決方法 修改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")
ISO8859-1是tomcat預設編碼,需要將tomcat編碼後的內容按utf-8編碼。
SpringMVC的異常處理?
可以將異常拋給Spring框架,有Spring處理,我們只需要配置簡單的異常處理器,在異常處理器中新增檢視頁面即可。
SpringMVC常用的註解有那些?
@RequestMapping:用於處理請求 url 對映的註解,可用於類或方法上。用於類上,則表示類中的所有響應請求的方法都是以該地址作為父路徑。
@RequestBody:註解實現接收http請求的json資料,將json轉換為java物件。
@ResponseBody:註解實現將conreoller方法返回物件轉化為json物件響應給客戶。
SpringMvc的控制器是不是單例模式,如果是,有什麼問題,怎麼解決
是單例模式,所以在多執行緒訪問的時候存線上程安全的問題。
如果在攔截請求中,我想攔截get方式提交的方法怎麼配置?
可以在@RequestMapping註解裡面加上method=RequestMethod.GET
怎樣在方法裡面得到request,或者session?
直接在方法形參宣告request,SpringMVC就自動就把request物件傳入
如何在攔截的方法裡面得到前臺傳入的引數?
在形參裡面宣告這個引數,名字和傳過來的引數必須一樣
如果前臺有很多個引數傳入,並且這些引數都是一個物件的,那麼怎麼樣快速得到這個物件?
直接在方法中宣告這個物件,SpringMvc就自動會把屬性賦值到這個物件裡面。
SpingMVC中函式的返回值是什麼?
返回值可以有很多型別,有String, ModelAndView。ModelAndView類把檢視和資料都合併的一起的,但一般用String比較好
SpringMVC用什麼物件從後臺向前臺傳遞引數的?
用modelmap物件,可以在這個物件裡面呼叫put方法,把物件加到裡面,前臺就可以通過el表示式拿到。
怎麼樣把ModelMap裡面的資料放入Session裡面?
可以在類加註解@SessionAttributes,裡面包含的字串要放入session裡面的key
如何在spring mvc實現RESTful 服務
1.匯入jackson2包
2,開啟註解驅動mvc:annotation-driven/
SpringMvc中有個類把檢視和資料都合併的一起的,叫什麼?
ModelAndView
SpringMvc裡面攔截器是怎麼寫的
有兩種寫法,一種是實現HandlerInterceptor介面,另外一種是繼承介面卡類,,接著在介面方法當中,實現處理邏輯;然後在SpringMvc的配置檔案中配置攔截器即可:
<!-- 攔截器的配置 -->
<mvc:interceptors>
<mvc:interceptor>
<!-- ** 表示當前目錄及其子目錄路徑 -->
<mvc:mapping path="/**"/>
<bean class="com.dpb.interceptor.FirstIntercepter"></bean>
</mvc:interceptor>
</mvc:interceptors>
介紹SpringMVC restful風格:
RESTful是一種架構的規範與約束、原則,符合這種規範的架構就是RESTful架構 在RESTful介面中,所有的方法都是返回JSON,沒有返回頁面的(ModelAndView),因此,所有的方法上都需要新增@ResponseBody註解。一個替代的簡化方案,是使用 @RestController 代替@Controller。@RestController實際上是一個組合註解,是@Controller和@