聊天室

此聊天室用Servlet和jsp实现,功能包括统计在线人数,查看在线用户,上传文件,显示用户聊天记录。还有待修改的地方,适合入门。

工程文件包括login.jsp,main.jsp,display.jsp,sponse.jsp,shangchuan.jsp,sc.jsp,userlist.jsp

统计在线人数用到servlet监听器userlistener.java

package listener;

import java.util.ArrayList;
import javax.servlet.ServletContext;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import javax.servlet.http.HttpSessionAttributeListener;
import javax.servlet.http.HttpSessionBindingEvent;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;

public class userlistener implements ServletContextListener,HttpSessionAttributeListener,HttpSessionListener{

	ServletContext app=null;
	@Override
	public void sessionCreated(HttpSessionEvent se) {
		// TODO Auto-generated method stub
		Integer num=(Integer)app.getAttribute("onlinecount");
		app.setAttribute("onlinecount", num+1);
		String user=(String) se.getSession().getAttribute("username");
		ArrayList<String> ar=(ArrayList<String>)app.getAttribute("name");
		ar.add(user);
		app.setAttribute("name", ar);
	}

	@Override
	public void sessionDestroyed(HttpSessionEvent se) {
		// TODO Auto-generated method stub
		Integer num=(Integer)app.getAttribute("onlinecount");
		app.setAttribute("onlinecount", num-1);
		ArrayList<String> ar=(ArrayList<String>)app.getAttribute("name");
		String user=(String) se.getSession().getAttribute("username");
		ar.remove(user);
		app.setAttribute("name", ar);
	}

	@Override
	public void attributeAdded(HttpSessionBindingEvent se) {
		// TODO Auto-generated method stub
		ArrayList<String> array=(ArrayList<String>)app.getAttribute("name");
		String user=(String)se.getValue();
		array.add(user);
	}

	@Override
	public void attributeRemoved(HttpSessionBindingEvent se) {
		// TODO Auto-generated method stub
		ArrayList<String> array=(ArrayList<String>)app.getAttribute("name");
		String user=(String)se.getValue();
		array.remove(user);
	}

	@Override
	public void attributeReplaced(HttpSessionBindingEvent event) {
		// TODO Auto-generated method stub

	}

	@Override
	public void contextDestroyed(ServletContextEvent arg0) {
		// TODO Auto-generated method stub
		app.removeAttribute("name");
		app.setAttribute("onlinecount", 0);
	}

	@Override
	public void contextInitialized(ServletContextEvent sce) {
		// TODO Auto-generated method stub
		ArrayList<String> array=new ArrayList<String>();
		app=sce.getServletContext();
		app.setAttribute("name",array);
		app.setAttribute("onlinecount", 0);
	}
}

登录界面

login.jsp

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%@ page import="listener.userlistener" %>
<html>
  <head>
    <title>My JSP 'login.jsp' starting page</title>
  </head>

  <body bgcolor="green">
  <%
     request.setCharacterEncoding("gb2312");
     response.setContentType("text/html;charset=gb2312");
   %>

  <center>
    <h5>欢迎来到聊天室</h5>
    <h1>艳子茶访</h1>
    <form action="main.jsp" method="post">
    <table>
        <tr>
            <td>用户名</td>
            <td><input type="text" name="username"></td>
        </tr>
        <tr>
            <td>密码</td>
            <td><input type="password" name="mima"></td>
        </tr>
    </table>
        <tr>
            <td><input type="submit" value="登录"></td>
            <td><input type="reset" value="取消"></td>
        </tr>
  </form>
  </center>
  </body>
</html>

聊天室界面

此页面由两个框架组成

main.jsp

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%
     request.setCharacterEncoding("gb2312");
     response.setContentType("text/html;charset=gb2312");
%>
<html>
  <head>
    <title>聊天主页面</title>
  </head>
    <%
    application.setAttribute("message", "");
    String na=request.getParameter("username");
    session.setAttribute("username", na);
   %>
  <frameset rows="*,100" frameborder="no">
   <frame src=display.jsp name=display frameborder="no" scrolling="auto">
   <frame src=sponse.jsp name=sponse frameborder="no">
  </frameset>
  <noframes></noframes>
</html>

上半部分的display.jsp

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%@ page import="listener.userlistener" %>
<%
       response.setHeader("refresh","5");
%>
<html>
  <head>
    <title>My JSP 'display.jsp' starting page</title>
  </head>
  <body bgcolor=green>
  <%
     request.setCharacterEncoding("gb2312");
     response.setContentType("text/html;charset=gb2312");
   %>
  <form action="" method="post">
     <p align="center"><font size=5>聊天记录</font></p>
     <p align="right"><font size=2>目前在线人数:<%=application.getAttribute("onlinecount") %></font></p>
     <hr>
     <%
        String str=application.getAttribute("message").toString();
        if(!str.equals("")&&str!=null){
          out.print(str);
        }
     %>
  </form>
  </body>
</html>

下半部分的sponse.jsp

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<html>
  <head>
    <title>My JSP 'sponse.jsp' starting page</title>
    <script language="javaScript">
       function qinkong(){
         application.removeAttribute("message");
       }
    </script>
  </head>
  <body bgcolor=green>
   <%
     request.setCharacterEncoding("gb2312");
     response.setContentType("text/html;charset=gb2312");
   %>
  <form action="" method="post">
    <p align="center">
                 我要发言:
       <input type="text" name="message" size="70">
       <input type="submit" value="发送">
       <input type="reset" value="清除">
    </p>
    <p align="center">
       <a href="shangchuan.jsp">上传文件</a>
       <a href="userlist.jsp">查看在线用户</a>
       <input type="submit" value="清空聊天记录" onclick="qinkong()">
    </p>
  </form>
  <%
    String user=(String)session.getAttribute("username");
    String father=(String)application.getAttribute("message");
    String son=request.getParameter("message");
    application.setAttribute("check", son);
    if(son!=null&&!son.equals("")&&user!=null&&father!=null){
       application.setAttribute("message",father+user+"说: "+son+"<br>");
    }
  %>
  </body>
</html>

上传文件页面

实现上传功能需要用到jspSmartUpload.jar包

shangchuan.jsp

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<html>
  <head>
    <title>文件上传</title>
  </head>
  <body bgcolor=green>
     <p align="center">请选择你要上传的文件</p>
     <form action="sc.jsp" method="post" enctype="multipart/form-data">
        <input type="hidden" name="TEST" value="good">
        <table border="0" align="center">
          <tr>
             <td><div align="center">
                 <input type="FILE" name="FILE1" size="30">
             </div></td>
          </tr>
          <tr>
             <td><div align="center">
                 <input type="submit" name="Submit" value="开始上传">

                 <a href="display.jsp">返回</a>
             </div></td>
          </tr>
        </table>
     </form>
  </body>
</html>

上传一个shang.txt文件到工程目录mulu成功后的处理页面

sc.jsp

<%@ page language="java" import="java.sql.*"
   contentType="text/html;charset=gb2312" errorPage=""%>
<%@ page import="com.jspsmart.upload.*" %>
<jsp:useBean id="SU" scope="page" class="com.jspsmart.upload.SmartUpload"/>
<html>
  <head>
    <title>上传文件</title>
    <meta http-equiv="Content-Type" content="text/html;charset=2312">
  </head>
  <body bgcolor=green>
    <%
       try{
         SU.initialize(pageContext);
         SU.service(request, response);
         SU.upload();
         String fn=SU.getFiles().getFile(0).getFileName();
         SU.save("mulu/");
         out.println("<br>上传成功查看<a href=mulu/"+fn+">mulu/"+fn+"文件</a>");
       }
       catch(Exception ex)
       {
         ex.printStackTrace();
       }
    %>
    <br>
    <a href="sponse.jsp">返回</a>
  </body>
</html>

查看用户列表

uselist.jsp

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<html>
  <head>
    <title>My JSP 'userlist.jsp' starting page</title>
  </head>

  <body bgcolor=green>
  <center>
    <h3>用户列表</h3>
    <%
       ArrayList<String> array=(ArrayList<String>)application.getAttribute("name");
       Iterator<String> it=array.iterator();
       while(it.hasNext()){
         String str=it.next();
         out.print("**"+it.next()+"**"+" ");
       }
    %>
    <br>
    <a href="sponse.jsp">返回</a>
  </center>
  </body>
</html>
时间: 2024-08-06 07:51:53

聊天室的相关文章

Python Socket 编程——聊天室演示样例程序

上一篇 我们学习了简单的 Python TCP Socket 编程,通过分别写服务端和client的代码了解主要的 Python Socket 编程模型.本文再通过一个样例来加强一下对 Socket 编程的理解. 聊天室程序需求 我们要实现的是简单的聊天室的样例,就是同意多个人同一时候一起聊天.每一个人发送的消息全部人都能接收到,类似于 QQ 群的功能,而不是点对点的 QQ 好友之间的聊天.例如以下图: 图来自:http://www.ibm.com/developerworks/linux/tu

自写聊天室_LinuxC实现(4)——项目文档

西邮Linux兴趣小组  暑期项目 项目名称:    happychat        项目作者:      楚东方     1. 引言 1.1 项目综述 对项目进行简要介绍,并说明编写此项目的目的. 该项目为聊天室,主要为了实现聊天,文件传输,方便linux环境下的,交流与聊天. 实现功能: 1.好友管理: (1)添加好友 (2)删除好友 2.群管理 (1)创建群 (2)加群 (3)退群 (4)解散群 3.文件传送 实现了上传和下载的断点续传 4.聊天界面分屏 利用光标的移动对输入和屏幕聊天记

Python Socket 简单聊天室2

上篇文章写了一个简单的单线程的一问一答的简单聊天室.这次我们使用SocketServer模块搭建一个多线程异步的聊天室. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 # -*- coding:utf-8 -*- import SocketServer class  mysocketclass(SocketServer.BaseRequestHandler):     def handle(self):         client_inform

Python聊天室

1.简介 本次项目课是实现简单聊天室程序的服务器端和客户端. 2.知识点 服务器端涉及到asyncore.asynchat和socket这几个模块,客户端用到了telnetlib.wx.time和thread这几个模块. 二.项目实战(服务器端) 1.服务器类 首先需要一个聊天服务器,这里继承asyncore的dispatcher类来实现,代码如下 class ChatServer(dispatcher): """ 聊天服务器 """ def _

ASP.NET SignalR 与 LayIM2.0 配合轻松实现Web聊天室(一) 之 基层数据搭建,让数据活起来(数据获取)

大家好,本篇是接上一篇 ASP.NET SignalR 与 LayIM2.0 配合轻松实现Web聊天室(零) 前言  ASP.NET SignalR WebIM系列第二篇.本篇会带领大家将 LayIM界面中的数据动态化.当然还不涉及即时消息通讯,如果你已经搞定了数据界面,那么本文您可以简单的看一下,或者略过. 进入正题,layim帮我们定义好了数据规则,我们只要写一个接口实现那个json规范就可以了,剩下的事情就交给layim去做,看一下json格式.(对应文件夹:demo/json/getLi

[Asp.net 开发系列之SignalR篇]专题三:使用SignalR实现聊天室的功能

一.引言 在前一篇文章中,我向大家介绍了如何实现实现端对端聊天的功能的,在这一篇文章中将像大家如何使用SignalR实现群聊这样的功能. 二.实现思路 要想实现群聊的功能,首先我们需要创建一个房间,然后每个在线用户可以加入这个房间里面进行群聊,我们可以为房间设置一个唯一的名字来作为标识.那SignalR类库里面是否有这样现有的方法呢?答案是肯定的. // IGroupManager接口提供如下方法 // 作用:将连接ID加入某个组 // Context.ConnectionId 连接ID,每个页

Java NIO示例:多人网络聊天室

一个多客户端聊天室,支持多客户端聊天,有如下功能: 功能1: 客户端通过Java NIO连接到服务端,支持多客户端的连接 功能2:客户端初次连接时,服务端提示输入昵称,如果昵称已经有人使用,提示重新输入,如果昵称唯一,则登录成功,之后发送消息都需要按照规定格式带着昵称发送消息 功能3:客户端登录后,发送已经设置好的欢迎信息和在线人数给客户端,并且通知其他客户端该客户端上线 功能4:服务器收到已登录客户端输入内容,转发至其他登录客户端. 功能5 TODO:客户端下线检测  方案是:客户端在线的时候

玩转Node.js(四)-搭建简单的聊天室

玩转Node.js(四)-搭建简单的聊天室 Nodejs好久没有跟进了,最近想用它搞一个聊天室,然后便偶遇了socket.io这个东东,说是可以用它来简单的实现实时双向的基于事件的通讯机制.我便看了一些个教程使用它来搭建一个超级简单的聊天室. 初始化项目 在电脑里新建一个文件夹,叫做“chatroom”,然后使用npm进行初始化: $ npm init 然后根据提示以及相关信息一步一步输入,当然也可以一路回车下去,之后会在项目里生成一个package.json文件,里面的信息如下: 1 $ ca

java多线程控制台聊天室(转)

用java多线程实现一个控制台聊天室,呵呵,好玩! 聊天室服务器端 Java代码   package tf.thread; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.PrintWriter; import java.net.ServerSocket; import java.net.Socket; import java.u

SignalR搭建聊天室教程

开发环境:VS2013+.Net4.5+MVC5+jquery.signalR-2.2.0 1.新建项目 选择mvc 2.通过NuGet联机查找SignalR 如图安装第一个 3.在项目目录里添加Hub文件夹,并在里面新建ChatHub类,代码为: public class ChatHub : Microsoft.AspNet.SignalR.Hub { public void Hello() { Clients.All.hello(); } public void Send(string na