用java web实现聊天室_java web实现简单聊天室「建议收藏」

用java web实现聊天室_java web实现简单聊天室「建议收藏」目标servlet、jsp实现简单聊天室,用户通过浏览器登录后进入聊天室,可发送消息进行群聊,点击聊天信息框中的用户名可实现拍一拍功能。基础知识数据的存取setAttribute/getAttributerequest请求对象:有效时间短ServletContext上下文对象:一直存在于服务器,存储公有、共享数据Session会话对象:独立网站默认页面一般是index.jsp实现思路1….

大家好,又见面了,我是你们的朋友全栈君。

目标

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开发知识,让开发变得更简单!

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

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/152198.html原文链接:https://javaforall.net

(1)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • CentOS 7 安装 Nginx

    CentOS 7 安装 NginxCentOS7安装Nginx前言Linux的两种安装方式yum安装前言最近,在公司经常会进行项目的部署,但是服务器环境都是导师已经搭建好了的,我就是将项目文件放到特定目录。于是,我周末在家就进行了Nginx的安装学习。之前,在Windows上使用过Nginx,但是在Linux环境下Ngnix的安装和在Windows环境下安装是有一定区别的。这次进行在Linux环境下使用源码包的方式安…

    2022年6月7日
    34
  • android一键换手机,不同品牌手机一键换机:换新手机怎么转移数据?「建议收藏」

    android一键换手机,不同品牌手机一键换机:换新手机怎么转移数据?「建议收藏」我们正处于一个数码产品更新换代非常快速的时代,很多消费者会紧跟时代潮流,经常更换新手机,但是更换手机之后我们通常需要将旧手机里的数据进行转移,不同品牌之间的手机怎么进行一键换机呢?以安卓手机更换苹果手机转移数据为例:1、首先我们需要在安卓手机上安装“转移到iOS”APP,通过该应用我们可以将安卓手机的数据转移到新的苹果手机上2、确保安卓设备处于WiFi状态3、将安卓设备以及苹果设备连接电源4、设置…

    2022年5月26日
    103
  • kindeditor php配置,KindEditor-编辑器配置参数属性 | 小灰灰博客

    kindeditor php配置,KindEditor-编辑器配置参数属性 | 小灰灰博客在《开发php接入富文本编辑器KindEditor》中提到了KindEditor编辑器的使用方法,通过使用KE.show(config)方法即可将编辑器添加到文档中。·无论使用哪种方式使用KindEditor编辑器,都必须进行参数配置;·可以在KE.show()和KE.init()方法中传递配置参数config;·配置参数config是一个对象,一般使用字面量对象;·其中,id参数是唯一必须进行配…

    2022年10月12日
    3
  • waitforsingleobject的作用_效率理论

    waitforsingleobject的作用_效率理论MicrosoftWindows平台中两种最常用的锁定方法为WaitForSingleObject和EnterCriticalSection。WaitForSingleObject是一个过载MicrosoftAPI,可用于检查和修改许多不同对象(如事件、作业、互斥体、进程、信号、线程或计时器)的状态。WaitForSingleObject的一个不足之处是它会始终获取内核的锁

    2022年9月19日
    3
  • 公有云和私有云的对比和转换

    公有云和私有云的对比和转换章节目录共5500字,可跳读趣味科普-虾蟹互换私有云同样有底蕴有深度私有云转公有云的真难点公有云转私有云的真难点私有云转公有云的假难题公有云转私有云的假难题两类云人力侧重的不同定制越多越好…

    2022年6月17日
    26
  • Unity实战篇 | 教你怎样将Unity的启动Logo 设置成 自己制作的 帧动画[通俗易懂]

    Unity实战篇 | 教你怎样将Unity的启动Logo 设置成 自己制作的 帧动画[通俗易懂]上一篇文章我们讲了怎样在不购买专业版的情况下自定义Unity的启动Logo。那本篇文章就来介绍一下,怎样在去除默认Logo的前提下制作自己的启动动画!

    2022年6月5日
    218

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号