java 网站用户在线和客服聊天

news/2024/5/20 22:48:28/文章来源:https://blog.csdn.net/weixin_34004576/article/details/86030584


注:本文来源于《java 网站用户在线和客服聊天》



这是应用到项目中的一个例子。

实现原理是将信息存储到Application域里面。然后使用Struts2 Action 用json格式的数据进行前后台交互。

截图:

前台用户界面:

20130521081322386

后台客服界面:

20130521081348963

编辑框采用的Ueditor 可以发送图片表情文字格式、涂鸦。。。。等等!功能十分的强大!

代码部分:

20130521081505375

用到了两个Action,分别为用户和管理员服务。

Struts.xml

<!-- 聊天功能实现  --><package name="chat" extends="struts-default,json-default"><!-- 用户发送消息  --><action name="chatMessageSend" class="com.shop.chat.MessageAction" method="send"><result name="success" type="json"></result></action><!-- 用户接受消息  --><action name="chatMessageGet" class="com.shop.chat.MessageAction"><result type="json"></result></action><!-- 管理员获取消息  --><action name="adminMessageGet" class="com.shop.chat.AdminMessageAction"><result name="success" type="json"></result></action><!-- 管理员发送消息到用户  --><action name="adminMessageSend" class="com.shop.chat.AdminMessageAction" method="send"><result type="json"></result></action><!-- 管理员列表  --><action name="adminList" class="com.shop.chat.AdminListAction"><result type="json"></result></action></package>


Java 类:

package com.shop.chat.admin;import java.util.ArrayList;
import java.util.List;import com.shop.bean.Admin;/*** 存放当前已经登陆的管理员列表* @author Pan**/
public class AdminList {private List<Admin> list=new ArrayList<Admin>();public AdminList(){}/*** 增加Admin对象* @param admin*/public void save(Admin admin){if(list.indexOf(admin)==-1){list.add(admin);}}/*** 得到所有Admin* @return*/public List<Admin> getList(){return list;}
}



package com.shop.chat.admin;import java.util.List;import javax.servlet.ServletContext;
import javax.servlet.http.HttpSession;import com.shop.bean.Admin;/*** admin列表服务* @author Pan**/
public class AdminListServler {private AdminList list;public AdminListServler(HttpSession session){ServletContext context=session.getServletContext();list=(AdminList)context.getAttribute("adminlist");if(list==null){list=new AdminList();context.setAttribute("adminlist", list);}}/*** add an admin to the list* @param admin*/public void save(Admin admin){list.save(admin);}/*** get all admin object* @return arraylist*/public List<Admin> getList(){return list.getList();}
}
package com.shop.chat.admin;import java.sql.Timestamp;public class AdminSimplify {private Integer id;private String adminName;private String adminPass;private String nickName;private String head;private Timestamp addTime;public Integer getId() {return id;}public void setId(Integer id) {this.id = id;}public String getAdminName() {return adminName;}public void setAdminName(String adminName) {this.adminName = adminName;}public String getAdminPass() {return adminPass;}public void setAdminPass(String adminPass) {this.adminPass = adminPass;}public String getNickName() {return nickName;}public void setNickName(String nickName) {this.nickName = nickName;}public String getHead() {return head;}public void setHead(String head) {this.head = head;}public Timestamp getAddTime() {return addTime;}public void setAddTime(Timestamp addTime) {this.addTime = addTime;}}
package com.shop.chat;import java.util.ArrayList;
import java.util.List;import org.apache.struts2.ServletActionContext;import com.opensymphony.xwork2.ActionSupport;
import com.shop.bean.Admin;
import com.shop.chat.admin.AdminListServler;
import com.shop.chat.admin.AdminSimplify;public class AdminListAction extends ActionSupport {private List<AdminSimplify> list;public List<AdminSimplify> getList() {return list;}/*** 得到当前登陆的管理员* @return*/public String execute(){list=new ArrayList<AdminSimplify>();AdminListServler aServler=new AdminListServler(ServletActionContext.getRequest().getSession());for (Admin admin : aServler.getList()) {AdminSimplify as=new AdminSimplify();as.setAddTime(admin.getAddTime());as.setAdminName(admin.getAdminName());as.setAdminPass(admin.getAdminPass());as.setHead(admin.getHead());as.setId(admin.getId());as.setNickName(admin.getNickName());list.add(as);}return SUCCESS;}
}
package com.shop.chat;import java.util.List;import org.apache.struts2.ServletActionContext;import com.opensymphony.xwork2.ActionSupport;
import com.shop.bean.Admin;public class AdminMessageAction extends ActionSupport {private String to;		//接受用户private String result;	//返回消息private String content;	//消息内容private String nickName;	//昵称public void setNickName(String nickName) {this.nickName = nickName;}public String getNickName() {return nickName;}public void setContent(String content) {this.content = content;}private List<Message> list;public List<Message> getList() {return list;}public void setResult(String result) {this.result = result;}public String getResult() {return result;}public void setTo(String to) {this.to = to;}public String execute(){Admin admin=(Admin)ServletActionContext.getRequest().getSession().getAttribute("admin");if(admin==null){setResult("你还没有登录!");return SUCCESS;}MessageServer msServer=new MessageServer(ServletActionContext.getRequest().getSession(),admin.getId()+"",admin.getNickName());list=msServer.getMessage();return SUCCESS;}/*** 发送消息* @return*/public String send(){Admin admin=(Admin)ServletActionContext.getRequest().getSession().getAttribute("admin");if(admin==null){setResult("没有登录");return SUCCESS;}MessageServer msServer=new MessageServer(ServletActionContext.getRequest().getSession(), admin.getId()+"",admin.getNickName());try {msServer.send(to, content);setResult("发送成功!");setNickName(admin.getNickName());} catch (Exception e) {// TODO Auto-generated catch blockresult=e.getMessage();}return SUCCESS;}}
package com.shop.chat;/*** 信息容器* @author Pan**/public class Message {private String form; // 来自用户private String to; // 接受用户private String message; // 信息private String nickName;	//昵称public void setNickName(String nickName) {this.nickName = nickName;}public String getNickName() {return nickName;}public String getForm() {return form;}public void setForm(String form) {this.form = form;}public String getTo() {return to;}public void setTo(String to) {this.to = to;}public String getMessage() {return message;}public void setMessage(String message) {this.message = message;}}
package com.shop.chat;import java.util.HashMap;
import java.util.List;
import java.util.Map;import javax.servlet.http.HttpServletRequest;import org.apache.struts2.ServletActionContext;import com.opensymphony.xwork2.ActionSupport;
import com.shop.bean.User;
import com.sun.org.apache.bcel.internal.generic.NEW;public class MessageAction extends ActionSupport {private String to;			//传送到指定的用户private String result;		//返回信息private String content;		//内容private String nickName;	//昵称private List<Message> list;	//消息集合public void setNickName(String nickName) {this.nickName = nickName;}public String getNickName() {return nickName;}public void setResult(String result) {this.result = result;}public void setContent(String content) {this.content = content;}public List<Message> getList() {return list;}public String getResult() {return result;}public void setTo(String to) {this.to = to;}/*** 获取消息*/public String execute(){HttpServletRequest request=ServletActionContext.getRequest();User user=(User)request.getSession().getAttribute("user");MessageServer msServer=new MessageServer(request.getSession(), user.getId()+"",user.getNickName());this.list=msServer.getMessage();return SUCCESS;}/*** 发送消息* @return*/public String send(){HttpServletRequest request=ServletActionContext.getRequest();User user=(User)request.getSession().getAttribute("user");if(user==null){result="你还没有进行登录!";return SUCCESS;}MessageServer mServer=new MessageServer(request.getSession(),user.getId()+"",user.getNickName());mServer.getMessage();try {mServer.send(to, content);System.out.println("to:"+to);setNickName(user.getNickName());setResult("发送成功");} catch (Exception e) {setResult("发送失败!");result=e.getMessage();}return SUCCESS;}
}
package com.shop.chat;import java.util.ArrayList;
import java.util.List;/*** 信息集合 这个对象储存到Application中* @author Pan**/
public class MessageList {private List<Message> list=new ArrayList<Message>();public MessageList(){}/*** 添加信息* @param message*/public void add(Message message){list.add(message);}/*** 寻找信息 通过接受的用户* @param uid* @return*/public List<Message> getByTo(String uid){List<Message> tmp=new ArrayList<Message>();System.out.println("list的大小:"+list.size());for(Message message:list){if(message.getTo().equals(uid)){//添加到返回对象tmp.add(message);}}//然后移除信息 以免信息重复list.removeAll(tmp);return tmp;}}
package com.shop.chat;import java.util.ArrayList;
import java.util.List;import javax.servlet.ServletContext;
import javax.servlet.http.HttpSession;public class MessageServer {private MessageList mList;private ServletContext context;private String uid;private String nickname;public MessageServer(HttpSession session,String uid,String nickname){this.context=session.getServletContext();Object object=context.getAttribute("mlist");if(object==null){mList=new MessageList();context.setAttribute("mlist", mList);}else {this.mList=(MessageList)object;}this.uid=uid;this.nickname=nickname;}/*** 发送数据* @throws Exception*/public void send(String to,String content) throws Exception{if(uid==null){throw new Exception("用户名id无效");}Message message=new Message();message.setForm(uid);message.setTo(to);message.setMessage(content);message.setNickName(this.nickname);mList.add(message);}/*** 接受信息* @return*/public List<Message> getMessage(){//返回当前用户的信息System.out.println("uid是:"+uid);return mList.getByTo(uid);}}
package com.shop.chat.admin;import java.util.ArrayList;
import java.util.List;import com.shop.bean.Admin;/*** 存放当前已经登陆的管理员列表* @author Pan**/
public class AdminList {private List<Admin> list=new ArrayList<Admin>();public AdminList(){}/*** 增加Admin对象* @param admin*/public void save(Admin admin){if(list.indexOf(admin)==-1){list.add(admin);}}/*** 得到所有Admin* @return*/public List<Admin> getList(){return list;}
}
package com.shop.chat.admin;import java.util.List;import javax.servlet.ServletContext;
import javax.servlet.http.HttpSession;import com.shop.bean.Admin;/*** admin列表服务* @author Pan**/
public class AdminListServler {private AdminList list;public AdminListServler(HttpSession session){ServletContext context=session.getServletContext();list=(AdminList)context.getAttribute("adminlist");if(list==null){list=new AdminList();context.setAttribute("adminlist", list);}}/*** add an admin to the list* @param admin*/public void save(Admin admin){list.save(admin);}/*** get all admin object* @return arraylist*/public List<Admin> getList(){return list.getList();}
}
package com.shop.chat.admin;import java.sql.Timestamp;public class AdminSimplify {private Integer id;private String adminName;private String adminPass;private String nickName;private String head;private Timestamp addTime;public Integer getId() {return id;}public void setId(Integer id) {this.id = id;}public String getAdminName() {return adminName;}public void setAdminName(String adminName) {this.adminName = adminName;}public String getAdminPass() {return adminPass;}public void setAdminPass(String adminPass) {this.adminPass = adminPass;}public String getNickName() {return nickName;}public void setNickName(String nickName) {this.nickName = nickName;}public String getHead() {return head;}public void setHead(String head) {this.head = head;}public Timestamp getAddTime() {return addTime;}public void setAddTime(Timestamp addTime) {this.addTime = addTime;}}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_720667.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

熊掌号PHP,个人网站接入百度熊掌号方法,手把手教你如何配置!

前两天开通熊掌号&#xff0c;昨天通过了。就想着赶快接入网站&#xff0c;听说对网站有加成&#xff0c;可以提高收录和排名&#xff0c;新站不容易啊&#xff0c;写了文章都没人看&#xff0c;哭!刚刚网上找教程&#xff0c;根据蝈蝈要安静博客的代码&#xff0c;成功接入熊掌…

2021值得关注的科技与应用:开发运营和网站可靠性工程师看过来!

全文共2431字&#xff0c;预计学习时长7分钟图源&#xff1a;Google三个主流云提供商&#xff08;AWS/Azure/GCP&#xff09;现在都支持通过自定义资源定义&#xff08;CRDs&#xff09;来从Kubernetes中提供和管理云服务。AWS有在开发者预览过程中服务Kubernetes的AWS控制器&a…

向一个网站发请求的几种方式

1. 用requests模块&#xff1a; from django.shortcuts import render, HttpResponse, redirect import requestsdef index(request):re requests.get(http://www.bing.com)# re.encoding utf-8res re.textreturn HttpResponse(res)2. 用http.client 该库一般不直接使用&am…

《大型网站技术架构》读书笔记之五:万无一失之网站的高可用架构

此篇已收录至《大型网站技术架构》读书笔记系列目录贴&#xff0c;点击访问该目录可获取更多内容。 一、可用性度量与考核 首先&#xff0c;不得不说&#xff1a;要保证一个网站永远完全可用几乎是一件不可能完成的任务&#xff08;Mission Impossible&#xff0c;是不是有点碟…

干货|网站前端开发「必会基础知识」有哪些?

Web前端开发网页制主要由HTML、CSS、JavaScript三大要素组成。随着企业需求变&#xff0c;前端开发技术的三要素也演变成现今的HTML5、CSS3、jQuery。响应式布局、微网站等是Web前端未来的发展方向之一。网站前端开发基础知识学习内容&#xff1a;1.HTML基础标签HTML不管前后端…

干货|10个帮程序员减压放松的网站,爽!

工作之余&#xff0c;不妨放下微博跟朋友圈&#xff0c;来这10个网站感受一下。今天播妞给大家推荐的网站&#xff0c;利用代入感强的图片与音频&#xff0c;迅速帮你抹平焦虑&#xff0c;获得平和心态&#xff0c;疲惫的程序员朋友们快来试试吧~✤ 1.Calm这是同类型中最火的网…

推荐10个Java学习神器网站分享给大家肯定有你不知道的哦

不管谁手里都藏着些许自己觉得好用的网站&#xff0c;今天专门找大厂出来的同学同事觉得好用的网站分享给大家&#xff0c;如果这里有你没收藏还不知道觉得还蛮有用的网站可以给我点个赞&#xff0c;大家一起进步&#xff0c;一起学习&#xff0c;同时也可以分享你觉得好用实用…

干货丨网站域名后缀都是什么含义?

互联网技术让信息传递更加快捷&#xff0c;据网络信息&#xff0c;2019年我国网站数量已经达到518万个&#xff0c;每一个网站都有一个唯一的网站域名。细心的同学可能会注意到大部分域名的后缀都是.com。如果你要注册域名就会发现大部分.com域名已经被注册&#xff0c;然而域名…

解决:写的CSDN博客百度搜索不到 (网站/博客/链接 提交百度检索方法)

往往发布了一篇博客&#xff0c;会发现按照博客标题搜索&#xff0c;无法在百度搜索到自己的这篇文章。 这时&#xff0c;我们在以下网站提交我们的博客链接即可&#xff1a; 链接提交_加快网站内容抓取&#xff0c;快速提交数据工具_站长工具_网站支持_百度搜索资源平台 但是…

java中nextint()_「nextint」Java中关于nextInt()、next()和nextLine() - seo实验室

nextint原博客地址&#xff1a;https://www.cnblogs.com/Skyar/p/5892825.htmljava中关于nextint()、next()和nextLine()的理解先看解释&#xff1a;nextInt(): it only reads the int value, nextInt() places the cursor in the same line after reading the input.next(): r…

程序员接私活月入2万?分享10个接私活的网站!

最近&#xff0c;播妞在和身边的程序员聊天中&#xff0c;听不少朋友分享了自己接私活的经历&#xff0c;那收入真是让我“瞠目结舌” ......程序员A&#xff1a;我Java程序员&#xff0c;工作两年&#xff0c;月薪13K&#xff0c;私活20K。程序员B&#xff1a;之前在单位上班&…

Django-oscar 快速搭建商城网站

Django是一个相对容易学习的框架&#xff0c;并且已经发展了许多年&#xff0c;拥有相对活跃的开源环境。像豆瓣、Instagram&#xff0c;Spotify&#xff0c;YouTube等官方网站都是基于Django搭建的。Python实用宝典 曾经发表过Django的实战教程&#xff1a;Python Django快速开…

企业级-Shell案例8——批量检测网站是否异常并邮件通知

批量检测网站是否异常脚本 检测网站运行是否正常&#xff0c;如果不能正常访问&#xff0c;发送邮件通知管理员 curl -o /de/dev/null -s -w "%{http_code}" www.baidu.com访问失败&#xff0c;也又可能和网络等等原因有关。 所以我们要进行次数判断&#xff0c;超…

企业级-Shell案例10——一键部署LNMP网站平台脚本

一键部署LNMP网站平台脚本 网站浏览流程图 L &#xff1a;Linux N &#xff1a; Nginx M &#xff1a;Mysql P &#xff1a;PHP user --> Nginx --> PHP --> Mysql Centos软件安装 1、yum安装 2、源码编译 1&#xff09;./configure 2&#xff09;make…

Docker测试一个静态网站

使用Docker测试静态网站 将Docker作为本地Web开发环境是Docker的一个最简单的应用场景。 这样的环境可以完全复制生产环境&#xff0c;并确保用户开发的东西在生产环境中也能运行。下面从将Nginx Web服务器安装到容器来架构一个简 单的网站开始。这个网站暂且命名为Sample。 …

IIS网站报错targetFramework特性仅作用于目标.NET Framework4.0或更高版本

在访问IIS网站时遇到如下报错 根据提示我们知道是系统已经安装的.NET版本低于程序要求的版本&#xff0c;需要安装符合要求的版本来解决此问题&#xff0c;此时如果使用“服务器管理器”采用点选的方式安装.NET4.5,发现并不能解决此问题&#xff0c;报错依旧 原因为我们的系统…

常用面试编程训练5大网站

编程挑战可以极好地&#xff1a;学习另辟蹊径地完成事情练习一种新的编程语言遇到关键问题进行解决保持我们的大脑敏锐且专注玩得开心&#xff01;在我寻找最好的编程挑战的过程中&#xff0c;我缩小到五个好资源。相信它们可以在你的编程之旅中极大地帮助你&#xff0c;或者可…

.NET程序员必须知道的八个网站

当前全球有数百万的开发人员在使用微软的.NET技术。如果你是其中之一&#xff0c;或者想要成为其中之一的话&#xff0c;我下面将要列出的每一个站点都应该是你的最爱&#xff0c;都应该收藏到书签中去。 对于不熟悉.NET技术的朋友&#xff0c;需要说明一下&#xff0c;.NET提供…

前端设计网站推荐

1、CSS禅意花园&#xff08;http://www.csszengarden.com/&#xff09; 这个网站以最有效、最优美的方式展示了CSS的最高境界&#xff0c;任何一个学习CSS的人都不应该错过对CSS禅意花园的研究。目前在csszengarden.com上收录了1000多个作品&#xff0c;它们都充分体现了设计师…

企业网站应用模式之—LAMP架构的源码编译超详细步骤,有手就行!

LAMP架构的源码编译安装一、LAMP架构介绍1.1 LAMP概述1.2 LAMP各组件介绍1.2.1 (平台)Linux1.2.2(前台)Apache1.2.3(后台)MySQL1.2.4(中间连接)PHP/Perl/Python1.3 LAMP各组件安装顺序二、编译安装Apache httpd服务2.1 操作步骤流程2.2 操作详细步骤&#xff08;含图文&#xf…