任何基于Spring的网络推送都像通知一样,我可以在网页上更新通知而不刷新页面?

时间:2012-08-16 17:18:37

标签: spring jquery notifications

是否有任何基于Spring的框架可以向网页发送通知。我看过http://www.w3schools.com/html5/tryit.asp?filename=tryhtml5_sse我也在研究能够支持大多数浏览器的东西。 Spring中是否有任何框架或附件用于服务器端代码的此功能?还有任何jquery框架来支持浏览器吗?

TIA。

3 个答案:

答案 0 :(得分:5)

我使用了“长轮询”方法。您基本上向服务器发出ajax请求,以获取页面加载的数据。服务器在响应之前等待数据可用。在客户端和服务器上,您可以每隔30秒左右使请求超时,以避免在服务器上运行太多线程。客户端只是在超时后重新发出请求。

This site使用jQuery对长轮询进行了很好的介绍。

Spring并没有任何支持此功能的显式功能(例如汇集轮询线程)AFAIK,但您可以查看新的async support in Spring MVC 3.2

答案 1 :(得分: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);
}

}

答案 2 :(得分:0)

我使用它的方法是使用javascript的setInterval()方法以及jQuery AJAX调用来获取通知。 在Document ready上,调用它(在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(){
  ...
  }
 });
}

最后在Spring控制器中:

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

}

我希望这会给你一些想法或帮助其他人寻找这个问题的答案。 :)