2012-08-16 10 views
6

C'è qualche framework basato su Spring per inviare notifiche alla pagina web. Ho visto http://www.w3schools.com/html5/tryit.asp?filename=tryhtml5_sse Sto anche cercando qualcosa in grado di supportare la maggior parte dei browser. C'è qualche framework o componente aggiuntivo in Primavera per questa funzionalità per il codice lato server? E qualsiasi framework jquery per supportare questo per il browser?Qualsiasi notifica push come Web, basata sulla primavera, in cui posso ricevere notifiche aggiornate nella pagina Web senza aggiornamento della pagina?

TIA.

+0

non so molto sull'orizzonte di primavera, ma websockets supportano un modello di notifica push. che dovrebbe aiutarti a cercare. – goat

+0

Potete per favore elaborare o qualche suggerimento utile? – Daemonthread

+1

Websocket sono una tecnologia nuova, non ancora molto supportata. socket.io è un progetto che tenta di fornire un valido supporto per browser incrociato, quindi potresti voler provare a stare in piedi qui. Ancora una volta, non so come si inserisca la molla qui, ma il supporto del browser Web è la parte critica e difficile, che è ciò a cui ti sto indirizzando. – goat

risposta

5

Ho usato il metodo "polling lungo". Fondamentalmente fai una richiesta Ajax al server per i dati sul caricamento della pagina. Il server attende fino a quando i dati sono disponibili prima che risponda. Sul client e sul server, è possibile impostare il timeout della richiesta ogni 30 secondi circa per evitare di avere troppi thread in esecuzione sul server. Il client invia nuovamente la richiesta dopo il timeout.

This site fornisce una buona introduzione al polling lungo con jQuery.

Primavera non ha davvero tutte le caratteristiche esplicite che supportano questa (ad esempio, mettere in comune i fili di polling) per quanto ne so, ma si può guardare al nuovo async support in Spring MVC 3.2

1

È possibile scrivere il proprio servlet come sotto, per ulteriori informazioni fare riferimento link. Poiché ciò funziona con servlet, ciò potrebbe funzionare anche con i controller mvc primaverili.

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

Il mio modo di usarlo sarebbe con il metodo di javascript setInterval() con jQuery AJAX chiamare per ricevere le notifiche. sul documento pronto, chiamare questo (in jsp): setInterval(callMe, 30000)

nel file di 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(){ 
    ... 
    } 
}); 
} 

e infine controller Primavera:

@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. 

} 

Spero che questo dà qualche idea per voi o aiuta qualcun altro a cercare la risposta a questa domanda. :)

+0

Chiamare una funzione ogni n secondi non è una buona idea e potrebbe inondare il server. Ho già provato questo per il mio sito e QUESTA NON È UNA BUONA IDEA ... –

Problemi correlati