2012-08-16 37 views
6

是否有任何基於Spring的框架向網頁發送通知?我見過http://www.w3schools.com/html5/tryit.asp?filename=tryhtml5_sse我也在研究可以支持大多數瀏覽器的東西。 Spring中是否有任何框架或附加組件用於服務器端代碼的此功能?和任何jQuery框架來支持這個瀏覽器?任何基於Spring的Web推送都像通知一樣,我可以在網頁中更新通知而不刷新頁面?

TIA。

+0

我不知道在春天的地平線,但websockets支持推送通知模型。這應該有助於你搜索。 – goat 2012-08-16 17:22:27

+0

您可以請詳細說明或任何有用的指針? – Daemonthread 2012-08-16 17:27:21

+1

websockets是一個新的,尚未大力支持的技術。 socket.io是一個試圖提供很好的跨瀏覽器支持的項目,所以你可能想試圖站在他們的肩上。再次,我不知道彈簧如何適應這裏,但網絡瀏覽器的支持是關鍵和困難的部分,這正是我所指的。 – goat 2012-08-16 17:35:52

回答

5

我已經使用了「長輪詢」方法。您基本上向服務器發送ajax請求以獲取頁面加載數據。服務器在響應之前等待數據可用。在客戶端和服務器上,可以每隔30秒左右使請求超時,以避免服務器上運行的線程太多。客戶端在超時後重新發出請求。

This site提供了使用jQuery進行長輪詢的很好的介紹。

春天並沒有真正有支持此任何明確的功能(如彙集輪詢線程)AFAIK,但你可以看看新async support in Spring MVC 3.2

1

你可以寫你自己的servlet如下,更多信息請參見link。因爲這與servlet一起工作,所以這也可以與spring mvc控制器一起使用。

import java.io.*; 
import javax.servlet.http.HttpServlet; 
import javax.servlet.http.HttpServletRequest; 
import javax.servlet.http.HttpServletResponse; 




public class sse extends HttpServlet 
{ 
public void doPost(HttpServletRequest request, HttpServletResponse response) 
{ 
    try 
    { 
     System.out.println("SSE Demo"); 
     response.setContentType("text/event-stream"); 

     PrintWriter pw = response.getWriter(); 
     int i=0; 
     while(true) 
     { 

      i++; 
      pw.write("event: server-time\n\n"); //take note of the 2 \n 's, also on the next line. 
      pw.write("data: "+ i + "\n\n"); 
      System.out.println("Data Sent!!!"+i); 
      if(i>10) 
      break; 
     } 
     pw.close(); 

    }catch(Exception e){ 
     e.printStackTrace(); 
    } 
} 

public void doGet(HttpServletRequest request,HttpServletResponse response) 
{ 
    doPost(request,response); 
} 

} 
0

我的使用方法是使用javascript的setInterval()方法以及jQuery AJAX調用來獲取通知。 的文件準備好,把這個(在JSP中): setInterval(callMe, 30000)

在JS文件:

function callMe(){ 
... 

    $.ajax({ 
    type: "GET", 
    url: "ajaxNotifications", 
    success: function(count){ 
    alert("You have: " + count + "notifications now"); 
    //stick it to #element or DIV or .class where ever you want. 
    } 
    error:function(){ 
    ... 
    } 
}); 
} 

終於在春季控制器:

@RequestMapping(value="/ajaxNotifications", method = RequestMetho.GET) 
public @ResponseBody String getMeCount(HttpServletReuest req, HttpServletRespones resp){ 
//get the desired values from req 
... 
//fire a reuest via service layer to the database for getting notifs number 
... 
//Don't forget to return it as a String, be it error or count. 

} 

我希望這給一些想法給你或幫助其他人尋找這個問題的答案。 :)

+0

每n秒調用一次函數不是一個好主意,可能會氾濫服務器。我已經爲我的網站嘗試過了,這不是一個好主意...... – 2015-12-29 03:45:09