上篇博客我們詳細的聊了《JavaEE開發(fā)之SpringMVC中的靜態(tài)資源映射及服務(wù)器推送技術(shù)》,本篇博客依然是JavaEE開發(fā)中的內(nèi)容,我們就來聊一下SpringMVC中的自定義消息轉(zhuǎn)發(fā)器(HttpMessageConverter)和SpringMVC中的文件上傳。消息轉(zhuǎn)發(fā)器在日常開發(fā)中是比較常用的,其可以靈活的將用戶發(fā)過來的消息按照自定義的格式進行解析,然后將解析的數(shù)據(jù)映射成Model,下方會給出自定義消息轉(zhuǎn)發(fā)器的詳細內(nèi)容。聊完消息轉(zhuǎn)發(fā)器,我們還會聊一下Spring中MVC的文件上傳的操作。詳細的內(nèi)容請看下方介紹。

 

一、自定義消息轉(zhuǎn)發(fā)器

接下來我們將實現(xiàn)自定義消息轉(zhuǎn)發(fā)器,在自定義消息轉(zhuǎn)發(fā)器時,我們需要基礎(chǔ)Springframework中的AbstractHttpMessageConverter這個抽象類。這個抽象類中就定義著我們自定義消息轉(zhuǎn)發(fā)器所需要的方法。我們將這些方法進行重寫就好。

 

1.創(chuàng)建消息轉(zhuǎn)發(fā)器的類

下方就是我們創(chuàng)建自定義消息轉(zhuǎn)發(fā)器的過程,我們將其命名為CustomMessageConverter類,如下所示:

  電腦培訓(xùn),計算機培訓(xùn),平面設(shè)計培訓(xùn),網(wǎng)頁設(shè)計培訓(xùn),美工培訓(xùn),Web培訓(xùn),Web前端開發(fā)培訓(xùn)

 

接下來我們就來聊一下CustomMessageConverter中的內(nèi)容,下方代碼段就是CustomMessageConverter類中的部分內(nèi)容。在繼承類時,我們將泛型指定為StudentModel類,然后在該類中的構(gòu)造器中,我們創(chuàng)建了一個新的媒體類型。該媒體類型就是我們自己定義的,并且指定了相應(yīng)的編碼方式。在重寫的support()方法中,我們來判斷所支持的Class是否與StudentModel的Class相同。如下所示:

  電腦培訓(xùn),計算機培訓(xùn),平面設(shè)計培訓(xùn),網(wǎng)頁設(shè)計培訓(xùn),美工培訓(xùn),Web培訓(xùn),Web前端開發(fā)培訓(xùn)

 

然后下方兩個重寫的方法是負責(zé)數(shù)據(jù)的輸入和輸出的方法。在readInternal()方法中,就負責(zé)接收客戶端所發(fā)過來的消息,并按照我們自定義的媒體類型進行解析。此處我們可以將新的枚舉類型的格式按照“aaa-bbb-ccc”的方式進行傳輸,也就是參數(shù)之間用“-”進行拆分,而解析的時候我們就按照此規(guī)則進行拆分,然后賦值給相應(yīng)的Model對象,并且將該對象進行返回。

而輸出方法writeInternal()中的一個參數(shù)就是上面輸入方法所返回的Model對象,我們可以在該方法中,根據(jù)用戶所提供的信息,給出輸出值。此處,我們將數(shù)據(jù)提供的數(shù)據(jù)前方加了“hello”進行了返回,如下所示。

  電腦培訓(xùn),計算機培訓(xùn),平面設(shè)計培訓(xùn),網(wǎng)頁設(shè)計培訓(xùn),美工培訓(xùn),Web培訓(xùn),Web前端開發(fā)培訓(xùn)

 

2、Spring配置自定義消息轉(zhuǎn)發(fā)器

創(chuàng)建完消息轉(zhuǎn)發(fā)器的類后,接下來,我們就得在Spring配置文件中進行擴展配置。下方的代碼段就是Spring配置文件中對上述自定義消息轉(zhuǎn)發(fā)器的配置,在重寫的extendMessageConverters()方法中,將上述自定義的消息轉(zhuǎn)發(fā)對象進行添加即可,具體代碼如下所示。

  電腦培訓(xùn),計算機培訓(xùn),平面設(shè)計培訓(xùn),網(wǎng)頁設(shè)計培訓(xùn),美工培訓(xùn),Web培訓(xùn),Web前端開發(fā)培訓(xùn)

 

3、創(chuàng)建上述消息轉(zhuǎn)發(fā)器的測試控制器

上面算是我們的消息轉(zhuǎn)發(fā)器的東西搞定了,接下來,我們就該對其進行測試了。下方代碼段就是我們創(chuàng)建的用來測試自定義消息轉(zhuǎn)發(fā)器的測試Controller,我們將其命名為MessageConverterController。我們在路由設(shè)置時,我們將其媒體類型設(shè)置為“application/x-parameter”類型。如下所示:

電腦培訓(xùn),計算機培訓(xùn),平面設(shè)計培訓(xùn),網(wǎng)頁設(shè)計培訓(xùn),美工培訓(xùn),Web培訓(xùn),Web前端開發(fā)培訓(xùn)

 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 @Controller11 public class MessageConverterController {12     @RequestMapping(value = "/convert", produces = {"application/x-parameter"})13     @ResponseBody14     public StudentModel converter(@RequestBody StudentModel student) {15         return student;16     }17 }

電腦培訓(xùn),計算機培訓(xùn),平面設(shè)計培訓(xùn),網(wǎng)頁設(shè)計培訓(xùn),美工培訓(xùn),Web培訓(xùn),Web前端開發(fā)培訓(xùn)

 

4、測試頁面的創(chuàng)建

創(chuàng)建完測試類后,接下來我們就來創(chuàng)建我們的JSP測試頁面。我們創(chuàng)建一個message_converter.jsp頁面來像我們上面的Controller發(fā)起請求。在該文件中,主要使用了jQuery中的ajax進行請求的,而且是POST請求,具體如下所示。下方的代碼主要功能就是點擊一次按鈕,進行一次請求,然后將請求的數(shù)據(jù)添加到HTML文件的節(jié)點中,代碼如下所示。

電腦培訓(xùn),計算機培訓(xùn),平面設(shè)計培訓(xùn),網(wǎng)頁設(shè)計培訓(xùn),美工培訓(xùn),Web培訓(xùn),Web前端開發(fā)培訓(xùn)

 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>

電腦培訓(xùn),計算機培訓(xùn),平面設(shè)計培訓(xùn),網(wǎng)頁設(shè)計培訓(xùn),美工培訓(xùn),Web培訓(xùn),Web前端開發(fā)培訓(xùn)

 

然后我們需要為上述JSP頁面在Spring的Config文件中為其配置路由,將訪問路徑路由到上述jsp頁面上。在配置文件中的addViewControllers()方法中添加上下方的代碼片段:

registry.addViewController("/message_converter").setViewName("/message_converter");

 

配置好路由后,接下來我們就可以對其測試了。下方就是我們測試的最終結(jié)果,如下所示:

  電腦培訓(xùn),計算機培訓(xùn),平面設(shè)計培訓(xùn),網(wǎng)頁設(shè)計培訓(xùn),美工培訓(xùn),Web培訓(xùn),Web前端開發(fā)培訓(xùn)

 

 

 

二、文件上傳

聊完消息轉(zhuǎn)發(fā)器,接下來我們就來聊一下SpringMVC中的文件上傳的東西。當(dāng)然,在SpringMVC中的文件上傳是比較簡單的。下方我們先在Maven的依賴庫中添加我們本部分需要的庫、然后在Spring的配置文件中進行配置、然后創(chuàng)建上傳文件的Controller、最后創(chuàng)建上傳頁面的JSP頁面。詳細的內(nèi)容請看下方。

 

1.引入上傳文件的依賴庫

首先我們得引入上傳文件所需要的依賴庫,下方就是我們在pom.xml配置的依賴庫。一個是負責(zé)文件上傳的依賴庫,一個是負責(zé)文件IO操作的依賴庫。下方這些依賴庫,我們都可以在Maven的官網(wǎng)上找到,如下所示:

電腦培訓(xùn),計算機培訓(xùn),平面設(shè)計培訓(xùn),網(wǎng)頁設(shè)計培訓(xùn),美工培訓(xùn),Web培訓(xùn),Web前端開發(fā)培訓(xùn)

 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

電腦培訓(xùn),計算機培訓(xùn),平面設(shè)計培訓(xùn),網(wǎng)頁設(shè)計培訓(xùn),美工培訓(xùn),Web培訓(xùn),Web前端開發(fā)培訓(xùn)

 

2、配置文件上傳 

引入完相應(yīng)的依賴庫后,我們得在Spring的配置文件中進行配置后我們的文件上傳才可生效。下方就是Spring配置文件中對文件上傳的配置。具體如下所示:

  電腦培訓(xùn),計算機培訓(xùn),平面設(shè)計培訓(xùn),網(wǎng)頁設(shè)計培訓(xùn),美工培訓(xùn),Web培訓(xùn),Web前端開發(fā)培訓(xùn)

 

3、創(chuàng)建文件上傳的Controller

引入完文件上傳的依賴庫和配置完后,接下來我們就該創(chuàng)建文件上傳的Controller。下方我們創(chuàng)建的名為UploadFileController的控制器就是負責(zé)文件上傳的。下方的我們指定請求方式是POST方式,然后從請求體重使用@RequestParam("參數(shù)名")來獲取相應(yīng)的上傳文件。獲取到上傳文件后,我們在通過文件IO操作,將用戶上傳的文件保存到指定目錄,如下所示:

  電腦培訓(xùn),計算機培訓(xùn),平面設(shè)計培訓(xùn),網(wǎng)頁設(shè)計培訓(xùn),美工培訓(xùn),Web培訓(xùn),Web前端開發(fā)培訓(xùn)

 

4、創(chuàng)建文件上傳的JPS頁面

文件上傳控制器創(chuàng)建完畢后,接下來我們就該創(chuàng)建相應(yīng)的上傳文件的JPS頁面了。當(dāng)然,下方的HTML代碼比較簡單,就是使用Form表單來進行相應(yīng)的文件上傳。具體代碼如下所示: 

電腦培訓(xùn),計算機培訓(xùn),平面設(shè)計培訓(xùn),網(wǎng)頁設(shè)計培訓(xùn),美工培訓(xùn),Web培訓(xùn),Web前端開發(fā)培訓(xùn)

 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>

電腦培訓(xùn),計算機培訓(xùn),平面設(shè)計培訓(xùn),網(wǎng)頁設(shè)計培訓(xùn),美工培訓(xùn),Web培訓(xùn),Web前端開發(fā)培訓(xùn)

 

創(chuàng)建完JSP頁面后,我們依然要對該JSP頁面進行路由的配置。我們依然是采用在Spring的配置文件中進行快速的路由配置,如下所示:

電腦培訓(xùn),計算機培訓(xùn),平面設(shè)計培訓(xùn),網(wǎng)頁設(shè)計培訓(xùn),美工培訓(xùn),Web培訓(xùn),Web前端開發(fā)培訓(xùn)

 

上面這些都做好后,接下來我們就可以訪問上述配置的文件上傳的路由了,下方就是相應(yīng)的結(jié)果,如下所示。上傳完畢后,會返回OK提示,并且在相應(yīng)的文件中會出現(xiàn)用戶所上傳的文件,如下所示:

 

本篇博客就先到此,上述示例在github上的分享地址為:https://github.com/lizelu/SpringMVCWithMaven

 

作者:青玉伏案 
出處:http://www.cnblogs.com/ludashi/ 
本文版權(quán)歸作者和共博客園共有,歡迎轉(zhuǎn)載,但未經(jīng)作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接,否則保留追究法律責(zé)任的權(quán)利。 
如果文中有什么錯誤,歡迎指出。以免更多的人被誤導(dǎo)。

分類: Java

http://www.cnblogs.com/ludashi/p/6530469.html