我所了解的b/s架构是这样一种模式:当用户发起请求时,web服务器会接受并处理这个请求,好像只有当用户发起请求时,服务器才会有所动作。可不可以实现这样一种功能:当ServletContextAttributeListener监听到某个用户改变了ServletContext的某个属性时,web服务器会自动给另一个用户通知。不知道我描述的是否清楚?请大家帮帮忙
解决方案 »
- 两张表合并,内存有1g,请问怎么处理
- hibernate多表查询
- 怎么在Action中取得上次表单提交后保存在jsp页面form上的数据,实现分页功能,因为我的分页要用到form中数据
- jacob 读取dll出现下面错误
- 关于翻页保存复选框选中问题
- 两个问题,一个关于applet,另一个关于jbuilder里面的编译————急
- 清理并生成 出现下面问题
- 在QueryExecutor中select insert delete update 哪个不能被执行
- 如何在网页中加入背景音乐!!急 半小时揭贴
- jsp页面提示500错误
- 如果多个客户端同时读写一个文件,我该怎样保证读写同步!
- 初学用JSP开发基于WEB系统的问题
可以通过JavaScript的onload()方法来自动加载一些需要的内容
还可以通过DWR来进行异步请求
第二个问题 这个问题当然不用你来操心~服务器自动来管理 因为ServletContext是个application只要服务器不关 他就会自动知道哦
当用户发起请求时,web服务器会接受并处理这个请求,好像只有当用户发起请求时,服务器才会有所动作。
基本正确,对于用户请求,肯定是这样,只有发起请求,后台才动作。
但,web server也可以有很多线程自动运行,跟用户请求无关,比如:定时更新缓存、定时生成静态页面、定时生成报表。可不可以实现这样一种功能:当ServletContextAttributeListener监听到某个用户改变了ServletContext的某个属性时,
web服务器会自动给另一个用户通知。
目前的WEB架构,由后台通知前台,这是不可能实现的。
因为HTTP协议决定了客户和服务器之间是没有长连接的,服务器根本不知道用户还在不在,所以通知也无从发起。
用户只能在发起下一次请求时,获知这种变化,目前AJAX的应用,使得页面能够以更快的周期去后台探测是否有变化,
但本质上,还是前台轮询后台,而非后台通知前台。
http是一个无状态协议,(会话是用过session来实现的,它本身不是http的一部分)就是响应完,它们就没有任何连接了;
那如果,要S一直知道B的这边的改变,那只能让B不断的请求!
那最简单的方式就是使用JavaScript让页面每隔一段时间就自动发送一次请求!
response.setCharacterEncoding("UTF-8");
response.setContentType("text/html");
PrintWriter pr = response.getWriter();
try {
while(true) {
pr.print("输出信息");
pr.flush();
Thread.sleep(60000);
}
} catch(Exception e) {
e.printStackTrace();
}
不过会有很大消耗。