轉載請註明出處:http://blog.csdn.net/lindonglian/article/details/40158985
html
此聊天室用Servlet和jsp實現,功能包含統計在線人數,查看在線用戶,上傳文件,顯示用戶聊天記錄。還有待改動的地方,適合入門。java
project文件包含login.jsp,main.jsp,display.jsp,sponse.jsp,shangchuan.jsp,sc.jsp,userlist.jspsql
統計在線人數用到servlet監聽器userlistener.javasession
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); } }
登陸界面app
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>聊天室界面
此頁面由兩個框架組成jsp
main.jspide
<%@ 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>
<%@ 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包post
免積分jspSmartUpload下載:http://download.csdn.net/detail/u011731233/8048011
ui
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>