1. 程式人生 > >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;
	}

}