转载请注明出处:http://blog.youkuaiyun.com/lindonglian/article/details/40158985
此聊天室用Servlet和jsp实现,功能包含统计在线人数,查看在线用户,上传文件,显示用户聊天记录。还有待改动的地方,适合入门。
project文件包含login.jsp,main.jsp,display.jsp,sponse.jsp,shangchuan.jsp,sc.jsp,userlist.jsp
统计在线人数用到servlet监听器userlistener.java
package listener;
import java.util.ArrayList;
import javax.servlet.ServletContext;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import javax.servlet.http.HttpSessionAttributeListener;
import javax.servlet.http.HttpSessionBindingEvent;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;
public class userlistener implements ServletContextListener,HttpSessionAttributeListener,HttpSessionListener{
ServletContext app=null;
@Override
public void sessionCreated(HttpSessionEvent se) {
// TODO Auto-generated method stub
Integer num=(Integer)app.getAttribute("onlinecount");
app.setAttribute("onlinecount", num+1);
String user=(String) se.getSession().getAttribute("username");
ArrayList<String> ar=(ArrayList<String>)app.getAttribute("name");
ar.add(user);
app.setAttribute("name", ar);
}
@Override
public void sessionDestroyed(HttpSessionEvent se) {
// TODO Auto-generated method stub
Integer num=(Integer)app.getAttribute("onlinecount");
app.setAttribute("onlinecount", num-1);
ArrayList<String> ar=(ArrayList<String>)app.getAttribute("name");
String user=(String) se.getSession().getAttribute("username");
ar.remove(user);
app.setAttribute("name", ar);
}
@Override
public void attributeAdded(HttpSessionBindingEvent se) {
// TODO Auto-generated method stub
ArrayList<String> array=(ArrayList<String>)app.getAttribute("name");
String user=(String)se.getValue();
array.add(user);
}
@Override
public void attributeRemoved(HttpSessionBindingEvent se) {
// TODO Auto-generated method stub
ArrayList<String> array=(ArrayList<String>)app.getAttribute("name");
String user=(String)se.getValue();
array.remove(user);
}
@Override
public void attributeReplaced(HttpSessionBindingEvent event) {
// TODO Auto-generated method stub
}
@Override
public void contextDestroyed(ServletContextEvent arg0) {
// TODO Auto-generated method stub
app.removeAttribute("name");
app.setAttribute("onlinecount", 0);
}
@Override
public void contextInitialized(ServletContextEvent sce) {
// TODO Auto-generated method stub
ArrayList<String> array=new ArrayList<String>();
app=sce.getServletContext();
app.setAttribute("name",array);
app.setAttribute("onlinecount", 0);
}
}
登录界面
login.jsp
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%@ page import="listener.userlistener" %>
<html>
<head>
<title>My JSP 'login.jsp' starting page</title>
</head>
<body bgcolor="green">
<%
request.setCharacterEncoding("gb2312");
response.setContentType("text/html;charset=gb2312");
%>
<center>
<h5>欢迎来到聊天室</h5>
<h1>艳子茶訪</h1>
<form action="main.jsp" method="post">
<table>
<tr>
<td>用户名</td>
<td><input type="text" name="username"></td>
</tr>
<tr>
<td>密码</td>
<td><input type="password" name="mima"></td>
</tr>
</table>
<tr>
<td><input type="submit" value="登录"></td>
<td><input type="reset" value="取消"></td>
</tr>
</form>
</center>
</body>
</html>
聊天室界面
此页面由两个框架组成
main.jsp
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%
request.setCharacterEncoding("gb2312");
response.setContentType("text/html;charset=gb2312");
%>
<html>
<head>
<title>聊天主页面</title>
</head>
<%
application.setAttribute("message", "");
String na=request.getParameter("username");
session.setAttribute("username", na);
%>
<frameset rows="*,100" frameborder="no">
<frame src=display.jsp name=display frameborder="no" scrolling="auto">
<frame src=sponse.jsp name=sponse frameborder="no">
</frameset>
<noframes></noframes>
</html>
上半部分的display.jsp
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%@ page import="listener.userlistener" %>
<%
response.setHeader("refresh","5");
%>
<html>
<head>
<title>My JSP 'display.jsp' starting page</title>
</head>
<body bgcolor=green>
<%
request.setCharacterEncoding("gb2312");
response.setContentType("text/html;charset=gb2312");
%>
<form action="" method="post">
<p align="center"><font size=5>聊天记录</font></p>
<p align="right"><font size=2>眼下在线人数:<%=application.getAttribute("onlinecount") %></font></p>
<hr>
<%
String str=application.getAttribute("message").toString();
if(!str.equals("")&&str!=null){
out.print(str);
}
%>
</form>
</body>
</html>
下半部分的sponse.jsp
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<html>
<head>
<title>My JSP 'sponse.jsp' starting page</title>
<script language="javaScript">
function qinkong(){
application.removeAttribute("message");
}
</script>
</head>
<body bgcolor=green>
<%
request.setCharacterEncoding("gb2312");
response.setContentType("text/html;charset=gb2312");
%>
<form action="" method="post">
<p align="center">
我要发言:
<input type="text" name="message" size="70">
<input type="submit" value="发送">
<input type="reset" value="清除">
</p>
<p align="center">
<a href="shangchuan.jsp">上传文件</a>
<a href="userlist.jsp">查看在线用户</a>
<input type="submit" value="清空聊天记录" onclick="qinkong()">
</p>
</form>
<%
String user=(String)session.getAttribute("username");
String father=(String)application.getAttribute("message");
String son=request.getParameter("message");
application.setAttribute("check", son);
if(son!=null&&!son.equals("")&&user!=null&&father!=null){
application.setAttribute("message",father+user+"说: "+son+"<br>");
}
%>
</body>
</html>
上传文件页面
实现上传功能须要用到jspSmartUpload.jar包
免积分jspSmartUpload下载:http://download.youkuaiyun.com/detail/u011731233/8048011
shangchuan.jsp
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<html>
<head>
<title>文件上传</title>
</head>
<body bgcolor=green>
<p align="center">请选择你要上传的文件</p>
<form action="sc.jsp" method="post" enctype="multipart/form-data">
<input type="hidden" name="TEST" value="good">
<table border="0" align="center">
<tr>
<td><div align="center">
<input type="FILE" name="FILE1" size="30">
</div></td>
</tr>
<tr>
<td><div align="center">
<input type="submit" name="Submit" value="開始上传">
<a href="display.jsp">返回</a>
</div></td>
</tr>
</table>
</form>
</body>
</html>
上传一个shang.txt文件到project文件夹mulu成功后的处理页面
sc.jsp
<%@ page language="java" import="java.sql.*"
contentType="text/html;charset=gb2312" errorPage=""%>
<%@ page import="com.jspsmart.upload.*" %>
<jsp:useBean id="SU" scope="page" class="com.jspsmart.upload.SmartUpload"/>
<html>
<head>
<title>上传文件</title>
<meta http-equiv="Content-Type" content="text/html;charset=2312">
</head>
<body bgcolor=green>
<%
try{
SU.initialize(pageContext);
SU.service(request, response);
SU.upload();
String fn=SU.getFiles().getFile(0).getFileName();
SU.save("mulu/");
out.println("<br>上传成功查看<a href=mulu/"+fn+">mulu/"+fn+"文件</a>");
}
catch(Exception ex)
{
ex.printStackTrace();
}
%>
<br>
<a href="sponse.jsp">返回</a>
</body>
</html>
查看用户列表
uselist.jsp
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<html>
<head>
<title>My JSP 'userlist.jsp' starting page</title>
</head>
<body bgcolor=green>
<center>
<h3>用户列表</h3>
<%
ArrayList<String> array=(ArrayList<String>)application.getAttribute("name");
Iterator<String> it=array.iterator();
while(it.hasNext()){
String str=it.next();
out.print("**"+it.next()+"**"+" ");
}
%>
<br>
<a href="sponse.jsp">返回</a>
</center>
</body>
</html>