實驗一 Servlet編程
一.實驗目的
1.熟悉Java EE編程環境JDK和NetBeans的安裝,配置和使用;
2.掌握Servlet的編寫及部署;
3.掌握Servlet的工作原理和編程接口;
4.掌握Servlet中客戶端輸入數據處理技術;
5.掌握Servlet中的會話跟蹤技術;
6.掌握Servlet中的請求指派技術;
7.掌握Servlet上下文屬性的使用方法;
8.掌握Servlet中Filter基本編程技術;
9.掌握Servlet中Listener基本編程技術;
二.實驗內容利用JavaEE相關技術實現一個簡單的Web聊天室系統,具體要求如下。
(1)編寫一個登錄頁面,登錄信息中有用戶名和密碼,分別用兩個按鈕來提交和重置登錄信息。
(2)編寫一個Servlet程序Main.java通過請求指派來處理用戶提交的登錄信息,如果用戶名為本小組成員的名字且密碼為對應的學號時,跳轉到LoginSuccess顯示聊天界面(類似於QQ群聊天界面,可使用HTML中的frameset標簽生成兩個窗口,一個用來實現用戶信息輸入,另一個顯示所有用戶聊天記錄的);否則跳轉到LoginFail頁面,提示用戶重新登錄(注:此頁面要包含前面的登錄界面)。
(3)編寫兩個Servlet程序,分別用來顯示“信息輸入”窗口和“聊天記錄顯示”窗口的內容;用戶在“信息輸入”窗口中鍵入聊天內容,點擊“發送”按鈕后,在“聊天記錄顯示”窗口中顯示發送消息的用戶名稱和聊天內容。提示:利用HTML中的textarea標簽來實現。
(4)在登錄界面上實現記住用戶名和密碼的功能,使得當用戶選擇了此功能並成功登錄后,在其下次登錄時可以不用再輸入用戶名和密碼即可登錄。提示:此功能可通過兩個Cookie來實現。
以下功能選做:
(5)編寫一個Listener程序來監聽會話的創建和銷毀事件,以此統計當前在線(登錄)人數,並將其顯示在聊天界面上。
(6)添加一個Filter對本系統所有的Servlet程序進行過濾,該Filter實現對請求和響應對象的編碼格式的設置(實現此功能后,Servlet可以直接從請求對象中獲取參數信息而無需實現對請求進行格式的編碼)。在【GlassFish Server】視圖中輸出程序在Filter和其它資源之間的執行順序。
本次例子重在思路,頁面未做任何美化。關於包文件的引用一定要注意,Servlet需要引入相應的包文件才能運行,一般IDE都會自動創建引入,這里不做解釋
1.首先,需要一個登陸頁面。LoginServlet
1 package com.jun.servlet; 2 3 import java.io.IOException; 4 import java.io.PrintWriter; 5 6 import javax.servlet.ServletException; 7 import javax.servlet.annotation.WebServlet; 8 import javax.servlet.http.Cookie; 9 import javax.servlet.http.HttpServlet; 10 import javax.servlet.http.HttpServletRequest; 11 import javax.servlet.http.HttpServletResponse; 12 13 /** 14 * Servlet implementation class LoginServlet 15 */ 16 @WebServlet("/LoginServlet") 17 public class LoginServlet extends HttpServlet { 18 private static final long serialVersionUID = 1L; 19 20 /** 21 * @see HttpServlet#HttpServlet() 22 */ 23 public LoginServlet() { 24 super(); 25 // TODO Auto-generated constructor stub 26 } 27 28 /** 29 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) 30 */ 31 protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 32 Cookie[] cookies = request.getCookies();//獲取cookie對象 33 String uname = ""; 34 String upwd = ""; 35 if (cookies != null) { 36 for (int i = 0; i < cookies.length; i++) { 37 Cookie cookie = cookies[i]; 38 if (cookie.getName().equals("remname")) { 39 uname = cookie.getValue(); 40 } else if (cookie.getName().equals("rempwd")) { 41 upwd = cookie.getValue(); 42 } 43 } 44 } 45 //上面代碼用來判斷用戶是否曾保存過登陸信息 46 47 48 response.setContentType("text/html;charset=utf-8"); 49 request.setCharacterEncoding("utf-8"); 50 PrintWriter out = response.getWriter(); 51 out.println("<html><head><title>登陸界面</title>"); 52 out.println("<body>"); 53 out.println("<div>"); 54 out.println("<form action='Main' method='post'"); 55 out.println("<p>用戶名:<input type='text' name='username' value=" +uname+ "></p>"); 56 out.println("<p>密 碼:<input type='password' name='password' value=" +upwd+ "></p>"); 57 out.println("<p>記住密碼:<input type='checkbox' name='remember' value='true'>"); 58 out.println("<input type='submit' name='submit' value='登陸'>"); 59 out.println("<input type='reset' name='reset' value='重置'></p>"); 60 out.println("</div>"); 61 out.println("</body></html>"); 62 } 63 64 /** 65 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) 66 */ 67 protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 68 // TODO Auto-generated method stub 69 } 70 71 }
2.新建一個用來處理登錄信息的Servlet: Main.java 所有的處理都在DoPost()完成
1 package com.jun.servlet; 2 3 import java.io.IOException; 4 import java.io.PrintWriter; 5 6 import javax.servlet.ServletException; 7 import javax.servlet.annotation.WebServlet; 8 import javax.servlet.http.Cookie; 9 import javax.servlet.http.HttpServlet; 10 import javax.servlet.http.HttpServletRequest; 11 import javax.servlet.http.HttpServletResponse; 12 import javax.servlet.http.HttpSession; 13 14 /** 15 * Servlet implementation class Main 16 */ 17 @WebServlet(name = "Main", urlPatterns = { "/Main" }) 18 public class Main extends HttpServlet { 19 private static final long serialVersionUID = 1L; 20 21 /** 22 * @see HttpServlet#HttpServlet() 23 */ 24 public Main() { 25 super(); 26 // TODO Auto-generated constructor stub 27 } 28 29 /** 30 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse 31 * response) 32 */ 33 protected void doGet(HttpServletRequest request, 34 HttpServletResponse response) throws ServletException, IOException { 35 } 36 37 /** 38 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse 39 * response) 40 */ 41 protected void doPost(HttpServletRequest request, 42 HttpServletResponse response) throws ServletException, IOException { 43 response.setContentType("text/html;charset=utf-8"); 44 String username, password, remember; 45 HttpSession session = request.getSession(true);//開啟會話 46 47 username = (String) request.getParameter("username"); 48 password = (String) request.getParameter("password"); 49 remember = (String) request.getParameter("remember"); 50 //在控制台中輸出,方便審查 51 System.out.println("remember:" + remember); 52 System.out.println(username); 53 System.out.println(password); 54 55 if (username != null && username.equals("201321091103") && password.equals("123456")) { 56 if (remember != null && remember.equals("true")) { 57 Cookie cookie1 = new Cookie("remname", username); 58 Cookie cookie2 = new Cookie("rempwd", password); 59 cookie1.setMaxAge(60 * 60 * 24 * 7); 60 cookie2.setMaxAge(60 * 60 * 24 * 7); 61 62 63 response.addCookie(cookie1); 64 response.addCookie(cookie2); 65 } 66 session.setAttribute("UserName", username); 67 session.setAttribute("IsLogin", "true"); 68 response.sendRedirect("LoginSuccessServlet");//用sendRedirect實現頁面完全跳轉 69 } else if (username != null && username.equals("201321091104") && password.equals("654321")) { 70 if (remember != null && remember.equals("true")) {//當用戶勾選記住密碼功能時,將密碼返回給客戶端保存,下次訪問的時候先從客戶端獲取密碼,這樣就實現了記住密碼功能 71 Cookie cookie1 = new Cookie("remname", username); 72 Cookie cookie2 = new Cookie("rempwd", password); 73 cookie1.setMaxAge(60 * 60 * 24 * 7); 74 cookie2.setMaxAge(60 * 60 * 24 * 7); 75 response.addCookie(cookie1); 76 response.addCookie(cookie2); 77 } 78 session.setAttribute("UserName", username); 79 session.setAttribute("IsLogin", "true"); 80 response.sendRedirect("LoginSuccessServlet"); 81 } else { 82 session.setAttribute("IsLogin", "false"); 83 response.sendRedirect("LoginFail.html");//頁面完全跳轉,不會出現亂碼 84 } 85 } 86 87 }
3.登陸成功,就實現頁面跳轉 LoginSuccessServlet
1 package com.jun.servlet; 2 3 import java.io.IOException; 4 import java.io.PrintWriter; 5 6 import javax.servlet.ServletException; 7 import javax.servlet.annotation.WebServlet; 8 import javax.servlet.http.HttpServlet; 9 import javax.servlet.http.HttpServletRequest; 10 import javax.servlet.http.HttpServletResponse; 11 //import javax.servlet.http.HttpSession; 12 import javax.servlet.http.HttpSession; 13 14 /** 15 * Servlet implementation class LoginSuccessServlet 16 */ 17 @WebServlet("/LoginSuccessServlet") 18 public class LoginSuccessServlet extends HttpServlet { 19 private static final long serialVersionUID = 1L; 20 21 /** 22 * @see HttpServlet#HttpServlet() 23 */ 24 public LoginSuccessServlet() { 25 super(); 26 // TODO Auto-generated constructor stub 27 } 28 29 /** 30 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse 31 * response) 32 */ 33 protected void doGet(HttpServletRequest request, 34 HttpServletResponse response) throws ServletException, IOException { 35 response.setContentType("text/html;charset=utf-8"); 36 request.setCharacterEncoding("utf-8"); 37 HttpSession session = request.getSession();// 38 String username = ""; 39 if (session.getAttribute("UserName") != null) { 40 username = session.getAttribute("UserName").toString(); 41 } 42 51 PrintWriter out = response.getWriter(); 52 out.println("<html><head><title>聊天室</title>"); 53 out.println("<style type='text/css'>#iframe1{width:600px;height:200px;}iframe{width:600px;height:200px;margin-bottom:20px;}</style>"); 54 out.println("</head>"); 55 out.println("<center><h2><b>歡迎使用聊天系統</b></h2>"); 56 out.println("<lable>當前用戶:" + username 57 + "</lable><a href=\"LoginOut\"> 退出登錄</a><br>"); 58 out.println("<iframe src='Messagebox' id='iframe1'></iframe>"); 59 out.println("<br>"); 60 out.println("<iframe src='Talk'></iframe><br>"); 61 /*out.println("<frameset rows=\"50%,25%\">"); 62 out.println("<frame name=\"message\" src=\"Messagebox\" />"); 63 out.println("<frame name=\"uinput\" src=\"Talk\"/>"); 64 out.println("</frameset>"); 65 */ 66 out.println("</body></html>"); 67 68 } 69 70 /** 71 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse 72 * response) 73 */ 74 protected void doPost(HttpServletRequest request, 75 HttpServletResponse response) throws ServletException, IOException { 76 // TODO Auto-generated method stub 77 78 } 79 80 }
4.登錄失敗,跳轉到失敗頁面
LoginFail.html
1 <!DOCTYPE html> 2 <html> 3 <head> 4 <meta charset="UTF-8"> 5 <title>Insert title here</title> 6 <meta http-equiv="refresh" content ="3;url=LoginServlet"> 7 </head> 8 <body> 9 <b>呦呦呦,登陸失敗了喲,3秒后跳轉到登錄頁重新登陸喲! <a href="LoginServlet">點擊此處直接跳轉</a></b> 10 </body> 11 </html>
5.登錄成功的頁面中用frame嵌入了兩個頁面,分別顯示用戶的信息輸入(Talk)和顯示(Messagebox)。
下面為Talk的頁面
1 package com.jun.servlet; 2 3 import java.io.IOException; 4 import java.io.PrintWriter; 5 import java.text.SimpleDateFormat; 6 import java.util.Date; 7 8 import javax.servlet.ServletContext; 9 import javax.servlet.ServletException; 10 import javax.servlet.annotation.WebServlet; 11 import javax.servlet.http.HttpServlet; 12 import javax.servlet.http.HttpServletRequest; 13 import javax.servlet.http.HttpServletResponse; 14 import javax.servlet.http.HttpSession; 15 16 /** 17 * Servlet implementation class Talk 18 */ 19 @WebServlet("/Talk") 20 public class Talk extends HttpServlet { 21 private static final long serialVersionUID = 1L; 22 23 /** 24 * @see HttpServlet#HttpServlet() 25 */ 26 public Talk() { 27 super(); 28 // TODO Auto-generated constructor stub 29 } 30 31 /** 32 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse 33 * response) 34 */ 35 protected void doGet(HttpServletRequest request, 36 HttpServletResponse response) throws ServletException, IOException { 37 response.setContentType("text/html;charset=utf-8"); 38 request.setCharacterEncoding("utf-8"); 39 PrintWriter out = response.getWriter(); 40 HttpSession session = request.getSession(); 41 String username = (String) session.getAttribute("UserName");// 將獲取的對象強制類型轉換為字符串 42 43 out.println("<html><body>"); 44 out.println("<lable>當前用戶:" + username + "</lable><br>"); 45 out.println("<form action=\"Talk\" method=\"post\">"); 46 out.println("<div><textarea name=\"userMessages\" cols=\"50\" style=\"height:100px;\"></textarea></div>"); 47 out.println("<div><input type=\"submit\" id=\"submit\" value=\"發送\"/>"); 48 out.println("<input type=\"reset\" id=\"reset\" value=\"清空輸入\"/></div>"); 49 out.println("</form>"); 50 out.println("</body></html>"); 51 } 52 53 /** 54 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse 55 * response) 56 */ 57 protected void doPost(HttpServletRequest request, 58 HttpServletResponse response) throws ServletException, IOException { 59 response.setContentType("text/html;charset=utf-8"); 60 request.setCharacterEncoding("utf-8"); 61 HttpSession session = request.getSession(); 62 ServletContext application = this.getServletContext();// 獲取上下文信息 63 64 SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");// 日期格式 65 Date currentTime = new Date();// 得到當前的系統時間 66 String str_date1 = formatter.format(currentTime);// 將日期時間格式化 str_date1 67 String username = (String) session.getAttribute("UserName");// 將獲取的對象強制類型轉換為字符串 68 69 PrintWriter out = response.getWriter(); 70 71 String mywords = request.getParameter("userMessages");// 獲取提交信息的內容 72 // mywords 73 application.log(mywords);// 在控制台中將提交的內容顯示出來 74 if (mywords == null) { 75 mywords = "系統提示:可以聊天"; 76 application.setAttribute("words", mywords + "\n"); 77 } else if (mywords != null) { 78 // int len_mywords = mywords.length(); 79 // application.log("字節長度:"+len_mywords); 80 mywords = username + ":" + mywords + ":" + str_date1;// 給內容添上其他信息。 81 application.log(mywords);//在控制台信息中查看內容 82 Object obj = application.getAttribute("words");// 上下文獲取 的都是一個對象 83 if (obj == null) { 84 application.setAttribute("words", mywords + "\n");// 設置成全局變量 85 } else { 86 application.setAttribute("words", obj.toString() + mywords 87 + "\n");// 當獲取的上下文對象不為空時,需要將前面的信息也顯示出來 88 } 89 } 90 91 out.println("<html><body>"); 92 out.println("<lable>當前用戶:" + username + "</lable><br>"); 93 out.println("<form action=\"Talk\" method=\"post\">"); 94 out.println("<div><textarea name=\"userMessages\" cols=\"50\" style=\"height:100px;\"></textarea></div>"); 95 out.println("<div><input type=\"submit\" id=\"submit\" value=\"發送\"/>"); 96 out.println("<input type=\"reset\" id=\"reset\" value=\"清空輸入\"/></div>"); 97 out.println("</form>"); 98 out.println("</body></html>"); 99 100 } 101 102 }
6.Messagebox的頁面
1 package com.jun.servlet; 2 3 import java.io.IOException; 4 import java.io.PrintWriter; 5 6 import javax.servlet.ServletContext; 7 import javax.servlet.ServletException; 8 import javax.servlet.annotation.WebServlet; 9 import javax.servlet.http.HttpServlet; 10 import javax.servlet.http.HttpServletRequest; 11 import javax.servlet.http.HttpServletResponse; 12 import javax.servlet.http.HttpSession; 13 14 /** 15 * Servlet implementation class Messagebox 16 */ 17 @WebServlet("/Messagebox") 18 public class Messagebox extends HttpServlet { 19 private static final long serialVersionUID = 1L; 20 21 protected void processRequest(HttpServletRequest request, 22 HttpServletResponse response) throws ServletException, IOException { 23 response.setContentType("text/html;charset=UTF-8"); 24 request.setCharacterEncoding("UTF-8"); 25 PrintWriter out = response.getWriter(); 26 try { 27 28 String temp = (String) getServletConfig().getServletContext() 29 .getAttribute("online"); 30 if (temp == null) 31 temp = "0"; 32 ServletContext application = this.getServletContext();// 獲取上下文信息 33 String words = (String) application.getAttribute("words");//上寫文獲取的變量都是對象,因此要進行強制類型轉換之后才能使用 34 35 out.println("<html>"); 36 out.println("<head>"); 37 out.println("<title>Servlet messagebox</title>"); 38 out.println("<meta http-equiv=\"refresh\" content =\"2;url=Messagebox\">"); 39 out.println("</head>"); 40 out.println("<body>"); 41 out.println("<p>當前在線:"); 42 out.println(temp); 43 out.println("人</p>"); 44 out.println("<textarea name=\"messagebox\" cols=\"100\" words=\"400\" style=\"height:400px;\">"); 45 out.println(words); 46 out.println("</textarea>"); 47 out.println("</body>"); 48 out.println("</html>"); 49 } finally { 50 out.close(); 51 } 52 } 53 54 @Override 55 protected void doGet(HttpServletRequest request, 56 HttpServletResponse response) throws ServletException, IOException { 57 processRequest(request, response); 58 } 59 60 61 @Override 62 protected void doPost(HttpServletRequest request, 63 HttpServletResponse response) throws ServletException, IOException { 64 processRequest(request, response); 65 } 66 67 68 @Override 69 public String getServletInfo() { 70 return "Short description"; 71 }// </editor-fold> 72 73 }
7。用戶點擊退出之后,調用LoginOut.代碼如下
1 package com.jun.servlet; 2 3 import java.io.IOException; 4 import java.io.PrintWriter; 5 6 import javax.servlet.ServletException; 7 import javax.servlet.annotation.WebServlet; 8 import javax.servlet.http.HttpServlet; 9 import javax.servlet.http.HttpServletRequest; 10 import javax.servlet.http.HttpServletResponse; 11 import javax.servlet.http.HttpSession; 12 13 /** 14 * Servlet implementation class LoginOut 15 */ 16 @WebServlet("/LoginOut") 17 public class LoginOut extends HttpServlet { 18 private static final long serialVersionUID = 1L; 19 20 /** 21 * @see HttpServlet#HttpServlet() 22 */ 23 public LoginOut() { 24 super(); 25 // TODO Auto-generated constructor stub 26 } 27 28 /** 29 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) 30 */ 31 protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 32 HttpSession session = request.getSession(); 33 session.removeAttribute("UserName"); 34 //session.setAttribute("IsLogin", "false"); 35 PrintWriter out = response.getWriter(); 36 /*response.setContentType("text/html;charset=utf-8"); 37 request.setCharacterEncoding("utf-8");*/ 38 39 out.println("<html><head><title>注銷登陸</title>"); 40 out.println("<meta http-equiv=\"refresh\" content =\"1;url=LoginServlet\"></head>"); 41 out.println("<body>bye-----bye!!!!</body>"); 42 out.println("</html>"); 43 } 44 45 /** 46 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) 47 */ 48 protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 49 // TODO Auto-generated method stub 50 } 51 52 }
8.過濾器的使用,在此例子中運用過濾器對所有頁面的字符集進行過濾。FirstFilter的代碼如下
1 package com.jun.servlet; 2 3 import java.io.IOException; 4 5 import javax.servlet.Filter; 6 import javax.servlet.FilterChain; 7 import javax.servlet.FilterConfig; 8 import javax.servlet.ServletException; 9 import javax.servlet.ServletRequest; 10 import javax.servlet.ServletResponse; 11 import javax.servlet.annotation.WebFilter; 12 import javax.servlet.http.HttpServletRequest; 13 import javax.servlet.http.HttpServletResponse; 14 15 //WebFilter 3.0的特性 過濾器的名稱為FirstFilter,過濾的對象為所有的頁面urlPatterns={"/*"} ,必須要有 / 號 16 @WebFilter(filterName="FirstFilter",urlPatterns={"/*"}) 17 public class FirstFilter implements Filter { 18 19 @Override 20 public void destroy() { 21 System.out.println("destroy---FirstFilter"); 22 } 23 24 @Override 25 public void doFilter(ServletRequest arg0, ServletResponse arg1, FilterChain arg2) throws IOException, ServletException { 26 System.out.println("start----doFilter--FirstFilter"); 27 28 HttpServletRequest request =(HttpServletRequest) arg0; 29 HttpServletResponse response =(HttpServletResponse) arg1; 30 //以上是強制內型轉換,使用request對象和response對象 31 32 request.setCharacterEncoding("utf-8"); 33 response.setContentType("text/html;charset=utf-8"); 34 arg2.doFilter(arg0, arg1);//在頁面跳轉之前執行此語句前面的代碼,執行完頁面的代碼之后,在執行后面的語句 35 System.out.println("第一個字符過濾器"); 37 System.out.println("end------doFilter--FirstFilter軍軍");39 } 40 41 @Override 42 public void init(FilterConfig filterConfig) throws ServletException { 43 System.out.println("init----FirstFilter 軍軍"); 44 } 45 46 47 }
9.監聽器的使用,我們需要對當前在線人數進行一個監聽,實現的是HttpSessionListener,HttpSessionAttributeListener的接口
1 package com.jun.servlet; 2 3 import javax.servlet.annotation.WebListener; 4 import javax.servlet.http.HttpSessionAttributeListener; 5 import javax.servlet.http.HttpSessionBindingEvent; 6 import javax.servlet.http.HttpSessionEvent; 7 import javax.servlet.http.HttpSessionListener; 8 //監聽器的注解使用方法是直接用一個注解就行,然后就是創建類實現監聽器的接口,覆蓋監聽器的方法,實現應用中的邏輯 9 @WebListener("這是一個用戶信息監聽器") 10 public class SessionListenr implements HttpSessionListener, 11 HttpSessionAttributeListener { 12 //監聽器實現的兩個接口,用於監聽在線人數 13 @Override 14 public void attributeAdded(HttpSessionBindingEvent event) { 15 if(event.getName().equals("UserName")) 16 { 17 String current = (String) event.getSession().getServletContext().getAttribute("online");//獲取當前用戶人數 18 String info = (String) event.getSession().getServletContext().getAttribute("Words");//當前用戶的信息 19 if(info==null)info =""; 20 if(current == null) current="0"; 21 int c=Integer.parseInt(current); 22 c++; 23 current = String.valueOf(c); 24 event.getSession().getServletContext().setAttribute("online", current); 25 //event.getSession().getServletContext().setAttribute("Words", info+event.getValue()+" 加入聊天室\n"); 26 } 27 28 } 29 30 @Override 31 public void attributeRemoved(HttpSessionBindingEvent event) { 32 if(event.getName().equals("UserName")) 33 { 34 String current = (String) event.getSession().getServletContext().getAttribute("online"); 35 String info = (String) event.getSession().getServletContext().getAttribute("Words"); 36 if(info==null)info =""; 37 if(current==null)current = "0"; 38 int c = Integer.parseInt(current); 39 c--; 40 current = String.valueOf(c); 41 event.getSession().getServletContext().setAttribute("online", current); 42 event.getSession().getServletContext().setAttribute("Words", info+event.getValue()+" 離開了聊天室\n"); 43 } 44 45 } 46 47 @Override 48 public void attributeReplaced(HttpSessionBindingEvent arg0) { 49 // TODO Auto-generated method stub 50 51 } 52 53 @Override 54 public void sessionCreated(HttpSessionEvent event) { 55 56 /* String current = (String) event.getSession().getServletContext().getAttribute("online");//獲取當前用戶人數 57 if(current == null) current="0"; 58 int c=Integer.parseInt(current); 59 c++; 60 current = String.valueOf(c); 61 event.getSession().getServletContext().setAttribute("online", current);*/ 62 63 64 65 } 66 67 @Override 68 public void sessionDestroyed(HttpSessionEvent event) { 69 70 /* String current = (String) event.getSession().getServletContext().getAttribute("online");//獲取當前用戶人數 71 if(current == null) current="0"; 72 int c=Integer.parseInt(current); 73 c++; 74 current = String.valueOf(c); 75 event.getSession().getServletContext().setAttribute("online", current);*/ 76 77 } 78 79 }
至此,一個簡單的聊天室就完成了,下面是運行截圖


