zoukankan      html  css  js  c++  java
  • java 网站用户在线和客服聊天


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



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

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

    截图:

    前台用户界面:

    后台客服界面:

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

    代码部分:

    用到了两个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 block
    			result=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;
    	}
    
    }
    
  • 相关阅读:
    Ajax_原生ajax写法、理解异步请求、js单线程+事件队列、封装原生ajax
    Ajax_实现动态网站的技术、php语法、php接口、前端渲染和后端渲染
    Ajax_Apache访问资源文件的权限配置、资源存放路径配置、配置虚拟主机、动态网站静态网站区别
    Ajax_Ajax、客户端、服务器端的认识与比较、服务器环境的搭建wamp
    jquery_jquery插件、jqueryUI使用方法、自定义jquery插件(一个插件其实就是一个功能)
    jquery_jquery事件绑定和解绑、链式编程、jquery中的主动遍历each、多库共存
    jquery_jquery动态创建元素及应用
    jquery_jquery动画
    jquery_jquery样式操作、链式编程
    jquery_认识jquery好处、选择器、小案例
  • 原文地址:https://www.cnblogs.com/ios9/p/10136292.html
Copyright © 2011-2022 走看看