本文写得有点含糊,主要是在index.jsp实现新消息实时提醒功能,用到了ajax轮询(即隔一段时间发送请求),后台查询响应(
数据库查询新消息数目,然后返回数据,再插入index.js[中实现更新操作
)
Jsp文件添加如下内容:
<script>
//ajax轮询
setTimeout(function(){
Push();},
200);
setInterval(function(){
//alert("定时");
Push();},
3000);
function Push(){
//alert("1");
$.ajax({
type:"POST", //采用post方法传递参数
//url:"Maven_Project/src/main/java/com.chillax.Controller/MyServlet",
url:"notice/getNumberNotice", //服务器端接受请求参数的路径
data:{userid:"${userid}"}, //采用json格式传递参数到服务器端
beforeSend:function(){},
success: function(data){
var obj=eval("("+data+")");//接受服务器响应的json数据
if(obj.msg!=0){
//alert(obj.msg);
$("#tongzhi-content").html(obj.msg);//更新消息标签中的消息数量
//$("#tongzhi").show();//消息提示内容,整个部分都显示出来
}else{
}
}
});
}
NoticeConroller部分文件如下:
@RequestMapping("/getNumberNotice")
public void getNumberNotice(HttpServletRequest request,PrintWriter printWriter){
// Session session=request.getSession().getAttribute("userid");
String userid1 = request.getParameter("userid");
int userid=Integer.parseInt(userid1);
String driverClass="com.microsoft.sqlserver.jdbc.SQLServerDriver";
String url="jdbc:sqlserver://127.0.0.1:1433;DatabaseName=t120170703";
String username="sa";
String password="123456";
try {
Class.forName(driverClass);
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
Connection conn;
conn = DriverManager.getConnection(url,username,password);
Statement stmt = conn.createStatement();
ResultSet rs=stmt.executeQuery("select COUNT(*) from notice where userId = "+userid+" and stauts = '1'");
JSONObject jsonObject = new JSONObject();
if (rs.next()) {
String msgNum1 = rs.getString(1);
int msgNum=Integer.parseInt(msgNum1); //Stringתint
System.out.print(msgNum);
jsonObject.put("msg", msgNum);
rs.close();
stmt.close();
conn.close();
printWriter.print(jsonObject.toString());
}
}catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}