如何用Java Web技术搭建简易在线聊天室?

2026-04-30 06:502阅读0评论SEO问题
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计1702个文字,预计阅读时间需要7分钟。

如何用Java Web技术搭建简易在线聊天室?

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

基础知识:- servlet:用于处理HTTP请求的Java类。- jsp:Java Server Pages,用于创建动态网页的技术。- 数据的存储:使用session或数据库来存储用户信息和聊天记录。

实现步骤:

1.创建servlet类处理登录和聊天请求。

2.创建jsp页面用于显示聊天界面。

3.用户通过浏览器登录,servlet验证用户信息后,将用户信息存入session。

4.用户进入聊天室,可以发送消息。

5.消息存储在session或数据库中。

6.点击聊天信息框中的用户名,触发拍一拍功能,servlet处理该请求,并将结果反馈给前端。

代码示例(servlet部分):

java@WebServlet(/ChatServlet)public class ChatServlet extends HttpServlet { protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // 获取用户信息 String username=request.getParameter(username); // 验证用户信息 if (validateUser(username)) { // 存储用户信息到session request.getSession().setAttribute(username, username); // 转发到聊天界面 request.getRequestDispatcher(/chat.jsp).forward(request, response); } else { // 处理登录失败 response.sendRedirect(/login.jsp); } }

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // 获取用户消息 String message=request.getParameter(message); // 存储消息到session或数据库 // ... // 返回聊天界面 request.getRequestDispatcher(/chat.jsp).forward(request, response); }

private boolean validateUser(String username) { // 验证用户名是否有效 // ... return true; }}

代码示例(jsp部分):jsp 聊天室

目标

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

基础知识

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

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

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

实现思路

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

如何用Java Web技术搭建简易在线聊天室?

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

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

本文共计1702个文字,预计阅读时间需要7分钟。

如何用Java Web技术搭建简易在线聊天室?

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

基础知识:- servlet:用于处理HTTP请求的Java类。- jsp:Java Server Pages,用于创建动态网页的技术。- 数据的存储:使用session或数据库来存储用户信息和聊天记录。

实现步骤:

1.创建servlet类处理登录和聊天请求。

2.创建jsp页面用于显示聊天界面。

3.用户通过浏览器登录,servlet验证用户信息后,将用户信息存入session。

4.用户进入聊天室,可以发送消息。

5.消息存储在session或数据库中。

6.点击聊天信息框中的用户名,触发拍一拍功能,servlet处理该请求,并将结果反馈给前端。

代码示例(servlet部分):

java@WebServlet(/ChatServlet)public class ChatServlet extends HttpServlet { protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // 获取用户信息 String username=request.getParameter(username); // 验证用户信息 if (validateUser(username)) { // 存储用户信息到session request.getSession().setAttribute(username, username); // 转发到聊天界面 request.getRequestDispatcher(/chat.jsp).forward(request, response); } else { // 处理登录失败 response.sendRedirect(/login.jsp); } }

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // 获取用户消息 String message=request.getParameter(message); // 存储消息到session或数据库 // ... // 返回聊天界面 request.getRequestDispatcher(/chat.jsp).forward(request, response); }

private boolean validateUser(String username) { // 验证用户名是否有效 // ... return true; }}

代码示例(jsp部分):jsp 聊天室

目标

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

基础知识

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

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

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

实现思路

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

如何用Java Web技术搭建简易在线聊天室?

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

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