Model-View-Controller,一種軟件設計思想,將軟件分為三層:模型層、視圖層、控制層。
模型層:負責處理具體的業務。
視圖層:與用戶交互的界面。
控制層:將請求分發給指定的業務邏輯。
Spring MVC是Spring對MVC思想的一種實現,建立在Spring核心功能之上,功能強大,使用方便。
SpringMVC框架的優勢
1)SpringMVC簡化web程序開發;
2)SpringMVC效率很好(單例模式);
3)SpringMVC提供了大量擴展點,方便程序員自定義功能;
①.DispatcherServlet:核心控制器(SpringMVC的心臟)中轉作用;
②.HandlerMapping:映射處理器(處理請求,找到對應的Handler);
③.HandlerAdapter:處理器適配,(Handler實現有兩種方法,所以必須適配時候才能運行);
④.Handler:(Controller層):處理器
⑤.ViewResolver:視圖解析器 通過視圖的名稱,解析具體的視圖對象(jsp文件);
⑥.View:具體的視圖技術進行渲染;
使用SpringMVC框架
添加依賴
IOC+AOP
org.springframework spring-webmvc ${spring.version}
配置
1.配置核心控制器 (web.xml)
springMVC org.springframework.web.servlet.DispatcherServlet 1 springMVC /
2. springMVC的配置文件
默認在WEB-INF/servlet名稱-servlet.xml,如springMVC-servlet.xml文件
3.配置HandlerAdapter
4.配置Handler
5.視圖解析器
6.使用具體的視圖技術渲染
基於註解方式使用SpringMVC
添加依賴
IOC+AOP
org.springframework spring-webmvc ${spring.version}
可以採用
靜態資源配置
1.如果DispatcherServlet配置了url-pattern '/' ,那麼靜態資源放在webapp下也訪問不到,DispatcherServlet覆蓋了Tomcat提供的用於訪問靜態資源的servlet(DefaultServlet);
可以用
①.只能訪問webapp下的靜態資源;
②.和tomcat耦合(和服務器耦合);
2.springMVC提供靜態資源訪問:
直接跳轉頁面
等同於:
@RequestMapping("/showRegister")public String showRegister(){ return "register";}
常用註解
@Controller 將一個類映射為Controller層
@RestController //將一個類映射為Controller層(方法返回的都是數據模型)
@RequestMapping //將一個方法映射到URL上
@GetMapping //將一個方法映射到URL上(只能為Get請求)
@PostMapping //將一個方法映射到URL上(只能為Post請求)
@RequestParam //將請求參數封裝到方法參數上
@RequestHeader //將請求頭部封裝到方法參數上
@CookieValue //將Cookie封裝到方法參數上
@PathVariable //將URL中的值封裝到方法參數上
@RequestBody //將請求體(POST請求)中的值封裝到方法參數上
@ModelAttrubite //將請求參數封裝為對象(在請求作用域中,參數和方法級別)
@SessionAttributes//將請求參數封裝為對象(在Session作用域中,類級別)
@Valid //後臺校驗
@InitBinder //(Spring2.5及之前版本會使用)
@ResponseBody //將方法返回值寫入到ResponseBody中
@ExceptionHandler //同一異常處理
@ControllerAdvice //Controller的通知
Controller層方法的寫法
1.方法的返回值
ModelAndView 模型和視圖 String 視圖 字符串 -->視圖名 forward:url -->轉發 redirect:url -->重定向 void 視圖(用於請求url為視圖名稱)Object 模型
2.URL的寫法
@RequestMapping()
可以添加在類上-->表示包的概念,訪問這個類下的所有的方法都需要添加一個前綴
1.直接寫URL 如@RequestMapping("/m1")
2.ant風格
* 單層路徑** 多層路徑? 單個字符
3.rest風格
{name}{name:正則表達式}
@RequestMapping(path={"/url1","/url2"})
@RequestMapping(path="/url",method=RequestMethod.POST)
method指定請求方式
@RequestMapping(path="/url",params={"name"})
表示該請求必須帶一個name的參數
@RequestMapping(path="/url",headers={"User-Agent"})
表示該請求必須帶一個頭部信息User-Agent(瀏覽器信息)
Controller層方法參數
1.JAVA EE主鍵
HttpServletRequest/HttpServletResponseHttpSession
2.IO流
InputStreamOutputStreamReaderWriter
3.Spring組件
SessionStatusWebRequestNativeWebRequest
4.自定義類型,如User (請求參數中的key需要和對象中的setter方法一致)
5.獲取錯誤信息,Errors/BindingResult
6.用於傳遞數據,Model Map ModelMap
7.基本類型和字符串類型
默認來源請求參數 (@RequestParam)
如果想要參數來源於請求頭部可以使用@RequestHeader
如果想要參數來源於cookie可以使用@CookieValue
如果想要參數來源於URL可以使用註解@PathVariable
如果想要參數來源於請求體可以使用註解@RequestBody
數據轉換
方案一:spring2.5及之前版本使用
1.需要在Controller添加一個方法,方法採用@InitBinder
2.這個方法需要一個參數DataBinder
3.DataBinder.registerCustomEditor(Class> clazz,PropertyEditor propEditor>)
方案二:(只能做字符串到其他類型的轉換)
Formatter
1.實現接口Formtter
2.註冊到IOC容器中
- 管理系統中formatter
- 將該coversion交個springMVC使用
方法三:(能做任意類型到其他類型的轉換)
Converter
1.實現接口Converter
2.註冊到IOC容器中
統一異常處理
1.編寫一個類,編寫方法
@ExceptionHandler(Exception.class)public String exception(Exception ex){ return "500";}
2.這個類上添加一個@ControllerAdvice
方法返回json以及xml數據格式
1.方法的返回值為Object,方法需要註解@ResponseBody
2.需要添加一個方法返回值的轉換器(使用的是jackson)
3.提供json處理包
com.fasterxml.jackson.core jackson-core com.fasterxml.jackson.core jackson-databind
使用gson
1.將消息轉換器換為
2.將json處理的依賴修改為
com.google.code.gson gson
使用fastjson
1.將消息轉換器換為
2.將json處理的依賴包
com.alibaba fastjson
返回xml數據
1.方法返回Object,需要註解@ResponseBody,還需要在@RequestMapping(produces="application/xml")
2.需要添加消息轉換器(這個轉換需要在json轉換器的前面)
3.需要添加一個依賴
org.springframework spring-oxm
注意:如果配置了json轉換器,這個時候以前返回為String的方法,返回的時候會默認添加一對引號。
可以在消息轉換器中添加一個字符串的轉換器(這個轉換需要在json轉換器的前面)
自定義消息轉換器
1.繼承抽象類AbstractHttpMessageConverter
2.將消息轉換器配置到SpringMVC中
攔截器
實現接口
HandlerInterceptor/WebRequestInterceptor
preHandler 在handler方法之前調用。返回值表示true,不攔截false, 攔截(不進入handler方法)
postHandler 在handler方法之後調用
afterCompleition 在handler方法完成之後
配置
在mvc的配置文件中
1.表示攔截系統中所有的請求
2.只需要攔截某些URL
3.排除一些url
文件上傳下載
1.jsp需要二進制提交
enctype="multipart/form-data"
2.Controller方法需要參數接收,參數的類型CommonsMultipartFile
3.需要文件上傳的解析器
4.需要添加依賴commons-fileupload
commons-fileupload commons-fileupload
文件下載
PS:只要mvc最後url是帶後綴的,SpringMVC會將其截取掉。
//告訴瀏覽器拿到資源不要打開,下載
response.addHeader("Content-Disposition","attachment;filename="+fileName);
作者:MrXiaoAndDonghttps://www.cnblogs.com/MrXiaoAndDong/p/SpringMVC.html
閱讀更多 java面試筆試 的文章