持续创作,加速成长!这是我参与「掘金日新计划 · 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;'>  "+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+"
  "+content+"
";
后面这一片的代码,就比较简单了,只是使用js正则验证罢了
就更新这样吧,开摆!!!