jsp实现简单聊天室

实现简单聊天室。要求以B/S方式实现多人聊天,可以保留聊天者的昵称和聊天内容。
主要由7个jsp页面组成

main.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8" import="java.util.*" pageEncoding="utf-8"%>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
  <head>
  </head>
  
  
      <frameset rows="80%,*">
          <frameset cols="20%,*">
              <frame src="list.jsp"/>
              <frame src="msg.jsp"/>             
          </frameset>
          <% response.setHeader("refresh", "10"); %>
          <frame src="send.jsp"/>
      </frameset>
 
</html>

login.jsp

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title>My JSP 'login.jsp' starting page</title>
  </head>
  <body>
      <%
          String msg = (String) request.getAttribute("msg");
          if(msg == null){
              msg = "";
          }
       %>
       <p><%=msg %></p>
       <form action="deal_login.jsp" method="post" name="login_form">
           <p align="center" >用户名<input type="text" name="username"/></p>
           <p align="center"><input type="submit" value="登入"/></p>
       </form>
  </body>
</html>

deal_login.jsp

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>


<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head> 
    <title>My JSP 'deal_login.jsp' starting page</title>
  </head>
  <body>
      <%
          request.setCharacterEncoding("utf-8");
          
          //获取login.jsp表单中提交过来得值
          String username = request.getParameter("username");
          //判断用户名是否为空
          if(username.trim().length() == 0){
              request.setAttribute("msg", "用户名不得为空");
              request.getRequestDispatcher("login.jsp").forward(request,response);
              return ;
              
          }
          
          //从application作用域中取出用户列表
          List<Object> users = (List<Object>) application.getAttribute("users");
          
          //如果没有用户列表,进行实例化
          if(users == null){
              users = new ArrayList<Object>();
              
          }
          //查看当前列表中是否包含当前得登录用户
          if(users.contains(username)){
              //包含登入用户,设置提醒信息
              request.setAttribute("msg", "该用户已登入,请重新登入");
              request.getRequestDispatcher("login.jsp").forward(request,response);
              return;
          }
          
          //将登入用户的用户名加入该用户列表
          users.add(username);
          application.setAttribute("users", users);
          session.setAttribute("user", username);
          response.sendRedirect("main.jsp");
       %>
  </body>
</html>

loginOff.jsp

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>   
    <title>My JSP 'loginOff.jsp' starting page</title>

  </head>
  
  <body>
      <%
          //从application作用域中读取用户列表
          List<Object> users = (List<Object>)application.getAttribute("users");
          String username = (String) session.getAttribute("user");
          //从该用户列表中移除该用户
          users.remove(username);
          application.setAttribute("users",users);
          //注销该用户的会话
          session.invalidate();
       %>
       <jsp:forward page="login.jsp"/>
  </body>
</html>

list.jsp

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head> 
    <title>My JSP 'list.jsp' starting page</title>
  </head>
  <body>
  <%
      //设置刷新间隔
      response.setHeader("refresh", "1");
      //从application作用域中读取用户列表
      List<Object> users = (List<Object>) application.getAttribute("users");
      out.print("目前在线的人有:"+ users.size()+"人");
      for(int i=0;i<users.size();i++){
          String username = (String) users.get(i);
          out.print("<li>"+username);
      }
   %>
  
  </body>
  
</html>

msg.jsp

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
  </head>
  
  <body>
      <%
          response.setHeader("refresh", "1");
          
          List<Object> msgs = (List<Object>) application.getAttribute("msgs");
          List<Object> to_sb = (List<Object>) application.getAttribute("private");
          List<Object> from_sb = (List<Object>) application.getAttribute("S_private");
          
          String user = (String)session.getAttribute("user");
          
          try{
              for(int i=0;i< msgs.size();i++){
                  String t1 = (String) msgs.get(i);
                  String t2 = (String) to_sb.get(i);
                  String t3 = (String) from_sb.get(i);
                  
                  if(t2.equals(user) || t2.equals("所有人") || t3.equals(user)){
                      out.print(t1);
                  }
              }
          }catch(Exception e){}
       %>
  </body>
</html>

send.jsp

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
  </head>
  
  <body>
      <form action="" method="post">
          <p align="right">
          <%=session.getAttribute("user") %>:
                  发送消息给:
          <select name="select">
              <option value="0">所有人</option>
              <%
                  List<Object> users = (List<Object>) application.getAttribute("users");
                  for(int i=0;i<users.size();i++){
                      String username = (String) users.get(i);%>
                      <option value="<%=i+1 %>"><%=username %></option>
                  <%}
               %>
          </select>
          <input type="text" name="message" size="50" /><br>
          <input type="submit" value="发送"/>
          <input type="button" value="退出登录" onClick="parent.location.href='loginOff.jsp'">
      </form>
      
      <%
          String user = (String) session.getAttribute("user");
          request.setCharacterEncoding("utf-8");
          String message = request.getParameter("message");
          
          String to="";
          try{
              //被发送信息方
              List<Object> tmp = (List<Object>) application.getAttribute("users");
              String SS = request.getParameter("select");
              int a = Integer.parseInt(SS);
              if(a==0){
                  to="所有人";
                  
              }
              else{
                  to=(String)tmp.get(a-1);
                  
              }
              
          }catch(Exception e){}
          
          List<Object> msgs = (List<Object>) application.getAttribute("msgs");
          if(msgs == null){
              msgs = new ArrayList<Object>();
          }
          List<Object> to_sb = (List<Object>) application.getAttribute("private");
          if(to_sb == null){
              to_sb = new ArrayList<Object>();
          }
          List<Object> from_sb = (List<Object>) application.getAttribute("S_private");
          if(from_sb == null){
              from_sb = new ArrayList<Object>();
          }
          
          if(message != null && !message.equals("")){
              msgs.add(user+"发送信息给"+to+":" +message +"<br/>");
              to_sb.add(to);
              from_sb.add(user);
              
              application.setAttribute("msgs", msgs);
              application.setAttribute("private", to_sb);
              application.setAttribute("S_private", from_sb);
          }
       %>
  </body>
</html>

实验效果:
在这里插入图片描述

  • 33
    点赞
  • 176
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 13
    评论
简易聊天室本次实验的目的是通过以下题目掌握JSP内置对象,包括:request,response,session,application等。 (1)制作简易聊天室,能够实现简单的页面聊天功能。 (2)制作网页计数器,要求相同的窗口内刷新页面访问次数并不增加,并且用图片来显数字。1、 熟悉request、response、session、application、out等内置对象; 2、 选择制作网页计数器程序需准备数字图片;1、进入jsp子目录,编写简易聊天室JSP程序,聊天室的需要实现的基本功能:输入昵称、聊天。 2.根据功能编写页面代码。二、网页计算器 利用内置对象application <html> <head> <base href="<%=basePath%>"> <title>My JSP 'Counter.jsp' starting page</title> <meta http-equiv="pragma" content="no-cache"> <meta http-equiv="cache-control" content="no-cache"> <meta http-equiv="expires" content="0"> <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> <meta http-equiv="description" content="This is my page"> <!-- <link rel="stylesheet" type="text/css" href="styles.css"> --> </head> <body> 您是第位访问者! </body> </html> 简易聊天室本次实验的目的是通过以下题目掌握JSP内置对象,包括:request,response,session,application等。 (1)制作简易聊天室,能够实现简单的页面聊天功能。 (2)制作网页计数器,要求相同的窗口内刷新页面访问次数并不增加,并且用图片来显数字。1、 熟悉request、response、session、application、out等内置对象; 2、 选择制作网页计数器程序需准备数字图片;1、进入jsp子目录,编写简易聊天室JSP程序,聊
评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

angulaer

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值