一、实验目的
1、掌握各个内置对象的含义;
2、理解并熟练应用session、application对象。
二、实验内容
1、设计聊天室,在聊天室中,需要通过JSP内置对象application来实时保存特定数量的当前聊天信息。
聊天室的设计包括:用户进行登录,选择聊天室,进行聊天,退出聊天室。在聊天室中,用户只需输入一个用户名就可以进入聊天室,但是如果当前有人在使用该用户名,那么就必须换一个唯一的用户名。
具体要求:
n 用户登录成功后,程序会要求用户选择聊天室。可以不设置用户自行建立聊天室的功能,而且在聊天中途不能从一个聊天室切换到另一个聊天室。
n 进入聊天室后,用户可以从用户信息窗口看到该聊天室中所有用户的用户名,也可以在聊天窗口中看到随时更新的聊天信息。用户可以给所有人或某一个聊天用户发送公共的聊天信息,这个聊天内容大家都可以看到。用户也可以给某个用户发送私人的聊天信息,这种信息属于私聊信息,只有发送者和接收者可以看到。此外,聊天窗口还会出现一些系统公告,比如某某上站、某某离开等消息,另外用户还可以自己定义聊天信息和聊天用户信息刷新的时间间隔。
n 在用户单击“退出”按钮后,页面关闭,同时application和session中保存的信息都将丢失。
三、实验方法
1、用户登录信息使用request对象getParameter()方法得到用户登陆的一些信息;
2、公聊信息可以使用application对象,私聊信息使用session对象。
3、聊天的信息要不断刷新页面,使用户实时看到聊天信息。
4、用户退出时,有两种情况需要考虑:一是用户点击“退出”按钮,二是关闭浏览器,强制退出窗口,可查阅windows感知浏览器关闭的事件的相应方法。
<%@ 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>
<%@ 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>
<%@ 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="刷新/重置" οnclick="reset();">
</td>
<td>
<a href="leave.jsp?name1=<%=session.getAttribute("name").toString()%>"
target="_parent" ">退出</a>
</td>
</form>
</table>
</div>
</body>
</html>
<%@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>