靈魂三問:它是啥?它包含啥?他怎麼用?
1,springmvc是啥?
它是一個輕量級的web架構,它将Mondl,view,Controller層分離,将web解耦,簡化開發,提升開發效率。
它的重要元件:
前端控制器(DispatcherServlet):用于接收請求、響應結果,相當于轉發器,通過DispatcherServlet 可以減少與其它元件之間的耦合度。
處理器映射器(HandlerMapping):根據請求的URL來查找Handler
處理器擴充卡(HandlerAdapter):按照HandlerAdapter要求的規則去編寫Handler,擴充卡才可以正确的去執行。
處理器(Handler):主要負責處理前端請求,完成業務邏輯,生成ModelAndView對象傳回給HandlerAdapter
視圖解析器 (ViewResolver):進行視圖的解析,根據視圖邏輯名解析成真正的視圖
視圖(View):是一個接口, 它的實作類支援不同的視圖類型,比如jsp,freemarker,pdf等等
2,springmvc的執行流程?
(1)使用者發送請求至前端控制器DispatcherServlet;
(2)調用HandlerMapping處理器映射器,請求擷取Handler;
(3)處理器映射器根據請求url找到具體的處理器Handler,生成處理器對象及處理器攔截器(如果有則生成),一并傳回給DispatcherServlet;
(4)DispatcherServlet 調用 HandlerAdapter處理器擴充卡,請求執行Handler;
(5)HandlerAdapter 經過适配調用 具體處理器進行處理業務邏輯;
(6)Handler執行完成傳回ModelAndView;
(7)HandlerAdapter将Handler執行結果ModelAndView傳回給DispatcherServlet;
(8)DispatcherServlet将ModelAndView傳給ViewResolver視圖解析器進行解析;
(9)ViewResolver解析後傳回具體View;
(10)DispatcherServlet對View進行渲染視圖(即将模型資料填充至視圖中)
(11)DispatcherServlet響應使用者。
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsISPrdEZwZ1Rh5WNXp1bwNjW1ZUba9VZwlHdsATOfd3bkFGazxCMx8VesATMfhHLlN3XnxCMwEzX0xiRGZkRGZ0Xy9GbvNGLpZTY1EmMZVDUSFTU4VFRR9Fd4VGdsYTMfVmepNHLrJXYtJXZ0F2dvwVZnFWbp1zczV2YvJHctM3cv1Ce-cmbw5CO2QWYmRWZ3Y2MlFDN4ATY0I2NjFWZmdTZzYWO4QDZm9CXwMzLcdDMxIDMy8CXn9Gbi9CXzV2Zh1WavwVbvNmLvR3YxUjLzM3Lc9CX6MHc0RHaiojIsJye.png)
3,springmvc的優點?
3.1 可以支援個種視圖技術,不僅僅局限于jsp
3.2 和spring內建
3.3支援各種請求資源的映射
3.4清晰的角色配置設定:前端控制器(dispatcherServlet) ,請求到處理器映射(handlerMapping),處理器擴充卡(HandlerAdapter),視圖解析器(ViewResolver)
4,springmvc如何設定轉發和重定向的?
(1)轉發:在傳回值前面加"forward:",譬如"forward:user.do?name=method4"
(2)重定向:在傳回值前面加"redirect:",譬如"redirect:http://www.baidu.com"
5,springmvc是單列模式?多線程通路如何解決?
是單例模式。在用多線程通路是存線上程安全問題,不能用同步代碼塊的方式解決,會影響性能。可以在控制器不要寫成員字段。
6,SpingMVC中的控制器的注解一般用哪個,有沒有别的注解可以替代?
SpringMVC中的控制器一般使用@Controller注解表示,也可以使用@RestController注解。@RestController注解相當于@ResponseBody注解 + @Controller注解。除此之外,一般不用别的注解代替。
7,@Controller 在springmvc中的作用?
@Controller咋控制層的作用是處理由discatcherServlet分發的請求,把對應的求求分裝成,Modle,在發個視圖層進行展示。
‘8,@RequestMapping的作用?
處理請求位址映射,可以作用方法上,類上。
13. Spring MVC常用的注解有哪些?
@RequestMapping注解:用于處理請求位址的映射,可用于類或方法上
@RequestBody注解:接收Http請求的Json資料,将Json轉換為java對象。
@ResponseBody注解:将Conreoller方法傳回的對象,轉化為Json對象響應給用戶端。
14. @ResponseBody注解的作用
該注解用于将Conreoller方法傳回的對象,轉化為Json對象響應給用戶端。
15. @PathVariable注解和@RequestParam注解的差別?
@PathVariable注解:用來獲得請求的URL中的動态參數,從路徑中擷取變量。
@RequestParam注解:從請求裡面擷取參數
16. SpringMVC中如何解決POST請求中文亂碼問題,GET請求的又如何處理呢?
解決post請求亂碼問題:在web.xml中配置一個CharacterEncodingFilter過濾器,并設定編碼為utf-8
get請求中文參數出現亂碼解決方法:在tomcat配置檔案添加與項目工程編碼一緻的編碼類型