6

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

TIA。

4

3 回答 3

5

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

这个站点很好地介绍了使用 jQuery 进行长轮询。

Spring 并没有任何明确的特性来支持这一点(例如,池化轮询线程)AFAIK,但您可以查看Spring MVC 3.2 中的新异步支持

于 2012-08-16T22:20:06.907 回答
1

您可以编写自己的 servlet,如下所示,有关详细信息,请参阅链接。由于这适用于 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);
}

}
于 2012-08-17T13:47:36.897 回答
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(){
  ...
  }
 });
}

最后在 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.

}

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

于 2014-12-21T20:10:29.743 回答