j2ee建立在线聊天室详细教程(第六天LoginAction,SendMassageAction)

155 阅读3分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第十六天,点击查看活动详情

-------20220620\

这几天所有的内容,都是在围绕着我们的五个Action,其中包括ExitAction,LoadDataAction,LoadUserAction,LoginAction,SendMassageAction。前两天我们介绍了前三个action,ExitAction,LoadDataAction,LoadUserAction,那么今天就介绍最后两个LoginAction,SendMassageAction,那么五个action就介绍完毕了

LoginAction

源码部分

package action.impl;

import java.text.SimpleDateFormat;
import java.util.Date;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import cn.edu.cuit.action.Action;
import cn.edu.cuit.bean.ChatMassage;
import net.sf.json.JSONObject;

/**
 * @author zzl
 *	登录业务控制
 */
public class LoginAction implements Action {

	public Object execute(HttpServletRequest req, HttpServletResponse res) {
		String name = req.getParameter("name");
		ChatMassage cm = ChatMassage.Instance();		
		String result =null;
		if(cm.isFull()){
			result = "聊天室人数己满!";
		}else if(cm.hasUser(name)){
			result = "此用户名己存在!";
		}else{
			cm.addUser(name);		
			HttpSession session = req.getSession();
			session.setAttribute("username", name);
			SimpleDateFormat dateFormat = new SimpleDateFormat("HH:mm:ss");
			String date = dateFormat.format(new Date());
			cm.setMassage("<br><font color='red' >欢迎 "+name+"  于"+date+" 进入聊天室!</font><br>");
		}
		
		JSONObject json = new JSONObject();
		json.put("massage", result);
		return json;
	}

}

源码讲解

这是这次的源码部分,LoginAction的作用就是登录业务控制,我们直接一步步跟着代码看,其中我们所做的第一步就是获取用户名,直接通过String name = req.getParameter("name")语句,通过 req.getParameter方法调用和,其实这就是一种取参数的方法。把jsp文件中的数据读取到出来。然后就可以封装利用起来。之后我们实例化聊天室,通过ChatMassage cm = ChatMassage.Instance()语句,这边依旧还是单例
后面是业务代码,我们需要进行业务,首先进行业务验证,不然无法进行下一步操作,业务验证包括,1、对于我们聊天室人数的判断 2、对于用户名的判断,检测用户名是否重复。在验证完之后,就让其进行成功登录
登录成功,则亦表示用户将新增,聊天提示信息也需要增加一条,原理与用户新增相同。这个聊天提示信息就是:欢迎 "+name+" 于"+date+" 进入聊天室!
最后一个业务就是跳转或返回了,使用json,这个东西我们在上次进行了讲解j2ee建立在线聊天室详细教程(第五天LoadDataAction,LoadUserAction) - 掘金 (juejin.cn)


SendMassageAction

源码部分

package action.impl;

import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import cn.edu.cuit.action.Action;
import cn.edu.cuit.bean.ChatMassage;

/**
 * @author zzl
 *	新聊天记录处理
 */
public class SendMassageAction implements Action {

	public Object execute(HttpServletRequest req, HttpServletResponse res) {

		String content = req.getParameter("content").trim();
		ChatMassage cm = ChatMassage.Instance();	
		String name = req.getSession().getAttribute("username").toString();
		SimpleDateFormat dateFormat = new SimpleDateFormat("HH:mm:ss");
		String date = dateFormat.format(new Date());
                
		//System.out.println(content);

		String color = cm.getColor(name);
		

		String mass = "<font color='"+color+"'>"+name+"  "+date+"</font><br><span style='color:#6495ED;'>&nbsp&nbsp"+content+"</span><br>";
		

		cm.setMassage(mass);
		

		return "loadData.do";
	}
	
	/**
	 * 	@param source
	 * 	@return
	 */
	private String filer(String source){
		StringBuffer result = new StringBuffer(source);
		Pattern p = Pattern.compile("[^0-9|^a-z|^A-Z|^\u4e00-\u9fa5]");
		Matcher m = p.matcher(source);
        boolean f=true;
        
        List<Integer> a = new ArrayList<Integer>();
        while (f) {
           f = m.find();
           if (f) {
               int con = m.start();
               a.add(con);
           }
        }
        int n=0;  // '\'的数量
        for(int i:a){
        	result.insert(i+n, "\\\\");
        	n++;
        }
        return result.toString();
	}
}

解释

这个代码用来对于新增数据进行处理的,首先我们接到请求,然后我们通过String content = req.getParameter("content").trim()语句拿到聊天内容,我们还需要拿到对应用户与当前时间,这样才可以算是完全获得一条消息的信息,我这边还收集了用户所占的颜色,这个东西大家可以选用,按照自己的需求选择是否使用。拿到这些东西,其实还不能直接输出到客户的聊天室页面,我们需要将前面拿到的用户名,颜色,时间,内容 拼装成一个聊天记录,使用语句如下:`String mass = ""+name+" "+date+"
&nbsp&nbsp"+content+"
";

后面这一片的代码,就比较简单了,只是使用js正则验证罢了
就更新这样吧,开摆!!!