JSP + AJAX 打造簡單聊天室

46 篇文章 0 订阅
29 篇文章 0 订阅
本文代碼下載地址: http://download.csdn.net/source/798197
 
一個簡單的聊天室程式,但基本包含了簡單的AJAX的使用方法,可以做為簡單的Demo用來學習。
整個程式包含三個文件,頁面文件chat.html,後臺處理的Servlet文件Chat.java以及簡單的用戶資料的UserSessionListener.java類。其中chat.html用于接受用戶輸入,並將接收資料傳給後臺Servlet處理,UserSessionListener主要用於登入和登出時用戶列表及提示信息的處理。 
 
chat.html如下:
 
<html>
<head>
<meta  http-equiv ="Content-Type"  content ="text/html; charset=BIG5"   />
<title></title>
<script  type ="text/javascript">
var HttpRequest;
var url = "Chat";
function getRequest(){
    if(window.XMLHttpRequest){
        return(new XMLHttpRequest());
    }else if(window.ActiveXObject){
        try{
            return(new ActiveXObject("Msxm12.XMLHTTP"));
        }catch(e){
            try{
                return(new ActiveXObject("Microsoft.XMLHTTP"));
            }catch(e){}
        }
    }
}
function sendRequest(){
    if(document.getElementById("txtMessage").value.length<=0){
        return false;
    }
    HttpRequest = getRequest();
    
    //HttpRequest.onreadystatechange = getMessage;
    HttpRequest.open("POST", url, true);
    HttpRequest.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
    var msg;
    msg = "Action=AddMessage&Message=" + escape(document.getElementById("txtMessage").value);
    HttpRequest.send(msg);
    document.getElementById("txtMessage").value = "";
    //document.getElementById("txtMessage").focus();
}
function DisplayMessage(){
    if(HttpRequest.readyState == 4 && HttpRequest.status == 200){
        //alert("abd");
        //alert(HttpRequest.responseText);
        var messages;
        //alert(HttpRequest.responseText);
        messages = HttpRequest.responseText.split("!@#");
        //document.writeln(messages[0]);
        //document.writeln(messages[1]);
        document.getElementById("Messages").innerHTML = messages[0];
        document.getElementById("userList").innerHTML = "User List <br>" + messages[1];
        //document.getElementById
    }
}
function logout(){
    HttpRequest = getRequest();
    HttpRequest.open("POST", url, true);
    HttpRequest.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
    var msg;
    
    msg = "Action=Logout";
    HttpRequest.send(msg);
}
function getMessage(){
    HttpRequest = getRequest();
    HttpRequest.onreadystatechange = DisplayMessage;
    HttpRequest.open("POST", url, true);
    HttpRequest.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
    var msg;
    msg = "Action=GetMessage";
    HttpRequest.send(msg);
    document.all.txtMessage.focus();
}
function login(){
    HttpRequest = getRequest();
    var WshNetwork = new ActiveXObject("WScript.Network");
    
    HttpRequest.open("POST", url, true);
    HttpRequest.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
    var msg;
    msg = "Action=Login&UserName=" + WshNetwork.UserName;
    HttpRequest.send(msg);
    
    setInterval('getMessage();', 1000);
}
function chkSubmit(e){
    if(window.event){
        var keyNumber = e.keyCode;
        if(keyNumber == 13){
            sendRequest();
        }
    }
}
 </script>
 </head>
<body  onunload ="logout();"  onload ="login();">
    <form  action ="#"  onsubmit ="return false;">
    <table>
        <tr  valign ="top">
            <td  width ="400">< div  id ="Messages"  style ="font-size:9pt;width:800;height:400"></div></td>
            <td  width ="100"  id ="userList"></td>
         </tr>
     </table>
    <input  type ="text"  size ="20"  id ="txtMessage"  onkeypress ="chkSubmit(event);">
    <button  onclick ="sendRequest();"> Say </button>
     </form>
 </body>
 </html>

 

 
用於處理頁面提交信息的Servlet Chat.java代碼如下:
 
import  java.io.IOException;
import  java.io.PrintWriter;
import  java.text.SimpleDateFormat;
import  java.util.Date;
import  java.util.LinkedList;
import  javax.servlet.ServletContext;
import  javax.servlet.ServletException;
import  javax.servlet.http.HttpServletRequest;
import  javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSessionBindingEvent;
import javax.servlet.http.HttpSessionBindingListener;

import  moon.UserSessionListener;
/**
 * Servlet implementation class for Servlet: Chat
 *
 */
public   class  Chat  extends  javax.servlet.http.HttpServlet  implements
        javax.servlet.Servlet  {
    static final long serialVersionUID = 1L;
    private String userName = "";
    /*
     * (non-Java-doc)
     *
     * @see javax.servlet.http.HttpServlet#HttpServlet()
     */
    public Chat() {
        super();
    }
    private String getNow(){
        Date date = new Date();
        SimpleDateFormat df = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
        return df.format(date);
    }

    /*
     * (non-Java-doc)
     *
     * @see javax.servlet.http.HttpServlet#doGet(HttpServletRequest request,
     *      HttpServletResponse response)
     */
    @SuppressWarnings("unchecked")
    protected void doGet(HttpServletRequest request,
                         HttpServletResponse response) throws ServletException, IOException {
        String action = request.getParameter("Action");
        if (action == null) {
        } else if (action.equals("GetMessage")) {
            PrintWriter out = response.getWriter();
            out.print(getMessages() + "!@#" + getOnlineUsers());
        } else if (action.equals("AddMessage")) {
            String message = request.getParameter("Message");
            userName = ((UserSessionListener) request.getSession()
                    .getAttribute("UserName")).toString();
            addMessage(getNow() + " " + userName + " Says: " + message);
        }else if(action.equals("Logout")){
            request.getSession().removeAttribute("UserName");
        }else if(action.equals("Login")){
            request.getSession().setAttribute("UserName", new UserSessionListener(request.getParameter("UserName")));
        }
        // TODO Auto-generated method stub
    }
    /*
     * (non-Java-doc)
     *
     * @see javax.servlet.http.HttpServlet#doPost(HttpServletRequest request,
     *      HttpServletResponse response)
     */
    protected void doPost(HttpServletRequest request,
                          HttpServletResponse response) throws ServletException, IOException {
        doGet(request, response);
        // TODO Auto-generated method stub
    }
    @SuppressWarnings("unchecked")
    private String getMessages() {
        String result = null;
        ServletContext application = getServletContext();
        LinkedList<String> messages = (LinkedList<String>) application
                .getAttribute("ChatMessage");
        if (messages == null) {
            result = "";
        } else {
            StringBuilder sb = new StringBuilder("");
            for (String tmp : messages) {
                sb.append(tmp);
                sb.append("<br>");
            }
            result = sb.toString();
        }
        return result;
    }
    @SuppressWarnings("unchecked")
    private String getOnlineUsers() {
        String result;
        LinkedList<String> onlineUsers = (LinkedList<String>)getServletContext().getAttribute("UserList");
        if (onlineUsers == null) {
            result = "";
        } else {
            StringBuilder users = new StringBuilder("");
            for (String tmp : onlineUsers) {
                users.append(tmp);
                users.append("<br>");
            }
            result = users.toString();
        }
        return result;
    }
    @SuppressWarnings("unchecked")
    private void addMessage(String message) {
        ServletContext application = getServletContext();
        synchronized (application) {
            LinkedList<String> messages = (LinkedList<String>) application
                    .getAttribute("ChatMessage");
            if (messages == null) {
                messages = new LinkedList<String>();
            }
            if (messages.size() > 30) {
                messages.removeFirst();
            }
            messages.add(message);
            application.setAttribute("ChatMessage", messages);
        }
    }
    public void destroy() {
        super.destroy();
    }
}

用于做用戶登陸,登出處理類UserSessionListener代碼如下:

import  javax.servlet.ServletContext;
import  javax.servlet.http.HttpSessionBindingEvent;
import  javax.servlet.http.HttpSessionBindingListener;
import  java.text.SimpleDateFormat;
import  java.util.Date;
import  java.util.LinkedList;
public   class  UserSessionListener  implements HttpSessionBindingListener {
    private String userName;
    public UserSessionListener(String userName) {
        super();
        this.userName = userName;
    }

    private String getNow(){
        Date date = new Date();
        SimpleDateFormat df = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
        return df.format(date);
    }
    @SuppressWarnings("unchecked")
    public void valueBound(HttpSessionBindingEvent arg0) {
        // TODO Auto-generated method stub
        arg0.getSession().setMaxInactiveInterval(120);
        ServletContext application = arg0.getSession().getServletContext();
        synchronized (application) {
            LinkedList<String> userList = (LinkedList<String>) application
                    .getAttribute("UserList");
            if (userList == null) {
                userList = new LinkedList<String>();
            }
            userList.add(userName);
            application.setAttribute("UserList", userList);
            LinkedList<String> messages = (LinkedList<String>) application
                    .getAttribute("ChatMessage");
            if (messages == null) {
                messages = new LinkedList<String>();
            }
            messages.add(getNow() + " " +  userName + " Login...");
            application.setAttribute("ChatMessage", messages);
        }
    }
    @SuppressWarnings("unchecked")
    public void valueUnbound(HttpSessionBindingEvent arg0) {
        // TODO Auto-generated method stub
        ServletContext application = arg0.getSession().getServletContext();
        synchronized (application) {
            LinkedList<String> userList = (LinkedList<String>) application
                    .getAttribute("UserList");
            userList.remove(userName);
            application.setAttribute("UserList", userList);
            LinkedList<String> messages = (LinkedList<String>) application
                    .getAttribute("ChatMessage");
            if (messages == null) {
                messages = new LinkedList<String>();
            }
            messages.add(getNow() + " " + userName + " Logout...");
            application.setAttribute("ChatMessage", messages);
        }
    }
    /**
     * @return the userName
     */
    public String getUserName() {
        return userName;
    }
    /**
     * @param userName
     *            the userName to set
     */
    public void setUserName(String userName) {
        this.userName = userName;
    }
    public String toString() {
        return this.userName;
    }
}

 

 
其中UserSessionListener類實現了HttpSessionBingdingListener接口,以便于在用戶登入和登出時實現用戶列表的更新。
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
简易聊天本次实验的目的是通过以下题目掌握JSP内置对象,包括:request,response,session,application等。 (1)制作简易聊天,能够实现简单的页面聊天功能。 (2)制作网页计数器,要求相同的窗口内刷新页面访问次数并不增加,并且用图片来显数字。1、 熟悉request、response、session、application、out等内置对象; 2、 选择制作网页计数器程序需准备数字图片;1、进入jsp子目录,编写简易聊天JSP程序,聊天的需要实现的基本功能:输入昵称、聊天。 2.根据功能编写页面代码。二、网页计算器 利用内置对象application <html> <head> <base href="<%=basePath%>"> <title>My JSP 'Counter.jsp' starting page</title> <meta http-equiv="pragma" content="no-cache"> <meta http-equiv="cache-control" content="no-cache"> <meta http-equiv="expires" content="0"> <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> <meta http-equiv="description" content="This is my page"> <!-- <link rel="stylesheet" type="text/css" href="styles.css"> --> </head> <body> 您是第位访问者! </body> </html> 简易聊天本次实验的目的是通过以下题目掌握JSP内置对象,包括:request,response,session,application等。 (1)制作简易聊天,能够实现简单的页面聊天功能。 (2)制作网页计数器,要求相同的窗口内刷新页面访问次数并不增加,并且用图片来显数字。1、 熟悉request、response、session、application、out等内置对象; 2、 选择制作网页计数器程序需准备数字图片;1、进入jsp子目录,编写简易聊天JSP程序,聊

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值