实验三 内置对象使用(简易聊天室)
实验三 内置对象使用
一、实验目的
1、掌握各个内置对象的含义;
2、理解并熟练应用session、application对象。
二、实验内容
1、设计聊天室,在聊天室中,需要通过JSP内置对象application来实时保存特定数量的当前聊天信息。
聊天室的设计包括:用户进行登录,选择聊天室,进行聊天,退出聊天室。 在聊天室中,用户只需
输入一个用户名就可以进入聊天室,但是如果当前有人在使用该用户名,那么就必须换一个唯一的用户
名。
具体要求:
n 用户登录成功后,程序会要求用户选择聊天室。可以不设置用户自行建立聊天室的功能,而且
在聊天中途不能从一个聊天室切换到另一个聊天室。
n 进入聊天室后,用户可以从用户信息窗口看到该聊天室中所有用户的用户名,也可以在聊天窗
口中看到随时更新的聊天信息。用户可以给所有人或某一个聊天用户发送公共的聊天信息,这个聊天内容
大家都可以看到。用户也可以给某个用户发送私人的聊天信息,这种信息属于私聊信息,只有发送者和接
收者可以看到。此外,聊天窗口还会出现一些系统公告,比如某某上站。
n 在用户单击“退出”按钮后,页面关闭,同时application和session中保存的信息都将丢失。
三、实验方法
1、用户登录信息使用request对象getParameter()方法得到用户登陆的一些信息;
2、公聊信息可以使用application对象,私聊信息使用session对象。
3、聊天的信息要不断刷新页面,使用户实时看到聊天信息。
4、用户退出时,有两种情况需要考虑:一是用户点击“退出”按钮,二是关闭浏览器,强制退出窗口,可
查阅windows感知浏览器关闭的事件的相应方法。(关闭浏览器的暂时没实现)
四、实验学时:4学时
五、实验代码
登录界面login.jsp
![](/assets/blank.gif)
![](/assets/blank.gif)
1 <%@ page language="java" contentType="text/html; charset=UTF-8" 2 pageEncoding="UTF-8"%> 3 <% 4 request.setCharacterEncoding("UTF-8"); 5 %> 6 <!DOCTYPE html> 7 <html> 8 <head> 9 <meta charset="UTF-8"> 10 <title>登录</title> 11 <style type="text/css"> 12 div{13 box-sizing: border-box; 14 border-width:400px 300px; 15 padding-top: 150px; 16 } 17 body{18 margin:0 auto; 19 wigth:200PX; 20 height:200px; 21 text-align:center; 22 font-size:20px; 23 font-family: 黑体,楷书; 24 color:black; 25 } 26 </style> 27 </head> 28 <body background="img/2.jpg"> 29 <div> 30 <p><b style=" font-size:30px;color:pink">OC</b></p> 31 <form action="check.jsp" method="post"> 32 <li> 33 <img src="img/头像.png" style="width:28px;height:28px"><input type="text" name="username" size="30px" required="required"><br/><br/> 34 <input style="border-bottom-color: white" type="submit" name="Submit" value="登录"> 35 </li> 36 </form> 37 </div> 38 </body> 39 </html>
login.jsp
检查用户登录check.jsp
![](/assets/blank.gif)
![](/assets/blank.gif)
1 <%@ page language="java" contentType="text/html; charset=UTF-8" 2 pageEncoding="UTF-8"%> 3 <% 4 request.setCharacterEncoding("UTF-8"); 5 %> 6 <%@page import="java.util.*"%> 7 <%@page import="java.text.SimpleDateFormat"%> 8 <!DOCTYPE html> 9 <html> 10 <head> 11 <meta charset="UTF-8"> 12 <title>检查验证</title> 13 </head> 14 <body> 15 <!-- 用户列表 --> 16 <%! ArrayList<String> users=new ArrayList<String>();/*用来存放登录用户*/ %> 17 <% 18 //从表单找中获取用户名 19 String username=request.getParameter("username"); 20 21 //从application中获取值 22 users = (ArrayList<String>)application.getAttribute("users"); 23 //如果该用户列表不存在,则实例化该用户列表 24 if(users==null){ 25 users = new ArrayList<String>(); 26 } 27 //查看当前列表中是否包含当前登入用 28 if(users.contains(username)){ 29 //设置提示信息 30 //out.println("users.get(i)"+users.get(i)); 31 //out.println("username"+username); 32 out.println("该用户已登入,请重新登入"); 33 response.setHeader("Refresh","3;URL=login.jsp"); 34 }else{ 35 //获取用户登入时间 36 Date d = new Date(); 37 SimpleDateFormat format=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 38 String ldate=format.format(d); 39 session.setAttribute("loginDate", ldate); 40 //若用户未登入,则加入到用户列表 41 session.setAttribute("user",username); 42 users.add(username); 43 application.setAttribute("users",users); 44 //用于后面显示上线用户 45 application.setAttribute("noluser", username); 46 response.sendRedirect("oclogin.jsp"); 47 } 48 %> 49 </body> 50 </html>
check.jsp
用户聊天界面oclgion.jsp
![](/assets/blank.gif)
![](/assets/blank.gif)
1 <%@ page language="java" contentType="text/html; charset=UTF-8" 2 pageEncoding="ISO-8859-1"%> 3 <% 4 request.setCharacterEncoding("UTF-8"); 5 %> 6 <!DOCTYPE html> 7 <html> 8 <head> 9 <meta charset="UTF-8"> 10 <title>用户界面</title> 11 </head> 12 <frameset cols="20%,40%,40%"> 13 <frame src="users.jsp"/> 14 <frameset rows="70%,30%"> 15 <frame src="publicoc.jsp"/> 16 <frame src="send.jsp"/> 17 </frameset> 18 <frameset rows="70%,30%"> 19 <frame src="privateoc.jsp"> 20 <frame src="send1.jsp"> 21 </frameset> 22 </frameset> 23 <body> 24 </body> 25 </html>
oclgion.jsp
在线用户显示界面users.jsp
![](/assets/blank.gif)
![](/assets/blank.gif)
1 <%@ page language="java" contentType="text/html; charset=UTF-8" 2 pageEncoding="UTF-8"%> 3 <% 4 request.setCharacterEncoding("UTF-8"); 5 %> 6 <%@page import="java.util.ArrayList"%> 7 <!DOCTYPE html> 8 <html> 9 <head> 10 <meta charset="UTF-8"> 11 <title>在线用户</title> 12 </head> 13 <body bgcolor="Beige"> 14 <% 15 //设置不断更新 16 response.setHeader("Refresh", "5"); 17 //取出在线人员 18 ArrayList<String> olusers = (ArrayList<String>) application.getAttribute("users"); 19 out.print("目前在线人员有"+olusers.size()+"人"); 20 //列出在线人员 21 for(int i=0;i<olusers.size();i++){ 22 String username=(String)olusers.get(i); 23 out.print("<li>"+username); 24 } 25 //out.print((String)session.getAttribute("user")); 26 %> 27 </body> 28 </html>
users.jsp
公聊发送消息框界面send.jsp
![](/assets/blank.gif)
![](/assets/blank.gif)
1 <%@ page language="java" contentType="text/html; charset=UTF-8" 2 pageEncoding="UTF-8"%> 3 <%@page import="java.util.*" %> 4 <%@page import="java.text.SimpleDateFormat"%> 5 <% 6 request.setCharacterEncoding("UTF-8"); 7 %> 8 <!DOCTYPE html> 9 <html> 10 <head> 11 <meta charset="UTF-8"> 12 <title>消息框</title> 13 </head> 14 <body bgcolor="Gainsboro"> 15 <div> 16 当前用户:<%=(String)session.getAttribute("user") %> 17 </div> 18 <form action="" method="post"> 19 <p align="right"> 20 <textarea name="message" rows="5" cols="45"></textarea><br/><br/> 21 <input type="submit" name="send" value="发送"> 22 <input type="button" name="exit" value="退出" onclick="parent.location.href='clean.jsp'"> 23 </form> 24 <% 25 //获取聊天时间 26 Date data=new Date(); 27 SimpleDateFormat format=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 28 String dd=format.format(data); 29 //获取聊天框内容 30 String message=request.getParameter("message"); 31 //判断消息列表是否为空 32 ArrayList<String> messages =(ArrayList<String>) application.getAttribute("messages"); 33 if(messages==null){ 34 messages=new ArrayList<String>(); 35 } 36 String user=(String)session.getAttribute("user"); 37 //判断是否有消息 38 if(message!=null && !message.equals("")){ 39 //把消息加入到messages列表中 40 messages.add(dd+"<br/>"+user+": "+message); 41 //将列表加入到application中 42 application.setAttribute("messages", messages); 43 } 44 45 %> 46 47 </body> 48 </html>
send.jsp
公聊消息显示框界面publicoc.jsp
![](/assets/blank.gif)
![](/assets/blank.gif)
1 <%@ page language="java" contentType="text/html; charset=UTF-8" 2 pageEncoding="UTF-8"%> 3 <%@page import="java.util.*" %> 4 <%@page import="java.text.SimpleDateFormat"%> 5 <% 6 request.setCharacterEncoding("UTF-8"); 7 %> 8 <!DOCTYPE html> 9 <html> 10 <head> 11 <meta charset="UTF-8"> 12 <title>公共聊天</title> 13 </head> 14 <body background="img/oc3.jpg"> 15 <p><font size="18px" color="Gray">公共聊天室</font></p> 16 <div float="right"> 17 <% 18 String noluser=(String)application.getAttribute("noluser"); 19 String ldate=(String)session.getAttribute("loginDate"); 20 %> 21 <p><font color="red" >系统提醒:<%=ldate%> <%=noluser %>上线了</font></p> 22 </div> 23 24 <% 25 //设置不断更新 26 response.setHeader("Refresh", "2"); 27 //获取用户登录时间 28 String pulgdate=(String)session.getAttribute("loginDate"); 29 SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 30 Date pulogintime =df.parse(pulgdate); 31 //从application中获取消息集合 32 ArrayList<String> allmessages=(ArrayList<String>)application.getAttribute("messages"); 33 //判断是否为空 34 if(allmessages != null){ 35 //遍历 36 for(int i=0;i<allmessages.size();i++){ 37 String msg=(String)allmessages.get(i); 38 String pusendtime=msg.substring(0,msg.indexOf("<br/>")); 39 Date psendtime=df.parse(pusendtime); 40 //后面登录的不能看到之前的消息 41 if(pulogintime.before(psendtime)){ 42 out.print("<li>"+msg); 43 } 44 } 45 } 46 %> 47 </body> 48 </html>
publicoc.jsp
私聊发送消息框界面send1.jsp
![](/assets/blank.gif)
![](/assets/blank.gif)
1 <%@ page language="java" contentType="text/html; charset=UTF-8" 2 pageEncoding="UTF-8"%> 3 <%@page import="java.util.*" %> 4 <%@page import="java.text.SimpleDateFormat"%> 5 <% 6 request.setCharacterEncoding("UTF-8"); 7 %> 8 <!DOCTYPE html> 9 <html> 10 <head> 11 <meta charset="UTF-8"> 12 <title>私聊消息框</title> 13 <script type="text/javascript"> 14 <!-- 保存选中下拉列表的值 --> 15 function save() { 16 radios = document.getElementsByName("privateusers"); 17 for (i = 0; i < radios.length; i++) { 18 if (radios[i].checked) document.cookie = 'radioindex =' + i; 19 } 20 } 21 window.onload = function () { 22 var cooki = document.cookie; 23 if (cooki != "") { 24 cooki = "{\"" + cooki + "\"}"; 25 cooki = cooki.replace(/\s*/g, "").replace(/=/g, '":"').replace(/;/g, '","'); 26 var json = eval("(" + cooki + ")"); //将coolies转成json对象 27 document.getElementsByName("privateusers")[json.radioindex].checked = true; 28 } 29 else 30 save(); 31 } 32 </script> 33 </head> 34 <body bgcolor="CornflowerBlue"> 35 <form action="" method="post"> 36 <select name="privateusers"> 37 <% 38 response.setHeader("Refresh", "10"); 39 String nowuser=(String)session.getAttribute("user"); 40 ArrayList<String> olusers=(ArrayList<String>)application.getAttribute("users"); 41 if(olusers.size()==1){ 42 %> 43 <option value="当前没有在线用户" >当前没有在线用户</option> 44 <% } 45 else{ 46 for(int i=0;i<olusers.size();i++){ 47 String oluser=(String)olusers.get(i); 48 if(!oluser.equals(nowuser)){ 49 %><option value=<%=oluser%> οnclick="save()"><%=oluser %></option> 50 <% 51 } 52 } 53 } 54 %> 55 </select> 56 <div>当前用户:<%=(String)session.getAttribute("user") %></div> 57 <p align="right"> 58 <textarea name="privatemsg" rows="3" cols="45"></textarea><br/><br/> 59 <input type="submit" name="send" value="发送"> 60 <input type="button" name="exit" value="退出" onclick="parent.location.href='clean.jsp'"> 61 </p> 62 </form> 63 <% 64 //获取聊天时间 65 Date data=new Date(); 66 SimpleDateFormat format=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 67 String dd=format.format(data); 68 //获取接受者 69 String reciver=request.getParameter("privateusers"); 70 //out.print(reciver); 71 //获取发送者 72 String sender=(String)session.getAttribute("user"); 73 //获取消息框里的内容 74 String privatemsg = request.getParameter("privatemsg"); 75 //获取application中的私聊消息集合 76 ArrayList<String> privatemsgs=(ArrayList<String>)application.getAttribute("privatemsgs"); 77 //实例化私聊信息 78 if(privatemsgs == null){ 79 privatemsgs = new ArrayList<String>(); 80 } 81 82 if(reciver!=null && !reciver.equals("当前没有在线用户")){/*接收者被选定,接收者不能为“当前没有在线用户”*/ 83 //判断消息框是否输入了消息,只用当输入了消息才保存到列表中 84 if(privatemsg!=null && !privatemsg.equals("")){ 85 String msg=dd+" "+sender+"#"+reciver+" "+privatemsg+"<br/>"; 86 privatemsgs.add(msg); 87 application.setAttribute("privatemsgs", privatemsgs); 88 } 89 } 90 %> 91 </body> 92 </html>
send1.jsp
私聊消息显示框界面privateoc.jsp
![](/assets/blank.gif)
![](/assets/blank.gif)
1 <%@ page language="java" contentType="text/html; charset=UTF-8" 2 pageEncoding="UTF-8"%> 3 <%@page import="java.util.*" %> 4 <%@page import="java.text.SimpleDateFormat"%> 5 <% 6 request.setCharacterEncoding("UTF-8"); 7 %> 8 <!DOCTYPE html> 9 <html> 10 <head> 11 <meta charset="UTF-8"> 12 <title>私聊</title> 13 </head> 14 <font size="30px" color="DodgerBlue">私人聊天室</font> 15 <body background="img/oc2.jpg"> 16 <% 17 //私聊消息 18 response.setHeader("Refresh", "2"); 19 //获取用户登录时间 20 String lgdate=(String)session.getAttribute("loginDate"); 21 SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 22 Date logintime =df.parse(lgdate); 23 //获取消息集合,接受者集合,发送者集合 24 ArrayList<String> privatemsgs = (ArrayList<String>) application.getAttribute("privatemsgs"); 25 if(privatemsgs == null){ 26 privatemsgs=new ArrayList<String>(); 27 } 28 //获取当前用户 29 String user=(String)session.getAttribute("user"); 30 //判断 31 if(privatemsgs != null){ 32 for(int i=0;i<privatemsgs.size();i++){ 33 String msg=(String)privatemsgs.get(i); 34 //substring() 方法用于提取字符串中介于两个指定下标之间的字符。 35 //indexOf() 方法可返回某个指定的字符串值在字符串中首次出现的位置。 36 // lastIndexOf 是从右向左查某个指定的字符串在字符串中最后一次出现的位置(也就是从后往前查) 37 String date=msg.substring(0,msg.indexOf(" ")); 38 String sender=msg.substring(msg.indexOf(" ")+6,msg.indexOf("#")); 39 String reciver=msg.substring(msg.indexOf("#")+1,msg.lastIndexOf(" ")); 40 String msg1=msg.substring(msg.lastIndexOf(" ")); 41 Date sdate=df.parse(date); 42 if(sender.equals(user)){ 43 if(logintime.before(sdate)){ 44 out.print(date+"<br/>"+"你对"+reciver+"说:"+msg1); 45 } 46 } 47 if(reciver.equals(user)){ 48 if(logintime.before(sdate)){ 49 out.print(date+"<br/>"+sender+"对你说:"+msg1); 50 } 51 } 52 } 53 } 54 55 %> 56 </body> 57 </html>
privateoc.jsp
用户退出清除用户界面clean.jsp
![](/assets/blank.gif)
![](/assets/blank.gif)
1 <%@ page language="java" contentType="text/html; charset=UTF-8" 2 pageEncoding="UTF-8"%> 3 <%@page import="java.util.*" %> 4 <% 5 request.setCharacterEncoding("UTF-8"); 6 %> 7 <!DOCTYPE html> 8 <html> 9 <head> 10 <meta charset="UTF-8"> 11 <title>注销用户</title> 12 </head> 13 <body> 14 <% 15 //从application作用域中取出用户列表 16 ArrayList<String> users=(ArrayList<String>)application.getAttribute("users"); 17 String username=(String)session.getAttribute("user"); 18 //从用户列表中删除该用户 19 users.remove(username); 20 application.setAttribute("users",users); 21 //注销该用户的会话 22 session.invalidate(); 23 response.sendRedirect("login.jsp"); 24 %> 25 26 </body> 27 </html>
clean.jsp
六、结果展示
有不足的地方欢迎大家指教!!
转载于:https://www.cnblogs.com/Trista-ddt/p/10860419.html
实验三 内置对象使用(简易聊天室)相关推荐
- 实验五内置对象二--web
一.实验目的 理解和巩固课堂上所学的JSP的session和application内置对象知识,提高学生对知识的实际运用与软件编程实现能力.二.实验内容 使用application对象编写一个成语接龙 ...
- 利用jsp内置对象实现的简易聊天室
最近Java老师给我们安排了一个实验,内容如下: 要完成这个实验,首先要对jsp的内置对象有深刻了解,不了解的老哥可以看看这个(哔哩哔哩)jsp几大内置对象详解,实力推荐. 鉴于要实现的功能比较简单, ...
- 互联网软件开发—— 实验三 JSP 内置对象(留言板)
实验名称: 实验三 JSP 内置对象 一.实验目的 1.掌握表单提交及页面间参数传递的方法. 2.理解页面转发与重定向之间的区别. 3.掌握 request.session 和 application ...
- jsp输出金字塔_实验二 JSP语法及内置对象.doc
实验二 JSP语法及内置对象 燕山大学经济管理学院 JSP编程技术 实验指导书 经济管理学院电子商务系 2011年5月 实 验 说 明 <JSP编程技术>JSP(Java Server P ...
- NET程序设计 实验五 ASP.NET内置对象
计算机学院实验报告 课程名称 .NET程序设计 实验名称 实验五 ASP.NET内置对象 一.实验目的: 1.理解ASP.NET内置对象的作用. 2.掌握Response内置对象的方法及属性. 3.掌 ...
- JavaScript知识笔记(三)——内置对象、浏览器对象
内置对象: (与Java很像) JavaScript 中的所有事物都是对象,如:字符串.数值.数组.函数等,每个对象带有属性和方法. 对象的属性:反映该对象某些特定的性质的,如:字符串的长度.图像的长 ...
- SpringBoot系列三:SpringBoot基本概念(统一父 pom 管理、SpringBoot 代码测试、启动注解分析、配置访问路径、使用内置对象、项目打包发布)...
声明:本文来源于MLDN培训视频的课堂笔记,写在这里只是为了方便查阅. 1.了解SpringBoot的基本概念 2.具体内容 在之前所建立的 SpringBoot 项目只是根据官方文档实现的一个基础程 ...
- 【JSP笔记】第三章 JSP内置对象【上】
2019独角兽企业重金招聘Python工程师标准>>> 1.内置对象简介:JSP内置对象是WEB容器创建的一组对象,不使用new关键就可以是用的对象. <% out.print ...
- Asp.net 内置对象
(1)简述ASP.NET内置对象. 答:ASP.NET提供了内置对象有Page.Request.Response.Application.Session.Server.Mail和Cookies.这些对 ...
- JSP和Servlet的区别和联系 JSP 内置对象和作用
JSP和Servlet的区别和联系 1.jsp经编译后就变成了Servlet. (JSP的本质就是Servlet,JVM只能识别java的类,不能识别JSP的代码,Web容器将JSP的代码编译成JVM ...
最新文章
- 一个IEEE论文LaTeX模板,可能较旧
- CG CTF WEB 上传绕过
- Hessian序列化复杂对象
- Linux下设置普通用户使用sudo命令
- mysql 加密 en_以极少的停机时间加密运行 MySQL 或 MariaDB 的 Amazon RDS 数据库实例...
- Python中的json.dumps()和json.loads()函数
- Zookeeper-01-概述
- 作为程序员,起码要知道的 Python 修饰器!
- 18. PHP 表单验证
- VirtualBox-5.2.44的安装
- 用 python+tkinter+有道云API 写一个自用的背单词软件
- python输入一个正整数_Python题目解答:输入一个整数N,输出N的所有最小因子
- 浅析GPU计算——CPU和GPU的选择
- 【渝粤题库】广东开放大学 基础会计 形成性考核
- 几种常见的概率统计谬误
- 汉诺塔问题(递归算法思想)
- 【教学类-17-02】20221125《世界杯七巧板A4整页-随机参考图七巧板 3份一页》(大班)
- 手游代理怎么做?看看这些就知道了
- 2020年广东工业大学第十届文远知行杯新生程序设计竞赛(同步赛)G- 排解忧伤
- PyQt(Python+Qt)学习随笔:Qt Designer中怎么给toolBar添加按钮