java web实现简单聊天室

 更新时间:2020年11月23日 11:42:21   作者:今天肝代码了吗  
这篇文章主要为大家详细介绍了java-web实现简单聊天室,含拍一拍功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

目标

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

基础知识

  • 数据的存取 setAttribute / getAttribute
  • request请求对象 :有效时间短

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

  • 网站默认页面一般是index.jsp

实现思路

1.登录页面 login.jsp 输入昵称

2.编写一个LoginSevlet,处理登录提交的昵称,保存登录昵称到session(会话变量)
若昵称合法 if(nickname.length()!=0),跳转到聊天室,不合法回到登录页面

3.编写聊天室页面chatroom.jsp ,是一个框架,把多个页面集成到一个页面中

<iframe src="message.jsp" width="100%" height="70%"> </iframe>
<iframe src="input.jsp" width="100%" height="25%"> </iframe>

4.聊天内容显示message.jsp,不断自动刷新标签内设置响应头,用${上下文变量}显示聊天内容

<meta http-equiv="refresh" content="1">

5.input.jsp(不刷新)输入聊天内容文本框text,点击发送聊天内容按钮时,将把文本框的聊天信息提交给ChatServlet处理。下方有超链接可退出聊天室。

<a href="login.jsp" target="_top">退出聊天室</a>

6.ChatServlet:检测聊天信息合法性,把聊天信息加入到ServletContext变量(字符串)中,(每次都将xx:xxxx加入上下文字符串)
判断是否存在该变量,存在则直接读取现有聊天内容,把数据加入进去后,重新写回上下文变量

7.实现拍一拍功能(目的:学习如何进行链接操作)
每个人名做成一个链接,访问某一个servlet,该servlet可以在聊天信息(上下文变量)里添加一行,xx拍了yyy一下,跳转回message.jsp
问题:链接里应该包含yyy参数,servlet?nick=yyy

say = "<a href='NickServlet?nickname="+nickname+"'target='_parent'>"+nickname+"</a>"+":"+text;

8.多人聊天实现:多种类型浏览器

关键代码

login.jsp

昵称:<input type="text" name="nickname"/><br> <br><br>
<input type="submit" value="登录"/>
<input type="reset" value="取消"/>

input.jsp

<form action="input.do" method="post">
 <input type="text" size="50" name="text"/>
 <input type="submit" value="发送"><br><br><br><br>
 <a href="login.jsp" rel="external nofollow" rel="external nofollow" target="_top">退出聊天室</a>
</form>

message.jsp

<h3>一起来聊天吧</h3>
${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 = "<a href='NickServlet?nickname="+nickname+"'target='_parent'>"+nickname+"</a>"+":"+text;
  String says = new String();
  //将昵称和聊天信息一起放在上下文变量
  ServletContext context = getServletContext();
  if(context.getAttribute("says")!=null){
  says = context.getAttribute("says") + say + "<br>";
  }
  else{
  says = say + "<br>";
  }
  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+"<br>";

 ServletContext context = request.getServletContext();
 String says = context.getAttribute("says")+pick;
 context.setAttribute("says",says);

 RequestDispatcher dispatcher = request.getRequestDispatcher("/chatroom.jsp");
 dispatcher.forward(request, response);
 }
}

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

相关文章

  • SpringBoot项目打包部署到Tomcat的操作流程

    SpringBoot项目打包部署到Tomcat的操作流程

    在最近一个项目中,维护行里一个年代较为久远的单体项目,需要将项目打包放到的tomcat服务器下运行,所以本文就给大家介绍一下SpringBoot项目打包部署到Tomcat的流程步骤,需要的朋友可以参考下
    2023-08-08
  • Java Thread 类和Runnable 接口详解

    Java Thread 类和Runnable 接口详解

    这篇文章主要介绍了Java Thread 类和Runnable接口详解,文章围绕主题展开详细的内容介绍,具有一定的参考价值,需要的朋友可以参考一下
    2022-08-08
  • SpringBoot定时调度之Timer与Quartz详解

    SpringBoot定时调度之Timer与Quartz详解

    Java 中常用的定时调度框架有以下几种:Timer、ScheduledExecutorService、Spring Task和Quartz,本文主要来和大家讲讲他们的具体使用,需要的可以参考一下
    2023-06-06
  • Java编写的24点纸牌游戏

    Java编写的24点纸牌游戏

    这篇文章主要介绍了Java编写的24点纸牌游戏的相关资料,需要的朋友可以参考下
    2015-03-03
  • java反射机制及beanUtils的实现原理分析

    java反射机制及beanUtils的实现原理分析

    本文介绍了Java的反射机制、VO、DTO、PO的概念以及BeanUtils的实现原理和简单示例,通过反射可以在运行时动态操作类、方法和字段,BeanUtils用于在不同bean之间进行属性复制
    2024-12-12
  • Spring Boot构建优雅的RESTful接口过程详解

    Spring Boot构建优雅的RESTful接口过程详解

    这篇文章主要介绍了spring boot构建优雅的RESTful接口过程详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-08-08
  • Java中split根据"."分割字符串问题举例

    Java中split根据"."分割字符串问题举例

    split表达式其实就是一个正则表达式,* | . ^ 等符号在正则表达式中属于一种有特殊含义的字符,下面这篇文章主要给大家介绍了关于Java中split根据“.“分割字符串问题的相关资料,需要的朋友可以参考下
    2022-10-10
  • SpringBoot配置绑定方法详解

    SpringBoot配置绑定方法详解

    配置绑定是SpringBoot其中一个底层功能,SpringBoot把配置绑定的过程变得更加简单,传统java将常用的配置放到配置文件properties中,之后将这些配置绑定到javabean中
    2022-10-10
  • Spring cloud 限流的多种方式

    Spring cloud 限流的多种方式

    在频繁的网络请求时,服务有时候也会受到很大的压力,尤其是那种网络攻击,非法的。这样的情形有时候需要作一些限制。本文主要介绍了两种限流方法,感兴趣的可以了解一下
    2021-06-06
  • 生成PDF全攻略之在已有PDF上添加内容的实现方法

    生成PDF全攻略之在已有PDF上添加内容的实现方法

    下面小编就为大家带来一篇生成PDF全攻略之在已有PDF上添加内容的实现方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-06-06

最新评论