对于jsp简单在线聊天系统,简单的利用Session、Request、Application等知识点。
基于jsp简单多人在线聊天系统源码,分为公聊、私聊以及网站客服,网站多用户,十分容易理解!!!
不加以多说,直接源码展示。
原源码在大佬用户Summer__show_,目前该大佬用户已经删除文章,我在其源码基础上进行一个改编,并且进行一些优化。如有侵权请告知。
就比如我现在的网址为https://blog.csdn.net/white_mvlog/online.jsp?username=white_mvlog
<%@ page contentType="text/html;charset=UTF-8" language="java"
pageEncoding="UTF-8"%>
<%@ page import="java.util.*"%>
<%
//每隔15秒进行一次页面刷新,刷新聊天记录
response.setHeader("refresh", "15");
//设置获取的值格式为utf-8
request.setCharacterEncoding("UTF-8");
//获取网址的username的属性值
String username = request.getParameter("username");
//从applicaton作用域中取出用户列表
List<Object> users = (List<Object>) application
.getAttribute("users");
//如果该用户列表还不存在,实例化该用户列表
if (users == null) {
users = new ArrayList<Object>();
}
//查看当前列表中是否包含当前的登陆用户
if (users.contains(username)) {
//设置提示信息
request.setAttribute("msg", "该用户已经登陆,请重新登陆");
System.out.println(users.size());
if (users.size() != 0) {
for (int i = 0; i < users.size(); i++) {
if (username.equals(users.get(i))) {
users.remove(i);
i--;
}
}
}
}
//将当前登陆用户名加入该用户列表
users.add(username);
application.setAttribute("users", users);
session.setAttribute("user", username);
System.out.println("xian");
List<Object> msgs = (List<Object>) application.getAttribute("msgs");
List<Object> to_sb = (List<Object>) application
.getAttribute("private");
List<Object> from_sb = (List<Object>) application
.getAttribute("S_private");
String user1 = (String) session.getAttribute("user");
if (msgs == null) {
msgs = new ArrayList<Object>();
}
if (to_sb == null) {
to_sb = new ArrayList<Object>();
}
if (from_sb == null) {
from_sb = new ArrayList<Object>();
}
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head><title>客服</title>
</head>
<body>
<div class="divhead1">
<div class="headee">
<h3>
在线客服
</h3>
</div>
<div class="content">
<div class="list">
<div class="bodyhead">在线人数<%=users.size() %>人</div>
<ul>
<%
for (int i = 0; i < users.size(); i++) {
String username2 = (String) users.get(i);
%>
<li>
<%=username2 %>
</li>
<%
}
%>
</ul>
</div>
<div class="dad">
<div class="bodyhead"></div>
<div class="msg">
<%
for (int i = 0; i < msgs.size(); i++) {
//查看谁发给谁了什么信息
System.out.println(msgs.get(i) + "and " + to_sb.get(i)
+ " from " + from_sb.get(i));
}
try {
for (int i = 0; i < msgs.size(); i++) {
String t1 = (String) msgs.get(i);
String t2 = (String) to_sb.get(i);
String t3 = (String) from_sb.get(i);
if (t2.equals(username) || t2.equals("所有人")) {
//发送给我或者发送给所有人的
%>
<p>
<span class="ith"><%=t3 %></span><span class="it"><%=t1 %></span>
</p><br />
<%
//如果对方回复已解决,则删除他的登录记录,结束聊天
if(t1.equals("已解决")){
users.remove(t3);
}
} else if(t3.equals(username)){
//我发送的
%>
<p>
<span class="meh"><%=t3 %></span><span class="me"><%=t1 %></span>
</p><br />
<%
}else{
System.out.println(t2 + "跟他不同" + "username" + "或者跟他"
+ user1);
}
}
} catch (Exception e) {
}
%>
</div>
<div class="send">
<form
class="if"
action="online.jsp?username=<%=username%>"
method="post">
<%
System.out.println(session.getAttribute("user"));
//在这里可以区分客服与用户,客服拥有select选项值的0也就是发送信息给所有人的功能
if(username.equest("white")){%>
<select name="select" class="ss">
<option value="0">
所有人
</option>
<%
for (int i = 0; i < users.size(); i++) {
username = (String) users.get(i);
%>
<option value="<%=i + 1%>"><%=username%></option>
<%
}
}else{
//反之,用户拥有select选项值的666也就是发送信息给客服的功能
%>
<select name="select" class="ss">
<!--要选择客服的话select选项值为666-->
<option value="666">客服</option>
<%
}
%>
</select>
<textarea id="dope"
style="width: 99%; height: 75px; border: none; outline: none;"
name="message" rows cols></textarea>
<input type="submit" value="发送" class="sendBtn" />
</div>
</form>
<%
String user = (String) session.getAttribute("user");
request.setCharacterEncoding("UTF-8");
String message = request.getParameter("message");
String to = "";
try {
//被发送消息方
List<Object> tmp = (List<Object>) application
.getAttribute("users");
String SS = request.getParameter("select");
int a = Integer.parseInt(SS);
//发送给所有人则在select选择项值为0
if (a == 0)
to = "所有人";
//发送给所有人则在select选择项值为666
else if(a==666)
to = "white";
else
to = (String) tmp.get(a - 1);
} catch (Exception e) {
}
System.out.println("正在尝试");
for (int i = 0; i < msgs.size(); i++) {
System.out.println(msgs.get(i) + "c");
}
if (message != null && !message.equals("")) {
//msgs.add(user + "发消息给" + to + " : " + message + "<br/>");
msgs.add( message);
to_sb.add(to);
from_sb.add(user);
System.out.println("尝试");
application.setAttribute("msgs", msgs);
application.setAttribute("private", to_sb);
application.setAttribute("S_private", from_sb);
response.sendRedirect("online.jsp?username=" + username);
}
%>
</div>
</div>
</div>
</body>
</html>
在源码中有进行详细的注释说明,不懂的可以在评论留言哟。
复制到自己的小项目即可使用哟。