热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

javaweb实现简单聊天室(含拍一拍功能)

原标题:java-web实现简单聊天室(含拍一拍功能)目录目标效

原标题:java-web实现简单聊天室(含拍一拍功能)


目录



  • 目标

  • 效果

  • 基础知识

  • 实现思路

  • 关键代码




目标

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


效果

在这里插入图片描述


基础知识

  • 数据的存取 setAttribute / getAttribute


  • request请求对象 :有效时间短
    ServletContext上下文对象:一直存在于服务器,存储公有、 共享数据
    Session会话对象:独立


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


  • 访问作用域变量:在JSP页面中,可使用JSP表达式访问作用域变量。一般做法:在Servlet中使用setAttribute()将一个变量存储到某个作用域对象上,如HttpServletRequest、HTTPSession及ServletContext等。然后使用RequestDispatcher对象的forward()将请求转发到JSP页面,在JSP页面中调用隐含变量的getAttribute()返回作用域变量的值。




实现思路

  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>

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

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

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

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


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

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

say = ""+nickname+"a>"+":"+text;

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


关键代码

1. login.jsp

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

2. input.jsp

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

3. message.jsp

<h3>一起来聊天吧h3>
${says}

4. LoginServlet.java

package chatting;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
imwww.yii666.comport 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,resp文章来源站点https://www.yii666.com/onse);
}
else{
//昵称不合法,返回登陆页面
request.getRequestDispatcher("/login.jsp").forward(request,response);
}
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
}
}

5. 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;chars文章来源地址34990.htmlet=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 {
}
}

6. 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-web实现简单聊天室(含拍一拍功能)


推荐阅读
  • 使用 ModelAttribute 实现页面数据自动填充
    本文介绍了如何利用 Spring MVC 中的 ModelAttribute 注解,在页面跳转后自动填充表单数据。主要探讨了两种实现方法及其背后的原理。 ... [详细]
  • 本文详细介绍了PHP中的几种超全局变量,包括$GLOBAL、$_SERVER、$_POST、$_GET等,并探讨了AJAX的工作原理及其优缺点。通过具体示例,帮助读者更好地理解和应用这些技术。 ... [详细]
  • 本文详细介绍了跨站脚本攻击(XSS)的基本概念、工作原理,并通过实际案例演示如何构建XSS漏洞的测试环境,以及探讨了XSS攻击的不同形式和防御策略。 ... [详细]
  • 本文探讨了一个Web工程项目的需求,即允许用户随时添加定时任务,并通过Quartz框架实现这些任务的自动化调度。文章将介绍如何设计任务表以存储任务信息和执行周期,以及如何通过一个定期扫描机制自动识别并加载新任务到调度系统中。 ... [详细]
  • 本文详细介绍了在PHP中如何获取和处理HTTP头部信息,包括通过cURL获取请求头信息、使用header函数发送响应头以及获取客户端HTTP头部的方法。同时,还探讨了PHP中$_SERVER变量的使用,以获取客户端和服务器的相关信息。 ... [详细]
  • selenium通过JS语法操作页面元素
    做过web测试的小伙伴们都知道,web元素现在很多是JS写的,那么既然是JS写的,可以通过JS语言去操作页面,来帮助我们操作一些selenium不能覆盖的功能。问题来了我们能否通过 ... [详细]
  • 本文介绍了如何通过创建自定义 XML 文件来修改 Android 中 Spinner 的项样式,包括颜色和大小的调整。 ... [详细]
  • 本文将详细介绍如何配置并整合MVP架构、Retrofit网络请求库、Dagger2依赖注入框架以及RxAndroid响应式编程库,构建高效、模块化的Android应用。 ... [详细]
  • 本文探讨了Android系统中联系人数据库的设计,特别是AbstractContactsProvider类的作用与实现。文章提供了对源代码的详细分析,并解释了该类如何支持跨数据库操作及事务处理。源代码可从官方Android网站下载。 ... [详细]
  • 使用 Babylon.js 实现地球模型与切片地图交互(第三部分)
    本文继续探讨在上一章节中构建的地球模型基础上,如何通过自定义的 `CameraEarthWheelControl` 类来实现更精细的地图缩放控制。我们将深入解析该类的实现细节,并展示其在实际项目中的应用。 ... [详细]
  • 使用jQuery与百度地图API实现地址转经纬度功能
    本文详细介绍了如何利用jQuery和百度地图API将地址转换为经纬度,包括申请API密钥、页面构建及核心代码实现。 ... [详细]
  • 我在尝试将组合框转换为具有自动完成功能时遇到了一个问题,即页面上的列表框也被转换成了自动完成下拉框,而不是保持原有的多选列表框形式。 ... [详细]
  • 探讨多种方法来确定Java对象的实际类型,包括使用instanceof关键字、getClass()方法等。 ... [详细]
  • Docker基础入门与环境配置指南
    本文介绍了Docker——一款用Go语言编写的开源应用程序容器引擎。通过Docker,用户能够将应用及其依赖打包进容器内,实现高效、轻量级的虚拟化。容器之间采用沙箱机制,确保彼此隔离且资源消耗低。 ... [详细]
  • 来自FallDream的博客,未经允许,请勿转载,谢谢。一天一套noi简直了.昨天勉强做完了noi2011今天教练又丢出来一套noi ... [详细]
author-avatar
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有