实验三 内置对象使用

  

              一、实验目的

              1、掌握各个内置对象的含义;

              2、理解并熟练应用session、application对象。

              二、实验内容

              1、设计聊天室,在聊天室中,需要通过JSP内置对象application来实时保存特定数量的当前聊天信息。

                聊天室的设计包括:用户进行登录,选择聊天室,进行聊天,退出聊天室。 在聊天室中,用户只需

              输入一个用户名就可以进入聊天室,但是如果当前有人在使用该用户名,那么就必须换一个唯一的用户

              名。

                具体要求:

                  n 用户登录成功后,程序会要求用户选择聊天室。可以不设置用户自行建立聊天室的功能,而且

              在聊天中途不能从一个聊天室切换到另一个聊天室。

                  n 进入聊天室后,用户可以从用户信息窗口看到该聊天室中所有用户的用户名,也可以在聊天窗

              口中看到随时更新的聊天信息。用户可以给所有人或某一个聊天用户发送公共的聊天信息,这个聊天内容

              大家都可以看到。用户也可以给某个用户发送私人的聊天信息,这种信息属于私聊信息,只有发送者和接

              收者可以看到。此外,聊天窗口还会出现一些系统公告,比如某某上站。

                  n  在用户单击“退出”按钮后,页面关闭,同时application和session中保存的信息都将丢失。

              三、实验方法

              1、用户登录信息使用request对象getParameter()方法得到用户登陆的一些信息;

              2、公聊信息可以使用application对象,私聊信息使用session对象。

              3、聊天的信息要不断刷新页面,使用户实时看到聊天信息。

              4、用户退出时,有两种情况需要考虑:一是用户点击“退出”按钮,二是关闭浏览器,强制退出窗口,可

              查阅windows感知浏览器关闭的事件的相应方法。(关闭浏览器的暂时没实现)

              四、实验学时:4学时

              五、实验代码

                登录界面login.jsp

 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

 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

 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

 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

 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="发送">&nbsp;&nbsp;&nbsp;&nbsp;
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

 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%>&nbsp;&nbsp;&nbsp;<%=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

 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="发送">&nbsp;&nbsp;&nbsp;&nbsp;
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+"&nbsp;"+sender+"#"+reciver+"&nbsp;"+privatemsg+"<br/>";
86             privatemsgs.add(msg);
87             application.setAttribute("privatemsgs", privatemsgs);
88         }
89     }
90 %>
91 </body>
92 </html>

send1.jsp

                私聊消息显示框界面privateoc.jsp

 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("&nbsp;"));
38             String sender=msg.substring(msg.indexOf("&nbsp;")+6,msg.indexOf("#"));
39             String reciver=msg.substring(msg.indexOf("#")+1,msg.lastIndexOf("&nbsp;"));
40             String msg1=msg.substring(msg.lastIndexOf("&nbsp;"));
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

 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

实验三 内置对象使用(简易聊天室)相关推荐

  1. 实验五内置对象二--web

    一.实验目的 理解和巩固课堂上所学的JSP的session和application内置对象知识,提高学生对知识的实际运用与软件编程实现能力.二.实验内容 使用application对象编写一个成语接龙 ...

  2. 利用jsp内置对象实现的简易聊天室

    最近Java老师给我们安排了一个实验,内容如下: 要完成这个实验,首先要对jsp的内置对象有深刻了解,不了解的老哥可以看看这个(哔哩哔哩)jsp几大内置对象详解,实力推荐. 鉴于要实现的功能比较简单, ...

  3. 互联网软件开发—— 实验三 JSP 内置对象(留言板)

    实验名称: 实验三 JSP 内置对象 一.实验目的 1.掌握表单提交及页面间参数传递的方法. 2.理解页面转发与重定向之间的区别. 3.掌握 request.session 和 application ...

  4. jsp输出金字塔_实验二 JSP语法及内置对象.doc

    实验二 JSP语法及内置对象 燕山大学经济管理学院 JSP编程技术 实验指导书 经济管理学院电子商务系 2011年5月 实 验 说 明 <JSP编程技术>JSP(Java Server P ...

  5. NET程序设计 实验五 ASP.NET内置对象

    计算机学院实验报告 课程名称 .NET程序设计 实验名称 实验五 ASP.NET内置对象 一.实验目的: 1.理解ASP.NET内置对象的作用. 2.掌握Response内置对象的方法及属性. 3.掌 ...

  6. JavaScript知识笔记(三)——内置对象、浏览器对象

    内置对象: (与Java很像) JavaScript 中的所有事物都是对象,如:字符串.数值.数组.函数等,每个对象带有属性和方法. 对象的属性:反映该对象某些特定的性质的,如:字符串的长度.图像的长 ...

  7. SpringBoot系列三:SpringBoot基本概念(统一父 pom 管理、SpringBoot 代码测试、启动注解分析、配置访问路径、使用内置对象、项目打包发布)...

    声明:本文来源于MLDN培训视频的课堂笔记,写在这里只是为了方便查阅. 1.了解SpringBoot的基本概念 2.具体内容 在之前所建立的 SpringBoot 项目只是根据官方文档实现的一个基础程 ...

  8. 【JSP笔记】第三章 JSP内置对象【上】

    2019独角兽企业重金招聘Python工程师标准>>> 1.内置对象简介:JSP内置对象是WEB容器创建的一组对象,不使用new关键就可以是用的对象. <% out.print ...

  9. Asp.net 内置对象

    (1)简述ASP.NET内置对象. 答:ASP.NET提供了内置对象有Page.Request.Response.Application.Session.Server.Mail和Cookies.这些对 ...

  10. JSP和Servlet的区别和联系 JSP 内置对象和作用

    JSP和Servlet的区别和联系 1.jsp经编译后就变成了Servlet. (JSP的本质就是Servlet,JVM只能识别java的类,不能识别JSP的代码,Web容器将JSP的代码编译成JVM ...

最新文章

  1. 一个IEEE论文LaTeX模板,可能较旧
  2. CG CTF WEB 上传绕过
  3. Hessian序列化复杂对象
  4. Linux下设置普通用户使用sudo命令
  5. mysql 加密 en_以极少的停机时间加密运行 MySQL 或 MariaDB 的 Amazon RDS 数据库实例...
  6. Python中的json.dumps()和json.loads()函数
  7. Zookeeper-01-概述
  8. 作为程序员,起码要知道的 Python 修饰器!
  9. 18. PHP 表单验证
  10. VirtualBox-5.2.44的安装
  11. 用 python+tkinter+有道云API 写一个自用的背单词软件
  12. python输入一个正整数_Python题目解答:输入一个整数N,输出N的所有最小因子
  13. 浅析GPU计算——CPU和GPU的选择
  14. 【渝粤题库】广东开放大学 基础会计 形成性考核
  15. 几种常见的概率统计谬误
  16. 汉诺塔问题(递归算法思想)
  17. 【教学类-17-02】20221125《世界杯七巧板A4整页-随机参考图七巧板 3份一页》(大班)
  18. 手游代理怎么做?看看这些就知道了
  19. 2020年广东工业大学第十届文远知行杯新生程序设计竞赛(同步赛)G- 排解忧伤
  20. PyQt(Python+Qt)学习随笔:Qt Designer中怎么给toolBar添加按钮

热门文章

  1. 临床数据行业职位一览表
  2. 学生成绩管理系统 java+mysql中
  3. 企业服务平台如何帮助创业者投融资对接?
  4. DeFi 玩家收益农耕的五种形式
  5. Unity实现3D贪吃蛇的移动,吃食功能
  6. 如何用Python打印1000以内的斐波那契数列?
  7. 通讯行业采购管理平台使用电子签章,推动采购合同电子化
  8. 入门制作游戏模型,应该注意些什么问题呢?
  9. Elasticsearch学习指南(计划长期更新)
  10. android svg 文字,小程序内嵌网页中的svg文字元素会被部分android手机渲染成黑色?...