Ajaxweb聊天室Java.docx
- 文档编号:11045804
- 上传时间:2023-02-24
- 格式:DOCX
- 页数:17
- 大小:29.55KB
Ajaxweb聊天室Java.docx
《Ajaxweb聊天室Java.docx》由会员分享,可在线阅读,更多相关《Ajaxweb聊天室Java.docx(17页珍藏版)》请在冰豆网上搜索。
Ajaxweb聊天室Java
1.介绍:
本文的主要目的就是通过Java语言开发基于html通信的聊天程序,主要用到了ajax,html通信,java,jsp。
穿越防火墙,在web页面进行通信,没有利用socket,不用另外开设端口进行通信。
仅仅利用浏览器的80端口就可以搞定。
下面列出主要的代码结构:
下面给出涉及到的各个代码:
1.ChatService.java类:
packagelee。
importjava.util.*。
importjava.io.*。
/*
*@version1.0
*/
publicclassChatService
{
privatestaticChatServicecs。
privatePropertiesuserList。
privateLinkedList
privateChatService(>
{
}
publicstaticChatServiceinstance(>
{
if(cs==null>
{
cs=newChatService(>。
}
returncs。
}
publicbooleanvalidLogin(Stringuser,Stringpass>
throwsIOException
{
if(loadUser(>.getProperty(user>==null>
{
returnfalse。
}
if(loadUser(>.getProperty(user>.equals(pass>>
{
returntrue。
}
returnfalse。
}
publicbooleanaddUser(Stringname,Stringpass>
throwsException
{
if(userList==null>
{
userList=loadUser(>。
}
if(userList.containsKey(name>>
{
thrownewException("用户名已经存在,请重新选择用户名">。
}
userList.setProperty(name,pass>。
saveUserList(>。
returntrue。
}
publicStringgetMsg(>
{
if(chatMsg==null>
{
chatMsg=newLinkedList
return""。
}
Stringresult=""。
for(Stringtmp:
chatMsg>
{
result+=tmp+"\n"。
}
returnresult。
}
publicvoidaddMsg(Stringuser,Stringmsg>
{
if(chatMsg==null>
{
chatMsg=newLinkedList
}
if(chatMsg.size(>>40>
{
chatMsg.removeFirst(>。
}
chatMsg.add(user+"说:
"+msg>。
}
//////////////////////////////////////////////////////////////
//下面是系统的工具方法
/////////////////////////////////////////////////////////////
privatePropertiesloadUser(>throwsIOException
{
if(userList==null>
{
Filef=newFile("userFile.properties">。
if(!
f.exists(>>
f.createNewFile(>。
userList=newProperties(>。
userList.load(newFileInputStream(f>>。
}
returnuserList。
}
privatebooleansaveUserList(>throwsIOException
{
if(userList==null>
{
returnfalse。
}
userList.store(newFileOutputStream("userFile.properties">,"userList">。
returntrue。
}
}
2.ChatServlet.java
packagelee。
importjavax.servlet.ServletException。
importjavax.servlet.ServletContext。
importjavax.servlet.RequestDispatcher。
importjavax.servlet.http.HttpServlet。
importjavax.servlet.http.HttpServletRequest。
importjavax.servlet.http.HttpServletResponse。
importjava.io.PrintWriter。
importjava.io.IOException。
/*
*@version1.0
*
Date:
*/
publicclassChatServletextendsHttpServlet
{
publicvoidservice(HttpServletRequestrequest,HttpServletResponseresponse>
throwsIOException,ServletException
{
request.setCharacterEncoding("UTF-8">。
Stringmsg=request.getParameter("chatMsg">。
if(msg!
=null&&!
msg.equals("">>
{
Stringuser=(String>request.getSession(true>.getAttribute("user">。
ChatService.instance(>.addMsg(user,msg>。
}
//设置中文流
response.setContentType("text/html。
charset=GBK">。
PrintWriterout=response.getWriter(>。
out.println(ChatService.instance(>.getMsg(>>。
}
}
3.LoginServlet.java
packagelee。
importjavax.servlet.ServletException。
importjavax.servlet.ServletContext。
importjavax.servlet.RequestDispatcher。
importjavax.servlet.http.HttpServlet。
importjavax.servlet.http.HttpServletRequest。
importjavax.servlet.http.HttpServletResponse。
importjava.io.PrintWriter。
importjava.io.IOException。
/*
*@author
*
Date:
*/
publicclassLoginServletextendsHttpServlet
{
publicvoidservice(HttpServletRequestrequest,HttpServletResponseresponse>
throwsIOException,ServletException
{
Stringname=request.getParameter("name">。
Stringpass=request.getParameter("pass">。
if(name==null||pass==null>
{
request.setAttribute("error","用户名和密码都不能为空">。
forward("/index.jsp",request,response>。
}
if(ChatService.instance(>.validLogin(name,pass>>
{
request.getSession(true>.setAttribute("user",name>。
request.setAttribute("msg",ChatService.instance(>.getMsg(>>。
forward("/chat.htm",request,response>。
}
else
{
request.setAttribute("error","用户名和密码不匹配">。
forward("/index.htm",request,response>。
}
}
publicvoidforward(Stringurl,HttpServletRequestrequest,HttpServletResponseresponse>
throwsServletException,IOException
{
ServletContextsc=getServletConfig(>.getServletContext(>。
RequestDispatcherrd=sc.getRequestDispatcher(url>。
rd.forward(request,response>。
}
}
4.RegServlet.java
packagelee。
importjavax.servlet.ServletException。
importjavax.servlet.ServletContext。
importjavax.servlet.RequestDispatcher。
importjavax.servlet.http.HttpServlet。
importjavax.servlet.http.HttpServletRequest。
importjavax.servlet.http.HttpServletResponse。
importjava.io.PrintWriter。
importjava.io.IOException。
/*
*@author
*
Date:
*/
publicclassRegServletextendsHttpServlet
{
publicvoidservice(HttpServletRequestrequest,HttpServletResponseresponse>
throwsIOException,ServletException
{
Stringname=request.getParameter("name">。
Stringpass=request.getParameter("pass">。
if(name==null||pass==null>
{
request.setAttribute("tip","用户名和密码都不能为空">。
forward("/reg.jsp",request,response>。
}
try
{
if(ChatService.instance(>.addUser(name,pass>>
{
request.setAttribute("tip","注册成功,请登陆系统">。
forward("/reg.jsp",request,response>。
}
else
{
request.setAttribute("tip","无法正常注册,请重试">。
forward("/reg.jsp",request,response>。
}
}
catch(Exceptione>
{
request.setAttribute("tip",e.getMessage(>>。
forward("/reg.jsp",request,response>。
}
}
publicvoidforward(Stringurl,HttpServletRequestrequest,HttpServletResponseresponse>
throwsServletException,IOException
{
ServletContextsc=getServletConfig(>.getServletContext(>。
RequestDispatcherrd=sc.getRequestDispatcher(url>。
rd.forward(request,response>。
}
}
chat.htm
DOCTYPEHTMLPUBLIC"-//W3C//DTDHTML4.01Transitional//EN"
"">
charset=GBK">
">
">
 。
varinput=document.getElementById("chatMsg">。
input.focus(>。
varXMLHttpReq。
//创建XMLHttpRequest对象
functioncreateXMLHttpRequest(>
{
if(window.XMLHttpRequest>
{//Mozilla浏览器
XMLHttpReq=newXMLHttpRequest(>。
}
elseif(window.ActiveXObject>
{
//IE浏览器
try
{
XMLHttpReq=newActiveXObject("Msxml2.XMLHTTP">。
}
catch(e>
{
try
{
XMLHttpReq=newActiveXObject("Microsoft.XMLHTTP">。
}
catch(e>
{
}
}
}
}
//发送请求函数
functionsendRequest(>
{
varchatMsg=input.value。
createXMLHttpRequest(>。
varurl="chat.do"。
XMLHttpReq.open("POST",url,true>。
XMLHttpReq.setRequestHeader("Content-Type","application/x-www-form-urlencoded">。
XMLHttpReq.onreadystatechange=processResponse。
//指定响应函数
input.value=""。
XMLHttpReq.send("chatMsg="+chatMsg>。
//发送请求
}
functionsendEmptyRequest(>
{
createXMLHttpRequest(>。
varurl="chat.do"。
XMLHttpReq.open("POST",url,true>。
XMLHttpReq.setRequestHeader("Content-Type","application/x-www-form-urlencoded">。
XMLHttpReq.onreadystatechange=processResponse。
//指定响应函数
XMLHttpReq.send(>。
//发送请求
setTimeout("sendEmptyRequest(>",800>。
}
//处理返回信息函数
functionprocessResponse(>
{
if(XMLHttpReq.readyState==4>
{
//判断对象状态
if(XMLHttpReq.status==200>
{
//信息已经成功返回,开始处理信息
document.getElementById("chatArea">.value=XMLHttpReq.responseText。
}
else
{
//页面不正常
window.alert("您所请求的页面有异常。
">。
}
}
}
functionenterHandler(event>
{
varkeyCode=event.keyCode?
event.keyCode:
event.which?
event.which:
event.charCode。
if(keyCode==13>{
sendRequest(>。
}
}