一、实验目的
1、掌握各个内置对象的含义;
2、理解并熟练应用session、application对象。
二、实验内容
1、设计聊天室,在聊天室中,需要通过JSP内置对象application来实时保存特定数量的当前聊天信息。
聊天室的设计包括:用户进行登录,选择聊天室,进行聊天,退出聊天室。在聊天室中,用户只需输入一个用户名就可以进入聊天室,但是如果当前有人在使用该用户名,那么就必须换一个唯一的用户名。
具体要求:
n 用户登录成功后,程序会要求用户选择聊天室。可以不设置用户自行建立聊天室的功能,而且在聊天中途不能从一个聊天室切换到另一个聊天室。
n 进入聊天室后,用户可以从用户信息窗口看到该聊天室中所有用户的用户名,也可以在聊天窗口中看到随时更新的聊天信息。用户可以给所有人或某一个聊天用户发送公共的聊天信息,这个聊天内容大家都可以看到。用户也可以给某个用户发送私人的聊天信息,这种信息属于私聊信息,只有发送者和接收者可以看到。此外,聊天窗口还会出现一些系统公告,比如某某上站、某某离开等消息,另外用户还可以自己定义聊天信息和聊天用户信息刷新的时间间隔。
n 在用户单击“退出”按钮后,页面关闭,同时application和session中保存的信息都将丢失。
三、实验方法
1、用户登录信息使用request对象getParameter()方法得到用户登陆的一些信息;
2、公聊信息可以使用application对象,私聊信息使用session对象。
3、聊天的信息要不断刷新页面,使用户实时看到聊天信息。
4、用户退出时,有两种情况需要考虑:一是用户点击“退出”按钮,二是关闭浏览器,强制退出窗口,可查阅windows感知浏览器关闭的事件的相应方法。
四、实验学时:6学时
五、实验代码
1、登录界面:login.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>title</title> <style type="text/css"> table { background: url(image/1.jpg) no-repeat; } </style> <script language="javascript"> function check() { if (document.form.username.value == '') { alert("用户昵称不能为空!"); document.form.username.focus(); return false; } else return true; } </script> </head> <% request.setCharacterEncoding("utf-8"); %> <body> <form action="login_check.jsp" method="post" name="form" onSubmit="return check()"> <table align="center" cellpadding="0" cellspacing="0" border="0" width="500"> <tr> <td height="100" colspan="2" style="font-size: 30px; font-weight: bold;" align="center"> 用户登录 </td> </tr> <tr> <td width="180" align="right" height="30">用户名:</td> <td><input type="text" name="username"></td> </tr> <tr> <td colspan="2" align="center" height="30"><input type="submit" value="登录"> <input type="reset" value="取消"></td> </tr> <tr> <td height="50" align="center" colspan="2" style="color: red"> 无须注册,直接登录。 </td> </tr> </table> </form> </body> </html>
2、登录检查 login_check.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ page import="java.util.*"%> <%@page import="java.util.ArrayList"%> <%@page import="java.util.List"%> <%@page import="java.text.SimpleDateFormat"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>聊天用户登录</title> </head> <body> <% request.setCharacterEncoding("utf-8"); %> <%! List<String> list=new ArrayList<String>();%> <% //获取用户昵称 String username = request.getParameter("username"); //记录登录时间 for(int i=0;i<list.size();i++){ if(username.equals(list.get(i))){ %> <jsp:forward page="login.jsp"></jsp:forward> <% } } Date d = new Date(); SimpleDateFormat format=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); String dd=format.format(d); session.setAttribute("loginDate", dd); //登录成功将昵称保存到session中 session.setAttribute("name",username); list.add(username); //登录成功将昵称保存list中 application.setAttribute("username",list); //转到聊天室选择页面 response.sendRedirect("chatroom.jsp"); %> </body> </html>
3、聊天室chatroom.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ page import="java.util.*"%> <%@page import="java.text.SimpleDateFormat"%> <%@page import="java.util.ArrayList"%> <%@page import="java.util.List"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>网页聊天室</title> <style type="text/css"> #header { background-color:black; color:white; text-align:center; padding:5px; } #left { line-height:30px; background-color:#eeeeee; height:400px; width:300px; float:left; padding:5px; } #middle { width:350px; float:left; padding:10px; } #footer { background-color:#FFD700; color:white; clear:both; text-align:center; padding:50px; } </style> </head> <script type="text/javascript"> function reset() { window.location.reload(); } </script> <body> <%request.setCharacterEncoding("utf-8");%> <% /*获取聊天时间*/ Date data=new Date(); SimpleDateFormat format=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); String dd=format.format(data); String name=(String) session.getAttribute("name"); String loginDate = session.getAttribute("loginDate").toString(); Date logintime = format.parse(loginDate); response.setHeader("refresh", "20"); %> <%! List<String> sllist = new ArrayList<String>(); List<String> qllist = new ArrayList<String>(); %> <% try { String liaotian = request.getParameter("lt"); if (liaotian.equals("siliao")) { //私聊 String sln = request.getParameter("slname"); sllist.add(name + "#对#" + sln + "#说:"+ request.getParameter("chatcontent") + " "+ dd); } else { //群聊 qllist.add(name + ":#" + request.getParameter("chatcontent") + "#"+ dd); } } catch (Exception e) { } session.setAttribute("siliao", sllist); application.setAttribute("qunliao", qllist); %> <!--某某上线--> <div id="header"> <%=name+"上线" %> </div> <!--在线人数--> <div id="left"> <% List<String> Oluser = (List) application.getAttribute("username");%> 在线人数:<%=Oluser.size() %><br> 在线用户:<br> <% for (int i = 0; i < Oluser.size(); i++) { %> <%=Oluser.get(i)%> <br> <% } %> </div> <!--聊天信息界面--> <div id="middle"> <%try{ List<String> list1 = (List<String>) session.getAttribute("siliao"); if (list1 == null || list1.isEmpty()) { } else { for (int i = 0; i < list1.size(); i++) { String[] sp = list1.get(i).split("#"); if (sp[0].equals(name)||sp[2].equals(name)) { out.print(sp[0] + sp[1] + sp[2]+sp[3]); %> <br> <% } } } } catch(Exception e){ } %> <% List<String> list = (List) application.getAttribute("qunliao"); if (list == null) { out.print("欢迎来到聊天室!"); } else { for (int i = 0; i < list.size(); i++) { String[] sp = list.get(i).split("#"); Date time1 = format.parse(sp[2]); if (logintime.getTime() <= time1.getTime()) {%> <%= sp[0]+ " " %> <input type="text" value="<%= sp[1]%>" style="background-color: blue;"> <%= " "+ format.format(time1) %><br> <% } } } %> </div> <!--选择聊天方式--> <div id="footer"> <table align="center"> <form action="chatroom.jsp" method="post"> <td> <textarea name=chatcontent rows="1" cols="15" > </textarea> </td> <td> <input type="radio" name="lt" value="qunliao">群聊 <input type="radio" name="lt" value="siliao">私聊 <select name="slname" > <option selected="selected" ></option> <% for (int i = 0; i < Oluser.size(); i++) { %> <option><%=Oluser.get(i)%></option> <% } %> </select> </td> <td> <input TYPE="submit" name="submit" VALUE="发送"> </td> <td> <input type="reset" name="sx" value="刷新/重置" onclick="reset();"> </td> <td> <a href="leave.jsp?name1=<%=session.getAttribute("name").toString()%>" target="_parent" ">退出</a> </td> </form> </table> </div> </body> </html>
4、退出leave.jsp
<%@page import="java.util.ArrayList"%> <%@page import="java.util.Iterator"%> <%@page import="java.util.List"%> <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>聊天室退出</title> </head> <body> 成功退出! <% String name1 = request.getParameter("name1"); Object name2 = (Object) name1; List<String> list = (List) application.getAttribute("username"); list.remove(name2); %> <a href="login.jsp">请重新登录</a> </body> </html>
5、登录界面
6、聊天室
7、退出界面