码农网

网站首页> 后端开发> Java

java web实现简单聊天室

众衡网络科技

目标

servlet、jsp实现简单聊天室,用户通过浏览器登录后进入聊天室,可发送消息进行群聊,点击聊天信息框中的用户名可实现拍一拍功能。

基础知识

ServletContext上下文对象:一直存在于服务器,存储公有、 共享数据
Session会话对象:独立

实现思路

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); } }

以上就是本文的全部内容,希望对大家的学习有所帮助。

java 聊天室

本文地址:https://m.manongw.com/article/333.html

文章来源:转载于CSDN,转载网址为https://blog.csdn.net/weixin_46041475/article/details/109921000

版权申明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 ezhongheng@126.com 举报,一经查实,本站将立刻删除。

最近更新
热门素材
html5卡通章鱼素材,几何图形抽象设计

html5卡通章鱼素材,几何图形抽象设计

图片素材

html文字动画特效,文字虚线边框

html文字动画特效,文字虚线边框

文字特效

Bootstrap点击左侧垂直导航菜单全屏网页切换特效

Bootstrap点击左侧垂直导航菜单全屏网页切换特效

导航菜单

js+css3透明渐变风格导航菜单特效

js+css3透明渐变风格导航菜单特效

导航菜单

8款经典的css网站顶部导航栏样式

8款经典的css网站顶部导航栏样式

图片素材

js+css3网站顶部自适应导航栏菜单特效

js+css3网站顶部自适应导航栏菜单特效

图片素材

jQuery自定义添加删除表格行内容特效

jQuery自定义添加删除表格行内容特效

图片素材

jQuery+CSS3漂亮的下拉菜单选择框美化特效

jQuery+CSS3漂亮的下拉菜单选择框美化特效

css3实例

jQuery文字公告无限滚动轮播特效

jQuery文字公告无限滚动轮播特效

css3实例

jQuery+Layui省市区城市三级联动菜单选择特效

jQuery+Layui省市区城市三级联动菜单选择特效

css3实例