转载自:http://vincent-yy.iteye.com/blog/427922
小型聊天室--DWR实现服务器推技术
当看到DWR2也可以实现推技术之后,想尝试一下!
首先当官方上下载一个dwr的jar文件和commons-logging-1.1.1.jar
先从配置文件入手
web.xml
Xml代码
<?xml version="1.0" encoding="UTF-8"?>
<web-app id="WebApp_ID" version="2.4"
xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
<!-- 以设置下格式固定,可复制使用 -->
<display-name>ajaxDWR</display-name>
<servlet>
<servlet-name>dwr-invoker</servlet-name>
<!--
<servlet-class>uk.ltd.getahead.dwr.DWRServlet</servlet-class>
-->
<servlet-class>
org.directwebremoting.servlet.DwrServlet
</servlet-class>
<init-param>
<description>实现调试,在debug请设置为false</description>
<param-name>debug</param-name>
<param-value>true</param-value>
</init-param>
<init-param>
<description>使用服务器推技术(反转AJAX)</description>
<param-name>activeReverseAjaxEnabled</param-name>
<param-value>true</param-value>
</init-param>
<init-param>
<param-name>
initApplicationScopeCreatorsAtStartup
</param-name>
<param-value>true</param-value>
</init-param>
<init-param>
<param-name>maxWaitAfterWrite</param-name>
<param-value>100</param-value>
</init-param>
<load-on-startup>4</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>dwr-invoker</servlet-name>
<url-pattern>/dwr/*</url-pattern>
</servlet-mapping>
</web-app>
dwr.xml
Xml代码
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE dwr PUBLIC "-//GetAhead Limited//DTD Direct Web Remoting 2.0//EN" "http://www.getahead.ltd.uk/dwr/dwr20.dtd">
<dwr>
<!-- 对后台类的配置格式确定 -->
<allow>
<create creator="new" javascript="Chat">
<param name="class" value="com.dwr.chat.Chat" />
</create>
</allow>
</dwr>
编写好配置文件之后,开始编写页面,我们可以选择html或者jsp都可以
index3.html
Html代码
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>index3.html</title>
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="this is my page">
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<script type='text/javascript' src='dwr/util.js'></script>
<script type='text/javascript' src='dwr/engine.js'></script>
<script type='text/javascript' src='dwr/interface/Chat.js'></script>
<!--<link rel="stylesheet" type="text/css" href="./styles.css">-->
</head>
<body>
<center>
<table width="600px" border="1">
<tr>
<td colspan="3" align="center">
XXXXXX Chat
</td>
<td>
User List
</td>
</tr>
<tr>
<td colspan="3" style="height: 300px">
<textarea rows="20" cols="60" readonly id="showmessage" name="showmessage"></textarea>
</td>
<td style="height: 300px" valign="top">
<div id="userlist" style="height:310px;overflow : scroll;"></div>
</td>
</tr>
<tr>
<td colspan="3" align="center">
<span id="say_name" ></span>
<textarea rows="3" cols="50" id="say_message" name="say_message"></textarea><input type="button" value="say" id="say" onclick="sayMessage()"/>
</td>
<td>
先录入你的昵称<br/>
<input type="text" style="width: 125px" name="name" id="name" />
<input type="button" value="确定" onclick="register()" />
</td>
</tr>
</table>
</center>
</body>
<script type="text/javascript">
dwr.engine.setActiveReverseAjax(true); // 激活反转 重要
init();
function init(){
document.getElementById('say_message').disabled = true;
document.getElementById('say').disabled = true;
}
function sayMessage(){
var message_content = DWRUtil.getValue('say_message');
var message_head = document.getElementById('say_name').innerHTML;
Chat.sayMessage(message_head+message_content);
document.getElementById('say_message').value = '';
}
function register() {
var name = DWRUtil.getValue("name");
Chat.addUser(name,callback);
}
function callback(str) {
if(str != ''){
alert(str);
}else{
document.getElementById('say_name').innerHTML = DWRUtil.getValue("name") + " 说:";
document.getElementById('say_message').disabled = false;
document.getElementById('say').disabled = false;
}
}
</script>
</html>
这个页面比较简陋,建议js写在下方,否则firefox会报错
Chat.java
Java代码
package com.dwr.chat;
import java.util.ArrayList;
import java.util.Collection;
import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest;
import org.directwebremoting.ServerContext;
import org.directwebremoting.ServerContextFactory;
import org.directwebremoting.proxy.dwr.Util;
public class Chat {
static ArrayList<String> name_list = new ArrayList<String>();
static StringBuffer show_message = new StringBuffer();
public String addUser(String name,HttpServletRequest request) {
System.out.println("list.size() = "+name_list.size());
for (String s : name_list) {
if (name == null || name.trim().equals(s)) {
return "用户名已存在";
}
}
name_list.add(name.trim());
ServletContext sc = request.getSession().getServletContext();
ServerContext sctx = ServerContextFactory.get(sc);
Collection sessions = sctx.getScriptSessionsByPage("/dwr2Demo/index3.html");
Util util = new Util(sessions);
show_message.append("\n欢迎"+name+"来到 XXX Chat");
trimMessage();
util.setValue("showmessage", show_message.toString());
printUserList(util);
return "";
}
public void sayMessage(String message,HttpServletRequest request){
ServletContext sc = request.getSession().getServletContext();
ServerContext sctx = ServerContextFactory.get(sc);
Collection sessions = sctx.getScriptSessionsByPage("/dwr2Demo/index3.html");
Util util = new Util(sessions);
show_message.append("\n"+message);
trimMessage();
util.setValue("showmessage", show_message.toString());
printUserList(util);
}
public void trimMessage(){
if(show_message.length() > 2000){
show_message.delete(0, ((show_message.length() - 2000)*2+2));
}
}
public void printUserList(Util util){
StringBuffer userlist = new StringBuffer();
userlist.append("<table>");
for(String s : name_list){
userlist.append("<tr><td><font color='blue'>"+s+"</font></td></tr>");
}
userlist.append("</table>");
util.setValue("userlist", userlist.toString());
}
}
编写好这个之后,可以运行一下。
经过测试,发现几个问题 浏览器我现在测试了三种发现三种都有自己的特性
IE :比较正常,有时候会慢一些
firefox :每次刷新访问的时候服务器会出现一个异常
google浏览器:在刷新的时候会无限等待,一直到接收到信息
另一教程:http://hintcnuie.iteye.com/blog/175828
小型聊天室--DWR实现服务器推技术
当看到DWR2也可以实现推技术之后,想尝试一下!
首先当官方上下载一个dwr的jar文件和commons-logging-1.1.1.jar
先从配置文件入手
web.xml
Xml代码
<?xml version="1.0" encoding="UTF-8"?>
<web-app id="WebApp_ID" version="2.4"
xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
<!-- 以设置下格式固定,可复制使用 -->
<display-name>ajaxDWR</display-name>
<servlet>
<servlet-name>dwr-invoker</servlet-name>
<!--
<servlet-class>uk.ltd.getahead.dwr.DWRServlet</servlet-class>
-->
<servlet-class>
org.directwebremoting.servlet.DwrServlet
</servlet-class>
<init-param>
<description>实现调试,在debug请设置为false</description>
<param-name>debug</param-name>
<param-value>true</param-value>
</init-param>
<init-param>
<description>使用服务器推技术(反转AJAX)</description>
<param-name>activeReverseAjaxEnabled</param-name>
<param-value>true</param-value>
</init-param>
<init-param>
<param-name>
initApplicationScopeCreatorsAtStartup
</param-name>
<param-value>true</param-value>
</init-param>
<init-param>
<param-name>maxWaitAfterWrite</param-name>
<param-value>100</param-value>
</init-param>
<load-on-startup>4</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>dwr-invoker</servlet-name>
<url-pattern>/dwr/*</url-pattern>
</servlet-mapping>
</web-app>
dwr.xml
Xml代码
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE dwr PUBLIC "-//GetAhead Limited//DTD Direct Web Remoting 2.0//EN" "http://www.getahead.ltd.uk/dwr/dwr20.dtd">
<dwr>
<!-- 对后台类的配置格式确定 -->
<allow>
<create creator="new" javascript="Chat">
<param name="class" value="com.dwr.chat.Chat" />
</create>
</allow>
</dwr>
编写好配置文件之后,开始编写页面,我们可以选择html或者jsp都可以
index3.html
Html代码
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>index3.html</title>
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="this is my page">
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<script type='text/javascript' src='dwr/util.js'></script>
<script type='text/javascript' src='dwr/engine.js'></script>
<script type='text/javascript' src='dwr/interface/Chat.js'></script>
<!--<link rel="stylesheet" type="text/css" href="./styles.css">-->
</head>
<body>
<center>
<table width="600px" border="1">
<tr>
<td colspan="3" align="center">
XXXXXX Chat
</td>
<td>
User List
</td>
</tr>
<tr>
<td colspan="3" style="height: 300px">
<textarea rows="20" cols="60" readonly id="showmessage" name="showmessage"></textarea>
</td>
<td style="height: 300px" valign="top">
<div id="userlist" style="height:310px;overflow : scroll;"></div>
</td>
</tr>
<tr>
<td colspan="3" align="center">
<span id="say_name" ></span>
<textarea rows="3" cols="50" id="say_message" name="say_message"></textarea><input type="button" value="say" id="say" onclick="sayMessage()"/>
</td>
<td>
先录入你的昵称<br/>
<input type="text" style="width: 125px" name="name" id="name" />
<input type="button" value="确定" onclick="register()" />
</td>
</tr>
</table>
</center>
</body>
<script type="text/javascript">
dwr.engine.setActiveReverseAjax(true); // 激活反转 重要
init();
function init(){
document.getElementById('say_message').disabled = true;
document.getElementById('say').disabled = true;
}
function sayMessage(){
var message_content = DWRUtil.getValue('say_message');
var message_head = document.getElementById('say_name').innerHTML;
Chat.sayMessage(message_head+message_content);
document.getElementById('say_message').value = '';
}
function register() {
var name = DWRUtil.getValue("name");
Chat.addUser(name,callback);
}
function callback(str) {
if(str != ''){
alert(str);
}else{
document.getElementById('say_name').innerHTML = DWRUtil.getValue("name") + " 说:";
document.getElementById('say_message').disabled = false;
document.getElementById('say').disabled = false;
}
}
</script>
</html>
这个页面比较简陋,建议js写在下方,否则firefox会报错
Chat.java
Java代码
package com.dwr.chat;
import java.util.ArrayList;
import java.util.Collection;
import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest;
import org.directwebremoting.ServerContext;
import org.directwebremoting.ServerContextFactory;
import org.directwebremoting.proxy.dwr.Util;
public class Chat {
static ArrayList<String> name_list = new ArrayList<String>();
static StringBuffer show_message = new StringBuffer();
public String addUser(String name,HttpServletRequest request) {
System.out.println("list.size() = "+name_list.size());
for (String s : name_list) {
if (name == null || name.trim().equals(s)) {
return "用户名已存在";
}
}
name_list.add(name.trim());
ServletContext sc = request.getSession().getServletContext();
ServerContext sctx = ServerContextFactory.get(sc);
Collection sessions = sctx.getScriptSessionsByPage("/dwr2Demo/index3.html");
Util util = new Util(sessions);
show_message.append("\n欢迎"+name+"来到 XXX Chat");
trimMessage();
util.setValue("showmessage", show_message.toString());
printUserList(util);
return "";
}
public void sayMessage(String message,HttpServletRequest request){
ServletContext sc = request.getSession().getServletContext();
ServerContext sctx = ServerContextFactory.get(sc);
Collection sessions = sctx.getScriptSessionsByPage("/dwr2Demo/index3.html");
Util util = new Util(sessions);
show_message.append("\n"+message);
trimMessage();
util.setValue("showmessage", show_message.toString());
printUserList(util);
}
public void trimMessage(){
if(show_message.length() > 2000){
show_message.delete(0, ((show_message.length() - 2000)*2+2));
}
}
public void printUserList(Util util){
StringBuffer userlist = new StringBuffer();
userlist.append("<table>");
for(String s : name_list){
userlist.append("<tr><td><font color='blue'>"+s+"</font></td></tr>");
}
userlist.append("</table>");
util.setValue("userlist", userlist.toString());
}
}
编写好这个之后,可以运行一下。
经过测试,发现几个问题 浏览器我现在测试了三种发现三种都有自己的特性
IE :比较正常,有时候会慢一些
firefox :每次刷新访问的时候服务器会出现一个异常
google浏览器:在刷新的时候会无限等待,一直到接收到信息
另一教程:http://hintcnuie.iteye.com/blog/175828
相关推荐
Java APNS推送消息 HTTP/2协议, 基于JDK 11及以上
java applet方式实现服务器推技术 ,温度监控,dos下打开服务端,tomcat下部署,运行,相当震撼!有介绍!
java实现上传文件到远程服务器(spring mvc)
利用服务器推送技术实现站内短消息(java) 让client与service建立一个长连接,不用client手动request,service会自动response,当有好友在线的时候,会自动把好友的信息加载到select里,点击好友发送短消息时,会在...
实现 Dwr 服务器推送实现 Dwr 服务器推送实现 Dwr 服务器推送实现 Dwr 服务器推送实现 Dwr 服务器推送
javaCV将socket获取的视频流推到流媒体(RTMP)服务器所需要的jar
iphone 推送通知 服务器端java 实现 iphone 推送通知 APNS 包含所需jar包和实现代码
JAVA整合WebSocket实现服务器消息推送项目源码
java 实现数据库服务器之间的数据传输
android通过极光服务器实现推送,android的客户端,java的服务器端
APNS(Apple Push Notification Service)苹果推送通知服务。该技术由苹果公司提供的APNS服务。工作原理:首先,APNS会对用户进行物理连接认证,和设备令牌认证(简言之就是苹果的服务器检查设备里的证书已确定其为...
网上找的MQTT服务端的实现,代码有基本注释,自己研究一下
Java实现GoEasy实时推送demo、JAVA Web实时消息后台服务器推送技术
JAVA整合WebSocket实现服务器消息推送(项目源码) (1)将Database文件夹中的扩展名为db_netExam_Data.MDF和db_netExam_Log.LDF的两个文件拷贝到SQL Server安装路径下的Data文件夹中。 (2)打开SQL Server 2005中的...
Java苹果推送源代码,一个可以方便大家测试推送的小工具,证书验证使用P12文件在代码里面替代你想要推送的DeviceToken和苹果服务器地址即可实现推送
对集成华为推送服务的项目,发送推送消息。已设定数字角标自动+1
javacv推送桌面到rtmp服务器,拉取rtmp流并播放,实现同屏浏览 采用的javacv版本javacv-platform-1.5-bin,将javacv-platform-1.5-bin的所有jar都拷贝到了工程的lib目录,并引用了javacpp.jar, javacv-platform.jar...
ios消息推送java服务端实现 java push notification
java后台实现 get post 提交.zip