- 浏览: 135233 次
- 性别:
- 来自: 安徽
文章分类
最新评论
-
7_iroy:
竟然没人来评论??不错的学习源码啊,不过LZ没有给出表格,这有 ...
触发器-----------数据库(SQL) -
fatedgar:
best_yuan 写道好像运行不了,缺少spring包
没啊 ...
根据RTF模版输出doc文件(草稿) -
syfye:
请问Linux下中文乱码,遇到过吗?如何解决?
根据RTF模版输出doc文件(草稿) -
best_yuan:
好像运行不了,缺少spring包
根据RTF模版输出doc文件(草稿)
(例子见下面下载……)
1:页面
单击好友显示好友列表(这里是虚拟的),单击好友弹出对话框。
2 css样式
3.请求发送到后台ChatServlet,ChatServlet调用ChatService
ChatService
ChatServlet
1:页面
单击好友显示好友列表(这里是虚拟的),单击好友弹出对话框。
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%> <html> <head> <title>聊天</title> <link href="css.css" rel="stylesheet" type="text/css"> <script language="javascript" type="text/javascript"> var _IsMousedown = 0; var _ClickLeft = 0; var _ClickTop = 0; function moveInit(divID,evt) { _IsMousedown = 1; if(getBrowserType() == "NSupport") { return; } var obj = getObjById(divID); if(getBrowserType() == "fox") { _ClickLeft = evt.pageX - parseInt(obj.style.left); _ClickTop = evt.pageY - parseInt(obj.style.top); }else{ _ClickLeft = evt.x - parseInt(obj.style.left); _ClickTop = evt.y - parseInt(obj.style.top); } } function Move(divID,evt) { if(_IsMousedown == 0) { return; } var objDiv = getObjById(divID); if(getBrowserType() == "fox") { objDiv.style.left = evt.pageX - _ClickLeft; objDiv.style.top = evt.pageY - _ClickTop; } else{ objDiv.style.left = evt.x - _ClickLeft; objDiv.style.top = evt.y - _ClickTop; } } function stopMove() { _IsMousedown = 0; } function getObjById(id) { return document.getElementById(id); } function getBrowserType() { var browser=navigator.appName var b_version=navigator.appVersion var version=parseFloat(b_version) //alert(browser); if ((browser=="Netscape")) { return "fox"; } else if(browser=="Microsoft Internet Explorer") { if(version>=4) { return "ie4+"; } else { return "ie4-"; } } else { return "NSupport"; } } function showdiv1(){ var d=document.getElementById('subpanel'); d.style.display="block"; } function hiddendiv1(name){ var d=document.getElementById('subpanel'); d.style.display="none"; document.getElementById('movediv').style.display='block'; document.getElementById('user').innerHTML=name document.getElementById("speaker").value=name; } function hiddendiv2(){ document.getElementById('getmessage').onLoad=""; } </script> </head> <body onLoad="sendEmptyRequest();"> <div id="getmessage"></div> <div id="footpanel"> <ul id="mainpanel"> <li id="chatpanel"> <a href="#" class="chat" onClick="showdiv1()">在线好友(<em>6</em>)</a> <div class="subpanel" id="subpanel"> <h3><span> – </span>在线好友</h3> <ul> <li><a href="#" onClick="hiddendiv1('张三')"><img src="img/user.png" />张三</a></li> <li><a href="#" onClick="hiddendiv1('李四')"><img src="img/user.png" />李四</a></li> <li><a href="#" onClick="hiddendiv1('王五')"><img src="img/user.png" />王五</a></li> <li><a href="#" onClick="hiddendiv1('赵六')"><img src="img/user.png" />赵六</a></li> <li><a href="#" onClick="hiddendiv1('abc')"><img src="img/user.png" />abc</a></li> <li><a href="#" onClick="hiddendiv1('123')"><img src="img/user.png" />123</a></li> </ul> </div> </li> </ul> </div> <div id="movediv" style="left:20px;top:20px;" onMouseDown="moveInit('movediv',event);" onMouseMove="Move('movediv',event)" onMouseUp="stopMove()" onMouseOut="stopMove()"> <table style="width:376px; background-color: #f0f5fb;border:none; "> <tr> <td width="40%"> <span style="font-size:15px;"> 与<label id="user"></label>在线聊天中 </span> </td> <td width="30%" style="text-align:right;"> <span style="font-size:12px; font-style:Verdana;"><a href = "javascript:void(0)" onclick = "document.getElementById('movediv').style.display='none';">点这里关闭本窗口</a></span> </td> </tr> </table> <table id="$chat_table" style="width:376px; background-color: #f0f5fb; "> <tr> <td style="height:200px; width:100%;"> <div align="center"> <textarea id="chatArea" name="chatArea" cols="40" rows="15" readonly="readonly"></textarea> </div> </td> </tr> <tr> <td style="height:20px;text-align:right; vertical-align:middle; width: 100%;-moz-user-select: text;"> <div align="center"> <input id="chatMsg" name="chatMsg" type="text"size="40" onkeypress="enterHandler(event);"/> <input type="button" name="button" value="提交" onclick="ajaxSubmit();"/> <input type=hidden id="speaker" value=""> </div> </td> </tr> </table> </div> <script type="text/javascript"> var xmlHttpRequest = null;//声明一个变量来接受xmlHttpRequest对象 function ajaxSubmit() { if (window.ActiveXObject) {//这是IE浏览器 xmlHttpRequest=new ActiveXObject("Microsoft.XMLHTTP"); } else if (window.XMLHttpRequest) {//这是除IE外的其他浏览器 xmlHttpRequest = new XMLHttpRequest(); } if (xmlHttpRequest != null) { var v1 = document.getElementById("speaker").value; var v2 = document.getElementById("chatMsg").value; //POST请求,ChatServlet是servlet,true的是异步,false就是同步 xmlHttpRequest.open("POST", "${pageContext.servletContext.contextPath }/ChatServlet", true); xmlHttpRequest.onreadystatechange = ajaxCallback;//关联好ajax的回调方法 document.getElementById("chatMsg").value=""; xmlHttpRequest.setRequestHeader("Content-Type", "application/x-www-form-urlencoded") xmlHttpRequest.send("user=" + v1 + "&chatMsg=" + v2); } } function sendEmptyRequest(){ if (window.ActiveXObject) { xmlHttpRequest=new ActiveXObject("Microsoft.XMLHTTP"); } else if (window.XMLHttpRequest) { xmlHttpRequest = new XMLHttpRequest(); } if (xmlHttpRequest != null) { xmlHttpRequest.open("POST", "${pageContext.servletContext.contextPath }/ChatServlet", true); xmlHttpRequest.onreadystatechange = ajaxCallback; xmlHttpRequest.setRequestHeader("Content-Type", "application/x-www-form-urlencoded") xmlHttpRequest.send(null); //指定0.8s之后再次发送请求 setTimeout("sendEmptyRequest()" , 800); } } // 处理返回信息函数 function ajaxCallback() { //当XMLHttpRequest读取服务器响应完成 ReadyState共有5中状态(0,1,2,3,4) if (xmlHttpRequest.readyState == 4) { //服务器响应正确(当服务器响应正确时,返回值为200的状态码) if (xmlHttpRequest.status == 200) { //使用chatArea多行文本域显示服务器响应的文本 document.getElementById("chatArea").value = xmlHttpRequest.responseText; } //else //{ //提示页面不正常 // window.alert("您所请求的页面有异常。"); //} } } function enterHandler(event){ //获取用户单击键盘的“键值” var keyCode = event.keyCode ? event.keyCode : event.which ? event.which : event.charCode; //如果是回车键 if (keyCode == 13){ ajaxSubmit(); } } </script> </body> </html>
2 css样式
#footpanel { display: none; position: fixed; bottom: 0; left: 0; z-index: 9999; /*制作出一个斜面,让工具栏看起来更有层次感*/ background: #e3e2e2; border: 1px solid #c3c3c3; border-bottom: none; width: 370; margin: 0 975px 0; } *html #footpanel { /*IE6 Hack 让工具栏定位底部*/ margin-top: -1px; /*修正IE6工具栏滚动条的1像素误差*/ position: absolute; top:expression(eval(document.compatMode &&document.compatMode=='CSS1Compat') ?documentElement.scrollTop+(documentElement.clientHeight-this.clientHeight) : document.body.scrollTop +(document.body.clientHeight-this.clientHeight)); } #footpanel ul { padding: 0; margin: 0; float: left; width: 100%; list-style: none; border-top: 1px solid #fff; /*制作出一个斜面,让工具栏看起来更有层次感*/ font-size: 1em; line-height:1em; } #footpanel ul li{ padding: 0; margin: 0; float: left; position: relative; } #footpanel ul li a{ padding: 5px; float: left; text-indent: -9999px; height: 16px; width: 16px; text-decoration: none; color: #333; position: relative; } html #footpanel ul li a:hover{ background-color: #fff; } html #footpanel ul li a.active { /*当工具栏上的链接被点击,里面的菜单打开的状态*/ background-color: #fff; height: 17px; margin-top: -2px; /*在工具栏上向上提高2像素*/ border: 1px solid #555; border-top: none; z-index: 200; /*在工具栏上层显示*/ position: relative; } #footpanel a.chat{ background: url(balloon.gif) no-repeat 15px center; width: 126px; border-left: 1px solid #bbb; padding-left: 40px; text-indent: 0; /*将上面的文字位移去掉*/ } #footpanel li#chatpanel { float: right; } /*让好友列表居右显示*/ #footpanel a small { text-align: center; width: 70px; background: url(pop_arrow.gif) no-repeat center bottom; padding: 5px 5px 11px; display: none; /*默认状态为隐藏*/ color: #fff; font-size: 1em; text-indent: 0; } #footpanel a:hover small{ display: block; /*悬浮时显示*/ position: absolute; top: -35px; /*在工具栏上方35像素位置显示--*/ left: 50%; margin-left: -40px; /*居中*/ z-index: 9999; } #footpanel ul li div a { text-indent: 0;/*关键就是它*/ width: auto; height: auto; padding: 0; float: none; color: #00629a; position: static; } #footpanel ul li div a:hover { text-decoration: underline; } /*999*/ #footpanel .subpanel { position: absolute; left: 0; bottom: 27px; display: none; /*默认应为隐藏,但现在为了演示,将其设定为block,制作成功后应该为none*/ width: 125px; border: 1px solid #555; background: #fff; overflow: hidden; padding-bottom: 2px; } #footpanel h3 { background: #526ea6; padding: 5px 10px; color: #fff; font-size: 1.1em; cursor: pointer; } #footpanel h3 span { font-size: 1.5em; float: right; line-height: 0.6em; font-weight: normal; } #footpanel .subpanel ul{ padding: 0; margin: 0; background: #fff; width: 100%; overflow: auto; } #footpanel .subpanel li { float: none; /*取消上面定义的居左浮动-*/ display: block; padding: 0; margin: 0; overflow: hidden; clear: both; background: #fff; position: static; /*取消上面定义的相对定位*/ font-size: 1em; } #chatpanel .subpanel li a img { float: left;/*让图片居左显示*/ margin: 0 5px; } #chatpanel .subpanel li a{ padding: 3px 0; margin: 0; line-height: 22px; height: 22px; background: #fff; display: block;/*让链接呈块状显示,可点击区域变大*/ } #chatpanel .subpanel li a:hover { background: #3b5998; color: #fff; text-decoration: none; } #movediv{ display: none; width:100px; height:273px;position:absolute;border:1px solid #000;background:#EAEAEA; cursor:pointer; text-align:center; left:100px; top:10px; }
3.请求发送到后台ChatServlet,ChatServlet调用ChatService
ChatService
package com.happysys.im; import java.util.LinkedList; public class ChatService { //使用单例模式来设计ChatService private static ChatService cs; //使用LinkedList对象保存聊天信息 private LinkedList<String> chatMsg; //构造器私有 private ChatService() { } //通过静态方法返回唯一的ChatService对象 public static ChatService instance() { if (cs == null) { cs = new ChatService(); } return cs; } //获取系统中所有聊天信息 public String getMsg() { //如果chatMsg对象为null,表明不曾开始聊天 if (chatMsg == null) { chatMsg = new LinkedList<String>(); return ""; } StringBuilder result = new StringBuilder(""); //将chatMsg中所有聊天信息拼接起来。 for (String tmp : chatMsg) { result.append(tmp + "\n"); } return result.toString(); } //用户发言,添加聊天信息 public void addMsg(String user , String msg) { ///如果chatMsg对象为null,初始化chatMsg对象 if (chatMsg == null) { chatMsg = new LinkedList<String>(); } //最多保存40条聊天信息,当超过40条之后,将前面聊天信息删除 if (chatMsg.size() > 40) { chatMsg.removeFirst(); } //添加新的聊天信息 chatMsg.add("对"+user + "说:" + msg); } }
ChatServlet
package com.happysys.im; import java.io.IOException; import java.io.PrintWriter; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class ChatServlet extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doPost(request,response); } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //设置使用UTF-8字符集来解析请求参数 //XMLHttpRequest所发送的POST请求默认采用UTF-8字符集 request.setCharacterEncoding("UTF-8"); String msg = request.getParameter("chatMsg"); System.out.println(msg); if ( msg != null && !msg.equals("")) { //取得当前用户 //String user = (String)request.getSession(true).getAttribute("user"); String user=request.getParameter("user"); //调用ChatService的addMsg来添加聊天消息 ChatService.instance().addMsg(user , msg); System.out.println(user); } //设置响应内容的类型 response.setContentType("text/html;charset=utf-8"); //获取页面输出流 PrintWriter out = response.getWriter(); //直接生成响应 out.println(ChatService.instance().getMsg()); } }
- MyAjax.rar (36.6 KB)
- 下载次数: 5
- MyAJAX.jar (33.6 KB)
- 下载次数: 1
发表评论
-
如何制作PDF套打模板
2014-08-11 16:15 4729以死亡证明PDF套打为例子: 首先下载一个死亡证明wo ... -
经纬度转换(gps|百度|google)
2014-05-19 15:14 2383http接口: http://api.map.baidu ... -
百度地图画连线
2014-05-19 15:31 8604附件中的地图连线.rar是简单的连线html例子。 ... -
百度地图画多边形区域
2014-03-05 10:03 21996在百度地图上画多边形区域, <html> ... -
https设置
2012-05-07 16:39 1026把原来访问的http://localhost:8080/jkd ... -
virtualhost配置(windows环境)
2012-05-07 15:24 1212要求实现的功能如下: 如把http://10.252.4.4: ... -
根据RTF模版输出doc文件(草稿)
2012-03-29 13:56 3859有个后缀名为rtf的文件(是word格式的一种):ZCAsse ...
相关推荐
Ajax(Asynchronous JavaScript and XML...综上所述,构建一个Ajax聊天室涉及到前端交互设计、Ajax技术、实时通信机制、用户认证、后端处理等多个方面,是一个综合性的Web开发项目,需要对Web技术有深入的理解和实践。
【phpAJAX聊天室】是一种基于PHP和AJAX技术实现的在线实时交流平台。这个聊天室系统能够让用户无需刷新页面就能进行实时的消息传递,提供了一种高效、便捷的沟通方式。接下来,我们将深入探讨该系统的构成及其核心...
1:像淘宝下面的那个阿里巴巴工具条,单击显示好友列表 2:用AJAX做的聊天室
【基于AJAX的聊天室】 在互联网应用中,实时交互性是提高用户体验的关键因素之一,而基于AJAX(Asynchronous JavaScript and XML)的聊天室就是这样一种实现方式。AJAX允许网页在不刷新整个页面的情况下与服务器...
无刷新聊天室程序"是运用Ajax技术和相关即时通信策略实现的一个高效、互动的在线聊天平台,它利用JavaScript、XMLHttpRequest对象以及可能的WebSocket或Server-Sent Events技术,确保用户在无需刷新页面的情况下进行...
【Ajax聊天室构建详解】 Ajax(Asynchronous JavaScript and XML)技术是一种在无需刷新整个网页的情况下,能够更新部分网页内容的技术。结合PHP服务器端语言,我们可以创建一个实时、交互性强的在线聊天室。以下是...
【基于jQuery的Ajax聊天室程序】是一个典型的Web交互应用,它利用了Ajax技术来实现实时的、无需页面刷新的用户交流。Ajax(Asynchronous JavaScript and XML)是一种在不重新加载整个网页的情况下,能够更新部分网页...
【Ajax简易聊天室】是一个基于JSP、Ajax和Java技术实现的在线实时交流平台,它允许用户无需刷新页面即可发送和接收消息,提供了一种轻松、便捷的沟通体验。在这个项目中,Ajax起到了关键作用,它是一种在不重新加载...
【基于AJAX的简易聊天室】是一个利用现代Web技术实现的实时交互平台,它整合了AJAX、JSP、Servlet和MySQL数据库等关键技术,旨在提供一个简洁高效的在线沟通环境。AJAX(Asynchronous JavaScript and XML)是核心,...
【Ajax聊天室】是一个基于Java Web技术实现的简单交互式应用,主要利用了Servlet、JSP和Ajax技术。这个小例子展示了如何通过Ajax实现在不刷新整个页面的情况下更新内容,提供了一个基本的在线聊天功能。 1. **...
最简单的ajax聊天室,适合刚学习ajax的朋友。最简单的ajax聊天室,适合刚学习ajax的朋友。最简单的ajax聊天室,适合刚学习ajax的朋友。最简单的ajax聊天室,适合刚学习ajax的朋友。
**Ajax无刷新简单聊天室详解** Ajax(Asynchronous JavaScript and XML)是一种在无需重新加载整个网页的情况下,能够更新部分网页的技术。它通过在后台与服务器进行少量数据交换,实现了页面的异步更新,大大提升...
ASP.NET和AJAX技术结合创建无刷新聊天室是一种常见的Web应用程序开发方法,它提供了一种高效、用户友好的交互体验。下面将详细讲解这个话题。 首先,ASP.NET是由微软开发的一种用于构建动态Web应用程序的框架,它...
同时,使用开发者工具进行调试,确保Ajax请求和响应正常。 9. **性能优化**:优化Ajax请求的频率,避免频繁的网络交互导致的性能下降。可以使用缓存策略减少不必要的请求,或者使用批量发送来合并多个请求。 通过...
**Ajax 聊天室源码详解** Ajax(Asynchronous JavaScript and XML)是一种在无需刷新整个网页的情况下,能够更新部分网页的技术。它通过在后台与服务器进行少量数据交换,使得网页实现异步更新,极大地提升了用户...
【基于Ajax的Web聊天室】是一个使用Ajax技术构建的在线实时通信系统,它允许用户无需刷新页面即可进行实时聊天。Ajax(Asynchronous JavaScript and XML)的核心在于通过JavaScript异步地与服务器交换数据并更新部分...
【基于AJAX的无刷新聊天室】是一种利用Ajax技术实现的实时交互聊天系统,它无需用户手动刷新页面就能即时更新聊天内容,提升了用户体验。在Web 2.0时代,AJAX(Asynchronous JavaScript and XML)成为了构建动态、...
Ajax简易聊天室,运行于ASP环境,用Access存储聊天记录,本程序纯属为了学习,请不要当成功能强大的聊天室来用,呵呵,只是想研究一下Ajax练手的,实现了聊天室的基本雏形,可以无刷新发送消息,数据库定时更新,...