一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|JAVA教程|ASP教程|編程技術|正則表達式|

服務器之家 - 編程語言 - JAVA教程 - JavaEE開發之SpringMVC中的自定義消息轉換器與文件上傳

JavaEE開發之SpringMVC中的自定義消息轉換器與文件上傳

2020-09-21 16:03有始有終xi JAVA教程

本篇文章主要介紹了SpringMVC的相關知識。同時也會介紹到js、css這些靜態文件的加載配置,以及服務器推送的兩種實現方式并且給出了兩者的區別。下面跟著小編一起來看下吧

本篇博客我們繼續的來聊springmvc的東西,下方我們將會聊到js、css這些靜態文件的加載配置,以及服務器推送的兩種實現方式。當然我們在服務器推送時,會用到jquery的東西,所以我們先聊一下如何加載靜態資源文件,然后我們再聊如何實現服務器推送。

下方給出了兩種實現服務器推送的方式,一種是sse(server send event (服務端推送事件))另一種是基于servlet異步處理的推送,下方會給出詳細的實現方式,并且給出了兩者的區別。

一、靜態資源文件映射

靜態資源文件映射在springmvc中的配置也是比較簡單的、在我們spring的config文件里邊配置一下即可。下方就是我們在配置靜態資源文件時所做的內容。

1、映射資源文件

首先我們在src/main/resources包下方創建了衣蛾assets文件,該文件下就存放著我們工程中所使用所有的靜態資源文件。然后我們在spring的配置文件中重寫addresourcehandlers()方法,使用該方法來配置“assets”目錄。

JavaEE開發之SpringMVC中的自定義消息轉換器與文件上傳

2、資源文件的引用

我們來創建一個jquery_test.jsp文件,該文件中引入了assets文件夾中js文件夾下的jquery.js文件。在jquery_test.jsp中就使用了jquery的東西。下方就是該文件的所有內容。當然下方頁面的功能比較簡單,就是點擊按鈕,往html中動態的添加新的節點。具體代碼如下所示:

<%@ page language="java" contenttype="text/html; charset=utf-8" pageencoding="utf-8"%> <!doctype html public "-//w3c//dtd html 4.01 transitional//en" "http://www.w3.org/tr/html4/loose.dtd"> <html> <head> <meta http-equiv="content-type" content="text/html; charset=utf-8"> <script type="text/javascript" src="assets/js/jquery.js"></script> <script type="text/javascript"> $(document).ready(function(){ $("#click").click(function(){ $("#test").append("<h2>hello spring mvc</h2>"); }); }); </script> <title>jquery demo</title> </head> <body> <input type="button" id="click" value="jquery-test-click me"/> <h2 id="test"></h2> </body> </html>

如果你想學習java可以來這個群,首先是二二零,中間是一四二,最后是九零六,里面有大量的學習資料可以下載。

3、測試上述頁面

當然要想訪問上述頁面,還得在spring的配置文件中進行路由的配置。下方代碼段就是spring配置文件中靜態文件路由的快速配置。

JavaEE開發之SpringMVC中的自定義消息轉換器與文件上傳

下方就是我們對相應路由的訪問結果,如下所示。通過下方示例,我們可以看到jquery.js資源文件可以被正常的訪問到。

JavaEE開發之SpringMVC中的自定義消息轉換器與文件上傳

二、server send event (服務端推送事件)

server send event簡稱sse,使用該技術可以實現服務端像瀏覽器發送事件,也就是所謂的服務端的push。本篇博客所聊的服務器推送技術的實現原理是當客戶端向服務端發送請求時,服務端會抓住這個請求不放,等有數據更新的時候才返回給客戶端。當客戶端接收到消息后,再向服務端發送請求,周而復始。

服務端推送以及客戶端發送的網絡請求都是單向通信,后面的博客我們會介紹一種雙向通信技術:websocket。本篇我們就先聊聊服務端的推送事件。

1.創建ssecontroller

首先我們創建一個普通的springmvc的controller,命名為ssecontrller。下方就是ssecontroller類的具體實現,內容與普通的controller差不多。只不過相應的方法在路由配置時,將produces屬性的文本類型設置成“text/event-stream”即可。

在下方類的push()方法中,每500ms就會往客戶端發送一個消息。消息的內容是當前時間,如下所示:

JavaEE開發之SpringMVC中的自定義消息轉換器與文件上傳

2、創建請求的jsp頁面

創建好上述類后,我們就該創建測試上述controller的jsp頁面了,我們在相應的資源目錄中創建一個sse.jsp頁面。在sse.jsp頁面中,我們將會使用到javascript中的eventsource對象來監聽來著“/sse”路由的事件消息,當收到上述controller發起的事件后,會在事件回調中做一些事情。當然,我們做的事情就是在html頁面中添加新的節點,將事件響應的消息添加到html文本只能怪進行顯示。

下方就是sse.jsp頁面的具體代碼。

<%@ page language="java" contenttype="text/html; charset=utf-8" pageencoding="utf-8"%> <!doctype html public "-//w3c//dtd html 4.01 transitional//en" "http://www.w3.org/tr/html4/loose.dtd"> <html> <head> <meta http-equiv="content-type" content="text/html; charset=utf-8"> <script type="text/javascript" src="assets/js/jquery.js"></script> <script type="text/javascript"> if(window.eventsource){ var source = new eventsource('sse'); s = ''; source.addeventlistener('message', function (e) { s += e.data+"<br/>"; $("#msgfromsse").html(s); }); source.addeventlistener('open', function (e) { console.log("連接打開"); }, false); source.addeventlistener('error', function (e) { if (e.readystate == eventsource.closed) { console.log("連接關閉"); } else { console.log(e.readystate); } }, false); } else { console.log("瀏覽器不支持sse"); } </script> <title>sse demo</title> </head> <body> <h1>sse-test</h1> <div id="msgfromsse"></div> </body> </html>

3、測試我們的sse

上面的事件發送端以及事件監聽端的代碼已實現完畢。接下來我們就要進行測試了。在測試之前,我們還要做一件事情,就是為我們的sse.jsp頁面添加訪問路由。我們就選擇在spring的配置文件中進行快速配置sse.jsp頁面的路由。下方就是sse.jsp路由配置的相關代碼:

registry.addviewcontroller("/ssetest").setviewname("/sse");

配置完上述路由后我們就可以訪問上述路由所對應的jsp頁面了,下方就是具體的運行效果。從下方演示效果中,我們不難看出,每隔一段時間就會收到來自服務端的消息事件,具體如下所示:

JavaEE開發之SpringMVC中的自定義消息轉換器與文件上傳

三、servlet中的異步推送

接下來我們來使用servlet的異步處理以及spring的任務計劃(定時器)來實現事件的推送。當然本部分的最終實現效果與上述效果是一樣的,只不過是實現方式不同。sse是需要新式瀏覽器的支持,而servlet的異步方法進行推送是跨瀏覽器的。接下來我們就來好好的來實現該技術點。

1、 實現servlet中的異步推送前的配置

首先我們需要在spring的配置文件中進行配置,是我們的spring支持計劃任務(scheduleing),其實就是支持定時器。因為我們要定時的向客戶端進行push,所以定時器的配置是必須的。

JavaEE開發之SpringMVC中的自定義消息轉換器與文件上傳

啟動完定時器后,我們需要在web初始化的類中開啟servlet的異步支持,如下所示。

JavaEE開發之SpringMVC中的自定義消息轉換器與文件上傳

2、創建push service

相關配置完成后,接下來我們要做的就是創建我們的push service。該service就負責往客戶端進行push事件,push service的類對象就是我們相應controller的依賴對象 ,稍后,我們將會將該依賴注入到相應的controller中進行事件的push。

下方就是pushservice類的具體代碼實現,需要使用@service進行修飾。然后實例化一個deferredresult對象負責傳遞事件消息。我們用到了@scheduled注解來設定每次推送的間隔。

JavaEE開發之SpringMVC中的自定義消息轉換器與文件上傳

上面用到了@service注解,我們可以點進去看一下service注解中的內容。從其源碼中我們不難看出其實@service和@component用法是一至的。@service注解的實現如下所示:

JavaEE開發之SpringMVC中的自定義消息轉換器與文件上傳

3、創建調用pushservice的controller

創建完pushservice后,接著就創建一個調用pushservice的controller類。下方這個servletasynccontroller就是負責調用pushservice對象的controller。其中使用了@autowired注解來聲明依賴注入的注入點。然后通過路由,路由到調用pushservice的方法中即可。deferredresult<string>就是推送事件的載體、而消息的類型是string類型。具體實現如下所示:

JavaEE開發之SpringMVC中的自定義消息轉換器與文件上傳

4、接收事件的jsp頁面的實現

創建完push service以及負責推送的controller后,接下來我們就該創建接收推送的客戶端代碼了。下方的代碼比較簡單,主要是使用jquery來接收的推送事件。然后將推送的內容append到html中進行顯示,如下所示:

<%@ page language="java" contenttype="text/html; charset=utf-8" pageencoding="utf-8"%> <!doctype html public "-//w3c//dtd html 4.01 transitional//en" "http://www.w3.org/tr/html4/loose.dtd"> <html> <head> <meta http-equiv="content-type" content="text/html; charset=utf-8"> <script type="text/javascript" src="assets/js/jquery.js"></script> <script type="text/javascript"> deferred(); function deferred() { $.get('servlet_push', function (data) { $("#content").append(data+'<br/>'); deferred(); }); } </script> <title>servlet_async</title> </head> <body> <div id='content'></div> </body> </html>

給上述jsp頁面配置路由的代碼在此就省略了,和之前一樣,給上述jsp頁面在springconfig文件中配置一個路由,此處是“/async_push”, 然后我們對該路由進行訪問,下方就是訪問效果,如下所示:

JavaEE開發之SpringMVC中的自定義消息轉換器與文件上傳

以上就是本文的全部內容,希望本文的內容對大家的學習或者工作能帶來一定的幫助,同時也希望多多支持服務器之家!

原文鏈接:http://www.cnblogs.com/chcse/p/6782642.html

延伸 · 閱讀

精彩推薦
  • JAVA教程JS求多個數組的重復數據

    JS求多個數組的重復數據

    這篇文章主要介紹了JS求多個數組的重復數據的辦法,具有一定的參考價值,感興趣的小伙伴們可以參考一下...

    PheonixHkbxoic4342020-06-14
  • JAVA教程java正則表達式解析html示例分享

    java正則表達式解析html示例分享

    這篇文章主要介紹了java正則表達式解析html示例,用到獲取url的正則表達式,獲取圖片的正則表達式,需要的朋友可以參考下 ...

    java技術網4002019-11-10
  • JAVA教程springmvc實現自定義類型轉換器示例

    springmvc實現自定義類型轉換器示例

    本篇文章主要介紹了springmvc實現自定義類型轉換器示例,小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧...

    _故鄉的原風景4102020-08-11
  • JAVA教程用JAVA 設計生成二維碼詳細教程

    用JAVA 設計生成二維碼詳細教程

    本文主要介紹用JAVA 設計生成二維碼,這里一步一步詳細介紹用 java 如何設計二維碼,并附有代碼示例以便參考,有需要的小伙伴可以參考下 ...

    人生設計師3532020-06-02
  • JAVA教程Linux系統下搭建Java開發環境

    Linux系統下搭建Java開發環境

    本文主要是記錄了如何在Linux環境下一步步安裝JAVA JDK環境,非常簡單實用,有需要的朋友可以參考下 ...

    hebedich3892019-12-02
  • JAVA教程Springboot整合分頁插件PageHelper步驟解析

    Springboot整合分頁插件PageHelper步驟解析

    這篇文章主要介紹了Springboot整合分頁插件PageHelper步驟解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友...

    ki16164612020-06-28
  • JAVA教程Java的特點和優點(動力節點整理)

    Java的特點和優點(動力節點整理)

    由于Java語言的設計者們十分熟悉C++語言,所以在設計時很好地借鑒了C++語言。可以說,Java語言是一種比C++語言“還面向對象”的一種編程語言,下面通過...

    Java教程網4092020-09-03
  • JAVA教程Java實現并查集

    Java實現并查集

    這篇文章主要為大家詳細介紹了Java實現并查集,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下 ...

    NinoSun4002020-07-05
主站蜘蛛池模板: 精品淑女少妇AV久久免费 | 日韩妹妹 | 精品国产乱码久久久久久人妻 | 丝袜兔女郎被啪在线观看91 | www.四色 | 日韩精品在线视频观看 | 美女露奶奶 | 99久久伊人精品波多野结衣 | 四虎库 | 欧美高清免费一级在线 | 国产在线观看精品 | 成人女人天堂午夜视频 | 国产青草亚洲香蕉精品久久 | 亚洲高清在线天堂精品 | 手机亚洲第一页 | 色花堂国产精品首页第一页 | 亚洲一二三区视频 | 男女真实无遮挡xx00动态图软件 | 欧美日韩精品在线视频 | 亚洲gogo人体大胆西西安徽 | 美女视频一区二区三区在线 | 四虎永久在线精品国产馆v视影院 | 91精品国产高清久久久久久 | 国产精品女同久久免费观看 | 免费精品视频在线 | 大胸美女被c | 天堂69亚洲精品中文字幕 | videos变态极端 | 青草久久网 | 添逼逼视频 | 夫承子液by免费阅读 | 欧美午夜性春猛交bbb | 免费一级国产生活片 | 精品久久久久久亚洲 | 惩罚狠h调教灌满 | 亚洲精品在线免费看 | 91在线视频播放 | 日本视频免费在线观看 | 美女脱得一二净无内裤全身的照片 | 亚洲欧美另类在线观看 | 亚洲精品国产成人7777 |