深刻學習SpringMVC以及學習總結

1、優勢:程序員

1.SpringMVC簡化web程序開發;web

2.SpringMVC效率很好(單例模式);正則表達式

3.SpringMVC提供了大量擴展點,方便程序員自定義功能;spring

 

若是想學習Java工程化、高性能及分佈式、深刻淺出。微服務、Spring,MyBatis,Netty源碼分析的朋友能夠加個人Java高級交流:854630135,羣裏有阿里大牛直播講解技術,以及Java大型互聯網技術的視頻免費分享給你們。json

①.DispatcherServlet:核心控制器(springMVC的心臟)中轉做用;瀏覽器

②.HandlerMapping:映射處理器(處理請求,找到對應的Handler);spring-mvc

③.HandlerAdapter:處理器適配,(Handler實現有兩種方法,因此必須適配時候才能運行);tomcat

④.Handler:(Controller層):處理器服務器

⑤.ViewResolver:視圖解析器 經過視圖的名稱,解析具體的視圖對象(jsp文件);cookie

⑥.View:具體的視圖技術進行渲染;

2、使用SpringMVC

 
添加依賴 IOC+AOP <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>${spring.version}</version>此處版本能夠根據須要選擇 </dependency> 配置 1.配置核心控制器 (web.xml) <!--1.核心控制器--> <servlet> <servlet-name>springMVC</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>springMVC</servlet-name> <!--包含靜態資源,也須要攔截 *.do、*.action攔截不到靜態資源--> <url-pattern>/</url-pattern> </servlet-mapping> 2. springMVC的配置文件 默認在WEB-INF/servlet名稱-servlet.xml springMVC-servlet.xml <!--2.配置HandlerMapping--> <bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"/> <!--3.配置HandlerAdapter--> <bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter"/> <!--4.配置Handler--> <bean name="/hello" class="org.itany.controller.HelloController"/> <!--5.視圖解析器--> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="prefix" value="/WEB-INF/view/"/> <property name="suffix" value=".jsp"/> <!--6.使用具體的視圖技術渲染--> <property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/> </bean>

3、基於註解方式使用SpringMVC

若是想學習Java工程化、高性能及分佈式、深刻淺出。微服務、Spring,MyBatis,Netty源碼分析的朋友能夠加個人Java高級交流:854630135,羣裏有阿里大牛直播講解技術,以及Java大型互聯網技術的視頻免費分享給你們。

 
1.添加依賴 IOC+AOP <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>${spring.version}</version>此處版本能夠根據須要選擇 </dependency> 2.配置DispatcherServlet 1.配置核心控制器 (web.xml) <!--1.核心控制器--> <servlet> <servlet-name>springMVC</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>springMVC</servlet-name> <!--包含靜態資源,也須要攔截 *.do、*.action攔截不到靜態資源--> <url-pattern>/</url-pattern> </servlet-mapping> 3.SpringMVC的配置文件(自定義配置文件) 須要在servlet中添加一個參數 <!--自定義springMVC的配置文件--> <init-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:spring-mvc.xml</param-value> </init-param> <!--2 配置HandlerMapping--> <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping"/> <!--3 配置HandlerAdapter--> <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter"/> <!--4 配置Handler--> <context:component-scan base-package="org.itany.controller"/> <!--5 配置視圖解析器--> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="prefix" value="/WEB-INF/view/"></property> <property name="suffix" value=".jsp"/> <!--6 視圖渲染技術--> <property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/> </bean> 以上配置中:能夠採用 <mvc:annotation-driver/>替代咱們的第二、3步配置

4、靜態資源配置

1.若是DispatcherServlet配置了url-pattern '/' ,那麼靜態資源放在webapp下也訪問不到,DispatcherServlet覆蓋了Tomcat提供的用於訪問靜態資源的servlet(DefaultServlet);

能夠用<mvc:default-servlet-handler/>去打開靜態資源訪問方式;

①.只能訪問webapp下的靜態資源;

②.和tomcat耦合(和服務器耦合);

2.springMVC提供靜態資源訪問:

<mvc:resources mapping="頁面靜態資源的映射" location="靜態資源的目錄路徑"/>

5、直接跳轉頁面

<mvc:view-controller path="/showRegister" view-name="register"/>

等同於:

 
@RequestMapping("/showRegister") public String showRegister(){ return "register"; }

6、經常使用註解

 
@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的通知

7、Controller層方法的寫法

若是想學習Java工程化、高性能及分佈式、深刻淺出。微服務、Spring,MyBatis,Netty源碼分析的朋友能夠加個人Java高級交流:854630135,羣裏有阿里大牛直播講解技術,以及Java大型互聯網技術的視頻免費分享給你們。

 
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(瀏覽器信息)

8、Controller層方法參數

 
* 1.JAVA EE主鍵 HttpServletRequest/HttpServletResponse HttpSession 2. IO流 InputStream OutputStream Reader Writer 3. Spring組件 SessionStatus WebRequest NativeWebRequest *4.自定義類型 如User (請求參數中的key須要和對象中的setter方法一致) *5.獲取錯誤信息 Errors/BindingResult *6.用於傳遞數據 Model Map ModelMap *7.基本類型和字符串類型 默認來源請求參數 (@RequestParam) 若是想要參數來源於請求頭部 能夠使用@RequestHeader 若是想要參數來源於cookie 能夠使用@CookieValue 若是想要參數來源於URL 能夠使用註解@PathVariable 若是想要參數來源於請求體 能夠使用註解@RequestBody

9、數據轉換

 
方案一:spring2.5及以前版本使用 1.須要在Controller添加一個方法,方法採用@InitBinder 2.這個方法須要一個參數DataBinder 3.DataBinder.registerCustomEditor(Class<?> clazz,PropertyEditor propEditor>) 方案二:(只能作字符串到其餘類型的轉換) Formatter 1.實現接口Formtter 2.註冊到IOC容器中 - 管理系統中formatter <!--用來管理自定義的formatter和converter--> <bean id="conversionService" class="org.springframework.format.support.FormattingConversionServiceFactoryBean"> <property name="formatters"> <set> <bean class="org.itany.formatter.String2DateFormatter"> <constructor-arg value="yyyy-mm-dd"></constructor-arg> </bean> </set> </property> </bean> - 將該coversion交個springMVC使用 <mvc:annotation-driven conversion-service="conversionService"/> 方法三:(能作任意類型到其餘類型的轉換) Converter 1.實現接口Converter 2.註冊到IOC容器中

10、統一異常處理

若是想學習Java工程化、高性能及分佈式、深刻淺出。微服務、Spring,MyBatis,Netty源碼分析的朋友能夠加個人Java高級交流:854630135,羣裏有阿里大牛直播講解技術,以及Java大型互聯網技術的視頻免費分享給你們。

 
1.編寫一個類 編寫方法 @ExceptionHandler(Exception.class) public String exception(Exception ex){ return "500"; } 2.這個類上添加一個@ControllerAdvice

11、方法返回json以及xml數據格式

 
1.方法的返回值爲Object,方法須要註解@ResponseBody 2.須要添加一個方法返回值的轉換器(使用的是jackson) <mvc:annotation-driven conversion-service="conversionService"> <!--消息轉換器 告訴springMVC咱們方法返回值返回什麼格式--> <mvc:message-converters> <bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter"/> </mvc:message-converters> </mvc:annotation-driven> 3.提供json處理包 <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-core</artifactId> </dependency> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> </dependency> 使用gson 1.將消息轉換器換爲 <bean class="org.springframework.http.converter.json.GsonHttpMessageConverter"/> 2.將json處理的依賴修改成 <dependency> <groupId>com.google.code.gson</groupId> <artifactId>gson</artifactId> </dependency> 使用fastjson 1.將消息轉換器換爲 <bean class="com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter4"/> 2.將json處理的依賴包 <dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> </dependency> 若是想要返回爲xml 1.方法返回Object,須要註解@ResponseBody 還須要在@RequestMapping(produces="application/xml") 2.須要添加消息轉換器(這個轉換須要在json轉換器的前面) <class="org.springframework.http.converter.xml.Jaxb2RootElementHttpMessageConverter"/> 3.須要添加一個依賴 <dependency> <groupId>org.springframework</groupId> <artifactId>spring-oxm</artifactId> </dependency> 注意:若是配置了json轉換器,這個時候之前返回爲String的方法,返回的時候會默認添加一對引號。 能夠在消息轉換器中添加一個字符串的轉換器(這個轉換須要在json轉換器的前面) <bean class="org.springframework.http.converter.StringHttpMessageConverter"/>

12、自定義消息轉換器

 
1.繼承抽象類AbstractHttpMessageConverter 2.將消息轉換器配置到SpringMVC中 <mvc:annotation-driver> <mvc:message-converters> <bean class="自定義的消息轉換器"/> </mvc:message-converters> </mvc:annotation-driver>

十3、攔截器

 
1.實現接口 HandlerInterceptor/WebRequestInterceptor preHandler 在handler方法以前調用 返回值表示true,不攔截 false, 攔截(不進入handler方法) postHandler 在handler方法以後調用 afterCompleition 在handler方法完成以後 2.配置 在mvc的配置文件中 1.表示攔截系統中全部的請求 <mvc:interceptors> <bean class="攔截器"/> </mvc:interceptors> 2.只須要攔截某些URL <mvc:interceptors> <mvc:interceptor> <mvc:mapping path="/url/**"/> <bean class="org.itany.interceptors.ControllerInterceptor"/> </mvc:interceptor> </mvc:interceptors> 3.排除一些url <mvc:interceptors> <mvc:interceptor> <mvc:mapping path="/**"/> <mvc:exclude-mapping path="/url/**"/> <bean class="org.itany.interceptors.ControllerInterceptor"/> </mvc:interceptor> </mvc:interceptors>

十4、文件上傳下載

 
1.jsp須要二進制提交 enctype="multipart/form-data" 2.Controller方法須要參數接收,參數的類型CommonsMultipartFile 3.須要文件上傳的解析器 <!--文件上傳--> <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"> <property name="maxUploadSize" value="10000000000"/> <property name="defaultEncoding" value="UTF-8"/> </bean> 4.須要添加依賴commons-fileupload <dependency> <groupId>commons-fileupload</groupId> <artifactId>commons-fileupload</artifactId> </dependency> 文件下載 PS:只要mvc最後url是帶後綴的,SpringMVC會將其截取掉。 //告訴瀏覽器拿到資源不要打開,下載 response.addHeader("Content-Disposition","attachment;filename="+fileName);

若是想學習Java工程化、高性能及分佈式、深刻淺出。微服務、Spring,MyBatis,Netty源碼分析的朋友能夠加個人Java高級交流:854630135,羣裏有阿里大牛直播講解技術,以及Java大型互聯網技術的視頻免費分享給你們。

相關文章
相關標籤/搜索