上篇博客咱們詳細的聊了《JavaEE開發之SpringMVC中的靜態資源映射及服務器推送技術》,本篇博客依然是JavaEE開發中的內容,咱們就來聊一下SpringMVC中的自定義消息轉發器(HttpMessageConverter)和SpringMVC中的文件上傳。消息轉發器在平常開發中是比較經常使用的,其能夠靈活的將用戶發過來的消息按照自定義的格式進行解析,而後將解析的數據映射成Model,下方會給出自定義消息轉發器的詳細內容。聊完消息轉發器,咱們還會聊一下Spring中MVC的文件上傳的操做。詳細的內容請看下方介紹。javascript
1、自定義消息轉發器html
接下來咱們將實現自定義消息轉發器,在自定義消息轉發器時,咱們須要基礎Springframework中的AbstractHttpMessageConverter這個抽象類。這個抽象類中就定義着咱們自定義消息轉發器所須要的方法。咱們將這些方法進行重寫就好。java
1.建立消息轉發器的類jquery
下方就是咱們建立自定義消息轉發器的過程,咱們將其命名爲CustomMessageConverter類,以下所示:git
接下來咱們就來聊一下CustomMessageConverter中的內容,下方代碼段就是CustomMessageConverter類中的部份內容。在繼承類時,咱們將泛型指定爲StudentModel類,而後在該類中的構造器中,咱們建立了一個新的媒體類型。該媒體類型就是咱們本身定義的,而且指定了相應的編碼方式。在重寫的support()方法中,咱們來判斷所支持的Class是否與StudentModel的Class相同。以下所示:github
而後下方兩個重寫的方法是負責數據的輸入和輸出的方法。在readInternal()方法中,就負責接收客戶端所發過來的消息,並按照咱們自定義的媒體類型進行解析。此處咱們能夠將新的枚舉類型的格式按照「aaa-bbb-ccc」的方式進行傳輸,也就是參數之間用「-」進行拆分,而解析的時候咱們就按照此規則進行拆分,而後賦值給相應的Model對象,而且將該對象進行返回。web
而輸出方法writeInternal()中的一個參數就是上面輸入方法所返回的Model對象,咱們能夠在該方法中,根據用戶所提供的信息,給出輸出值。此處,咱們將數據提供的數據前方加了「hello」進行了返回,以下所示。ajax
二、Spring配置自定義消息轉發器spring
建立完消息轉發器的類後,接下來,咱們就得在Spring配置文件中進行擴展配置。下方的代碼段就是Spring配置文件中對上述自定義消息轉發器的配置,在重寫的extendMessageConverters()方法中,將上述自定義的消息轉發對象進行添加便可,具體代碼以下所示。服務器
三、建立上述消息轉發器的測試控制器
上面算是咱們的消息轉發器的東西搞定了,接下來,咱們就該對其進行測試了。下方代碼段就是咱們建立的用來測試自定義消息轉發器的測試Controller,咱們將其命名爲MessageConverterController。咱們在路由設置時,咱們將其媒體類型設置爲「application/x-parameter」類型。以下所示:
1 package com.zeluli.springmvc.web; 2 3 import org.springframework.stereotype.Controller; 4 import org.springframework.web.bind.annotation.RequestBody; 5 import org.springframework.web.bind.annotation.RequestMapping; 6 import org.springframework.web.bind.annotation.ResponseBody; 7 8 import com.zeluli.model.StudentModel; 9 10 @Controller 11 public class MessageConverterController { 12 @RequestMapping(value = "/convert", produces = {"application/x-parameter"}) 13 @ResponseBody 14 public StudentModel converter(@RequestBody StudentModel student) { 15 return student; 16 } 17 }
四、測試頁面的建立
建立完測試類後,接下來咱們就來建立咱們的JSP測試頁面。咱們建立一個message_converter.jsp頁面來像咱們上面的Controller發起請求。在該文件中,主要使用了jQuery中的ajax進行請求的,並且是POST請求,具體以下所示。下方的代碼主要功能就是點擊一次按鈕,進行一次請求,而後將請求的數據添加到HTML文件的節點中,代碼以下所示。
1 <%@ page language="java" contentType="text/html; charset=UTF-8" 2 pageEncoding="UTF-8"%> 3 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 4 <html> 5 <head> 6 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 7 <script type="text/javascript" src="assets/js/jquery.js"></script> 8 <script type="text/javascript"> 9 function req() { 10 $.ajax({ 11 url: "convert", 12 data: "002034-zeluli", 13 type: "POST", 14 contentType: "application/x-parameter", 15 success: function(data){ 16 $("#resp").append("<h3>" + data + "</h3>"); 17 } 18 }); 19 } 20 </script> 21 <title>Insert title here</title> 22 </head> 23 <body> 24 <input type="button" onclick="req();" value="請求"/> 25 <div id = "resp"> 26 </div> 27 28 </body> 29 </html>
而後咱們須要爲上述JSP頁面在Spring的Config文件中爲其配置路由,將訪問路徑路由到上述jsp頁面上。在配置文件中的addViewControllers()方法中添加上下方的代碼片斷:
registry.addViewController("/message_converter").setViewName("/message_converter");
配置好路由後,接下來咱們就能夠對其測試了。下方就是咱們測試的最終結果,以下所示:
2、文件上傳
聊完消息轉發器,接下來咱們就來聊一下SpringMVC中的文件上傳的東西。固然,在SpringMVC中的文件上傳是比較簡單的。下方咱們先在Maven的依賴庫中添加咱們本部分須要的庫、而後在Spring的配置文件中進行配置、而後建立上傳文件的Controller、最後建立上傳頁面的JSP頁面。詳細的內容請看下方。
1.引入上傳文件的依賴庫
首先咱們得引入上傳文件所須要的依賴庫,下方就是咱們在pom.xml配置的依賴庫。一個是負責文件上傳的依賴庫,一個是負責文件IO操做的依賴庫。下方這些依賴庫,咱們均可以在Maven的官網上找到,以下所示:
1 <!-- 文件上傳 --> 2 <!-- https://mvnrepository.com/artifact/commons-fileupload/commons-fileupload --> 3 <dependency> 4 <groupId>commons-fileupload</groupId> 5 <artifactId>commons-fileupload</artifactId> 6 <version>1.3.1</version> 7 </dependency> 8 9 <!-- 簡化io操做 --> 10 <!-- https://mvnrepository.com/artifact/commons-io/commons-io --> 11 <dependency> 12 <groupId>commons-io</groupId> 13 <artifactId>commons-io</artifactId> 14 <version>2.4</version> 15 </dependency> 16
二、配置文件上傳
引入完相應的依賴庫後,咱們得在Spring的配置文件中進行配置後咱們的文件上傳纔可生效。下方就是Spring配置文件中對文件上傳的配置。具體以下所示:
三、建立文件上傳的Controller
引入完文件上傳的依賴庫和配置完後,接下來咱們就該建立文件上傳的Controller。下方咱們建立的名爲UploadFileController的控制器就是負責文件上傳的。下方的咱們指定請求方式是POST方式,而後從請求體重使用@RequestParam("參數名")來獲取相應的上傳文件。獲取到上傳文件後,咱們在經過文件IO操做,將用戶上傳的文件保存到指定目錄,以下所示:
四、建立文件上傳的JPS頁面
文件上傳控制器建立完畢後,接下來咱們就該建立相應的上傳文件的JPS頁面了。固然,下方的HTML代碼比較簡單,就是使用Form表單來進行相應的文件上傳。具體代碼以下所示:
1 <%@ page language="java" contentType="text/html; charset=UTF-8" 2 pageEncoding="UTF-8"%> 3 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 4 <html> 5 <head> 6 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 7 <title>Insert title here</title> 8 </head> 9 <body> 10 <div class="upload"> 11 <form action="upload_file" enctype="multipart/form-data" method="post"> 12 <input type="file" name="file"/><br/> 13 <input type="submit" value="上傳"/> 14 </form> 15 </div> 16 </body> 17 </html>
建立完JSP頁面後,咱們依然要對該JSP頁面進行路由的配置。咱們依然是採用在Spring的配置文件中進行快速的路由配置,以下所示:
上面這些都作好後,接下來咱們就能夠訪問上述配置的文件上傳的路由了,下方就是相應的結果,以下所示。上傳完畢後,會返回OK提示,而且在相應的文件中會出現用戶所上傳的文件,以下所示:
本篇博客就先到此,上述示例在github上的分享地址爲:https://github.com/lizelu/SpringMVCWithMaven