對於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>
在源碼中有進行詳細的註釋說明,不懂的可以在評論留言喲。
複製到自己的小項目即可使用喲。