用java web实现聊天室_java web实现简单聊天室
目标
servlet、jsp实现简单聊天室,用户通过浏览器登录后进入聊天室,可发送消息进行群聊,点击聊天信息框中的用户名可实现拍一拍功能。
基础知识
数据的存取 setAttribute / getAttribute
request请求对象 :有效时间短
ServletContext上下文对象:一直存在于服务器,存储公有、 共享数据
Session会话对象:独立
网站默认页面一般是index.jsp
实现思路
1.登录页面 login.jsp 输入昵称
2.编写一个LoginSevlet,处理登录提交的昵称,保存登录昵称到session(会话变量)
若昵称合法 if(nickname.length()!=0),跳转到聊天室,不合法回到登录页面
3.编写聊天室页面chatroom.jsp ,是一个框架,把多个页面集成到一个页面中
4.聊天内容显示message.jsp,不断自动刷新标签内设置响应头,用${上下文变量}显示聊天内容
5.input.jsp(不刷新)输入聊天内容文本框text,点击发送聊天内容按钮时,将把文本框的聊天信息提交给ChatServlet处理。下方有超链接可退出聊天室。
退出聊天室
6.ChatServlet:检测聊天信息合法性,把聊天信息加入到ServletContext变量(字符串)中,(每次都将xx:xxxx加入上下文字符串)
判断是否存在该变量,存在则直接读取现有聊天内容,把数据加入进去后,重新写回上下文变量
7.实现拍一拍功能(目的:学习如何进行链接操作)
每个人名做成一个链接,访问某一个servlet,该servlet可以在聊天信息(上下文变量)里添加一行,xx拍了yyy一下,跳转回message.jsp
问题:链接里应该包含yyy参数,servlet?nick=yyy
say = ""+nickname+""+":"+text;
8.多人聊天实现:多种类型浏览器
关键代码
login.jsp
昵称:
input.jsp
退出聊天室
message.jsp
一起来聊天吧
${says}
LoginServlet.java
package chatting;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;
import java.io.PrintWriter;
@WebServlet(name = "LoginServlet2",urlPatterns = {"/login.do"})
public class LoginServlet2 extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//避免乱码
response.setContentType("text/html;charset=utf-8");
request.setCharacterEncoding("utf-8");
//nickname保存用户昵称
String nickname = request.getParameter("nickname");
//nickname存储到session变量中
HttpSession session = request.getSession();
session.setAttribute("nickname",nickname);
//对nickname进行合法性判断
if(nickname.length()!=0){
//昵称合法,则进入聊天室页面
request.getRequestDispatcher("/chatroom.jsp").forward(request,response);
}
else{
//昵称不合法,返回登陆页面
request.getRequestDispatcher("/login.jsp").forward(request,response);
}
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
}
}
ChatServlet.java
package chatting;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;
import java.util.Vector;
@WebServlet(name = "ChatServlet",urlPatterns = "/input.do")
public class ChatServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//防止乱码
request.setCharacterEncoding("utf-8");
response.setContentType("text/html;charset=utf-8");
HttpSession session = request.getSession();
String text = request.getParameter("text");
//text存储聊天信息,并进行合法性判断
if (text.length()!=0) {
String say =new String();
//获取session中的昵称
String nickname = (String)session.getAttribute("nickname");
//将昵称作为链接,并传参
say = ""+nickname+""+":"+text;
String says = new String();
//将昵称和聊天信息一起放在上下文变量
ServletContext context = getServletContext();
if(context.getAttribute("says")!=null){
says = context.getAttribute("says") + say + "
";
}
else{
says = say + "
";
}
context.setAttribute("says", says);
request.setAttribute("says", says);
}
//转发
RequestDispatcher dispatcher = request.getRequestDispatcher("/input.jsp");
dispatcher.forward(request, response);
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
}
}
NickServlet.java
package chatting;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;
import java.io.PrintWriter;
@WebServlet(name = "NickServlet",urlPatterns = "/NickServlet")
public class NickServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
request.setCharacterEncoding("utf-8");
//将拍一拍放到上下文变量says中 一起输出
HttpSession session = request.getSession();
//nickname存储当前用户昵称
String nickname = (String)session.getAttribute("nickname");
//name存储连接中传递的参数,即被拍的用户昵称
String name = java.net.URLDecoder.decode(request.getParameter("nickname"),"UTF-8");
String pick = nickname+"拍了拍"+name+"
";
ServletContext context = request.getServletContext();
String says = context.getAttribute("says")+pick;
context.setAttribute("says",says);
RequestDispatcher dispatcher = request.getRequestDispatcher("/chatroom.jsp");
dispatcher.forward(request, response);
}
}
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持WEB开发者。
扫描关注:"WEB开发者网“公众号,分享WEB开发知识,让开发变得更简单!
用java web实现聊天室_java web实现简单聊天室相关推荐
- java web学什么软件_java web开发是什么?该怎么学习?
Java中有前端这个开发方向,上回我们说到了javaweb是什么?你们应该对javaweb有了一定的了解了,那你们知道该如何学习web吗?小编这里整理了一些相关知识,快来看看吧. 一.javaweb是 ...
- java web初级面试题_Java Web应用程序初学者教程
java web初级面试题 Java Web Application is used to create dynamic websites. Java provides support for web ...
- java目前开发的背景_Java web 开发构想[一] 背景和形势
[Java web 开发构想系列 转自JavaEye社区,在此申明] 1.背景.形势 能够进行Web开发的编程语言和技术很多 (1) 动态解释语言 PHP; Perl; Python (Zope, P ...
- java项目使用过滤器实例_Java web开发--过滤器篇(详细介绍)
一. web过滤器的介绍 1.过滤器 在生活中,过滤这种我们时常可见:比如水资源的处理,化学药剂的提取等等.所谓过滤,就是指对某事物的处理进行一定的处理获取相应的结果的一个过程.它可以总结为下: 过滤 ...
- java web 怎么实现直播_Java web后端直播接入腾讯IM聊天
类似于斗鱼直播间的聊天 直播.png 接入第三方IM,大部分功能实现依赖于前端.后端侧重于创建群组的时机,以及考虑群组解散的时机(如果有合理的退群机制和定期清理群人数的机制,当我没说,不用考虑解散群组 ...
- java web编码详解_java web 开发 编码问题详解
java web 开发 编码问题详解 浏览器 IE/FireFox ------------->Servlet容器-------------------------->显示页面 编码 ...
- java web jsp相对路径_Java Web中的相对路径与绝对路径总结
1.基本概念的理解 绝对路径:绝对路径就是你的主页上的文件或目录在硬盘上真正的路径,(URL和物理路径)例如:C:\xyz\test.txt 代表了test.txt文件的绝对路径.http://www ...
- java wed登录面 代码_Java Web用户登录实例代码
实现功能: 1.用户登陆.注销 2.利用session记录用户登陆信息 3.在JSP中展示已登陆用户信息 实现原理: 登陆后通过判断用户名和密码是否和存储的一致,如果一致,就把用户信息放到sessio ...
- java开源框架有哪些_java web开发框架有哪些
1 java web开发框架有哪些 java,互联网发展出来的产物,如今变成了屈指可数的几大编程语言之一,他的未来是不可限量的.因此很多人都想要学会这门技术,希望在以后能有他的一席之地.那么下面小编给 ...
- java图片上传下载_java web 文件上传与下载
组件工作流程:WEB服务器request ServletFil eupLoad DiskFileItem Factory代表普通字段的FileItem代表上传文件1FileItem代表上传文件2Fil ...
最新文章
- 【MySQL解惑笔记】忘记MySQL数据库密码
- 【Netty】入门Netty官方例子解析(二)Time Server
- 内存泄漏_内存泄漏–测量频率和严重性
- Angular应用初始化APP_INITIALIZER
- oracle apex触发器,triggers - 插入之前/更新Apex触发器之前,测试覆盖率失败 - 堆栈内存溢出...
- Elasticsearch增删改查 之 —— mget多文档查询
- 计算字符串的相似度-两种解法
- 快速搭建一个前端模板
- matlab实现图像滤波——高斯滤波
- CSS 3 动画 实现图片动态切换
- 单片机单键双稳态程序 c语言,单键实现单片机开关机设计案例
- Translation插件
- fatfs文件系统详解之f_mkfs函数分析
- 蒲江县实验中学计算机老师照片,上“新”!实验中学一批高能教师亮相!
- Excel基础24讲
- 配置pppoe服务器
- 编译原理第五章课程总结
- 小米Android rom,小米打造基于安卓11的ROM来了:米10尝鲜
- [BZOJ5329][SDOI2018]战略游戏
- 推荐系统中精排模型的多目标优化