是否有任何基于Spring的框架可以向网页发送通知。我看过http://www.w3schools.com/html5/tryit.asp?filename=tryhtml5_sse我也在研究能够支持大多数浏览器的东西。 Spring中是否有任何框架或附件用于服务器端代码的此功能?还有任何jquery框架来支持浏览器吗?
TIA。
答案 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)
:
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.
}
我希望这会给你一些想法或帮助其他人寻找这个问题的答案。 :)