Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2160481
  • 博文数量: 556
  • 博客积分: 11457
  • 博客等级: 上将
  • 技术积分: 5973
  • 用 户 组: 普通用户
  • 注册时间: 2011-02-24 22:33
文章分类

全部博文(556)

文章存档

2013年(22)

2012年(74)

2011年(460)

分类: Java

2012-09-05 12:34:53

Model:用户信息

点击(此处)折叠或打开

  1. package com.chat.model;
  2. import java.util.Vector;
  3. /**
  4.  *采用单例模式来管理用户信息
  5.  * @author Tom
  6.  */
  7. public class UserInfo {
  8.     private static UserInfo user=new UserInfo();
  9.     private Vector vector=null;
  10.     
  11.     private UserInfo(){
  12.         this.vector=new Vector();
  13.     }
  14.     public static UserInfo getInstance(){
  15.         return user;
  16.     }
  17.     
  18.     public boolean addUser(String user){
  19.          if(user!=null){
  20.              this.vector.add(user);
  21.              return true;
  22.          }else{
  23.              return false;
  24.          }
  25.     }
  26.     
  27.     //获取用户列表

  28.     public Vector getList(){
  29.         return this.vector;
  30.     }
  31.     //移除用户

  32.     public void removeUser(String user){
  33.        if(user!=null){
  34.            vector.removeElement(user);
  35.        }
  36.     }
  37.     
  38. }

业务处理类:

点击(此处)折叠或打开

  1. package com.chat.servlet;
  2. import com.chat.model.UserInfo;
  3. import javax.servlet.http.HttpSessionBindingEvent;

  4. public class UserListener implements javax.servlet.http.HttpSessionBindingListener {
  5.    
  6.     private String user;
  7.     private UserInfo container=UserInfo.getInstance();
  8.     
  9.     public UserListener(){
  10.          user="";
  11.     }
  12.     //设置在线监听人员

  13.     public void setUser(String user){
  14.         this.user=user;
  15.     }
  16.     //获取在线监听

  17.      public String getUser(){
  18.          return this.user;
  19.      }
  20.      //当session有对象加入时执行的方法

  21.     public void valueBound(HttpSessionBindingEvent event) {
  22.             System.out.println("上线用户:"+this.user);
  23.     }
  24.     //当session对象有用户移除的时候执行的方法

  25.     public void valueUnbound(HttpSessionBindingEvent event) {
  26.       System.out.println("下线用户:"+this.user);
  27.       if(user!=""){
  28.           container.removeUser(user);
  29.       }
  30.     }
  31.     
  32. }

消息处理类:

点击(此处)折叠或打开

  1. package com.chat.servlet;
  2. import java.util.*;
  3. import com.chat.model.UserInfo;
  4. import java.io.IOException;
  5. import java.io.PrintWriter;
  6. import java.util.Vector;
  7. import java.util.logging.Level;
  8. import java.util.logging.Logger;
  9. import javax.servlet.ServletContext;
  10. import javax.servlet.ServletException;
  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. public class Messages extends HttpServlet {
  16.     
  17.     protected void processRequest(HttpServletRequest request, HttpServletResponse response)
  18.             throws ServletException, IOException {
  19.         response.setContentType("text/html;charset=UTF-8");
  20.         String action=request.getParameter("action");
  21.        
  22.         try {
  23.             if("loginRoom".equals(action)){ //登录时,写入系统公告

  24.                 this.loginRoom(request, response);
  25.             }else if("sendMessage".equals(action)){ //发送聊天信息

  26.                 this.sendMessages(request, response);
  27.             }else if("getMessages".equals(action)){ //从XML文件中读取聊天信息

  28.                  this.getMessages(request, response);
  29.             }
  30.         } finally {
  31.           
  32.         }
  33.     }
  34.     
  35.     //将页面重定向到显示聊天信息的页面

  36.     public void getMessages(HttpServletRequest request,HttpServletResponse response) {
  37.             response.setContentType("text/html;charset=UTF-8");
  38.             try{
  39.                 request.getRequestDispatcher("content.jsp").forward(request, response);
  40.             }catch(Exception ex){
  41.                  Logger.getLogger(Messages.class.getName()).log(Level.SEVERE, null, ex);
  42.             }
  43.     }
  44.     
  45.     // 登录时,写入系统公告

  46.      public void loginRoom(HttpServletRequest request, HttpServletResponse response)
  47.             throws ServletException, IOException {
  48.          response.setContentType("text/html;charset=UTF-8");
  49.          HttpSession session=request.getSession();
  50.          String username=request.getParameter("username");    //获得登录用户名

  51.      UserInfo user=UserInfo.getInstance();        //获得UserInfo类的对象

  52.      session.setMaxInactiveInterval(600);        //设置Session的过期时间为10分钟

  53.           Vector vector = user.getList();
  54.          boolean flag = true; //标记是否登录的变量

  55.          //判断用户是否登录

  56.          System.out.println("vector的size:" + vector.size());
  57.          
  58.          if(vector!=null && vector.size()>0){
  59.              for(int i=0;i<vector.size();i++){
  60.                  System.out.println("vector"+i+""+vector.elementAt(i)+" user"+username);
  61.                  if(username.equals(vector.elementAt(i))){
  62.                      PrintWriter out;
  63.                      try{
  64.                          out = response.getWriter();
  65.                          out.println("");
  66.                      }catch(IOException e){
  67.                          e.printStackTrace();
  68.                      }
  69.                      flag=false;
  70.                      break;
  71.                  }
  72.              }
  73.          }
  74.          
  75.          //保存用户信息

  76.          if(flag){
  77.              UserListener ul=new UserListener();    //创建UserListener的对象

  78.              ul.setUser(username); //添加用户

  79.              user.addUser(ul.getUser());
  80.              session.setAttribute("user", ul); //将UserListener对象绑定到session对象中

  81.              session.setAttribute("username",username); //保存当前登录的用户名

  82.              session.setAttribute("loginTime",new Date().toLocaleString()); //保存登录时间

  83.              
  84.              ServletContext application =getServletContext();
  85.              
  86.              String sourceMessage="";
  87.              if(null!=application.getAttribute("message")){
  88.                  sourceMessage=application.getAttribute("message").toString();
  89.              }
  90.              
  91.              sourceMessage+="系统公告:" + username + "走进聊天室!
    ";
  92.               application.setAttribute("message",sourceMessage);
  93.               try{
  94.                   request.getRequestDispatcher("login_ok.jsp").forward(request, response);
  95.               }catch(Exception ex){
  96.                   Logger.getLogger(Messages.class.getName()).log(Level.SEVERE, null,ex);
  97.               }
  98.          }
  99.      }
  100.      // 发送聊天信息

  101.       public void sendMessages(HttpServletRequest request, HttpServletResponse response)
  102.             throws ServletException, IOException {
  103.             response.setContentType("text/html;charset=UTF-8");
  104.             request.setCharacterEncoding("UTF-8");
  105.             Random random=new Random();
  106.             String from = request.getParameter("from"); //发言人

  107.             String face =request.getParameter("face"); //表情

  108.             String to =request.getParameter("to"); //接收者

  109.              String color = request.getParameter("color"); //字体颜色

  110.             String content = request.getParameter("content"); //发言内容

  111.             String sendTime = new Date().toLocaleString(); //发言时间

  112.             ServletContext application = getServletContext();
  113.             String sourceMessage = application.getAttribute("message").toString();
  114.             
  115.               try {
  116.                 //发言时间

  117.                 sourceMessage += "" + from + "" + face + "[" + to + "]说:" + "" + content + "(" + sendTime + ")
    "
    ;
  118.                 application.setAttribute("message", sourceMessage);
  119.                 request.getRequestDispatcher("Messages?action=getMessages&nocache=" + random.nextInt(10000)).forward(request, response);
  120.             } catch (Exception ex) {
  121.                 Logger.getLogger(Messages.class.getName()).log(Level.SEVERE, null, ex);
  122.             }

  123.             
  124.           
  125.           
  126.       }
  127.    
  128.     
  129.     
  130.     
  131.     @Override
  132.     protected void doGet(HttpServletRequest request, HttpServletResponse response)
  133.             throws ServletException, IOException {
  134.         processRequest(request, response);
  135.     }

  136.     /**
  137.      * Handles the HTTP POST method.
  138.      * @param request servlet request
  139.      * @param response servlet response
  140.      * @throws ServletException if a servlet-specific error occurs
  141.      * @throws IOException if an I/O error occurs
  142.      */
  143.     @Override
  144.     protected void doPost(HttpServletRequest request, HttpServletResponse response)
  145.             throws ServletException, IOException {
  146.         processRequest(request, response);
  147.     }


  148.     @Override
  149.     public String getServletInfo() {
  150.         return "Short description";
  151.     }//

  152. }

Filter:

点击(此处)折叠或打开

  1. package com.chat.filter;
  2. import java.io.IOException;
  3. import javax.servlet.*;
  4. /**
  5.  *
  6.  * @author Tom
  7.  */
  8. public class CharacterEncodingFilter implements Filter{
  9.     
  10.     protected String encoding=null;
  11.     protected FilterConfig filterConfig=null;
  12.     public void init(FilterConfig filterConfig) throws ServletException {
  13.         this.filterConfig=filterConfig;
  14.         this.encoding=filterConfig.getInitParameter("encoding"); //从web.xml中获取编码格式参数

  15.     }

  16.     public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
  17.         if(encoding!=null){
  18.             request.setCharacterEncoding(encoding); //设置请求编码

  19.             response.setContentType("text/html;charset="+encoding); //设置响应编码

  20.         }
  21.         chain.doFilter(request, response);
  22.     }

  23.     public void destroy() {
  24.         this.encoding=null;
  25.         this.filterConfig=null;
  26.     }
  27. }

web.xml:

点击(此处)折叠或打开

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <web-app version="2.5" xmlns="" xmlns:xsi="" xsi:schemaLocation=" /web-app_2_5.xsd">
  3.     <servlet>
  4.         <servlet-name>Messages</servlet-name>
  5.         <servlet-class>com.chat.servlet.Messages</servlet-class>
  6.     </servlet>
  7.     <servlet-mapping>
  8.         <servlet-name>Messages</servlet-name>
  9.         <url-pattern>/Messages</url-pattern>
  10.     </servlet-mapping>
  11.     <session-config>
  12.         <session-timeout>
  13.             30
  14.         </session-timeout>
  15.     </session-config>
  16.     <welcome-file-list>
  17.         <welcome-file>index.jsp</welcome-file>
  18.     </welcome-file-list>
  19.     <filter>
  20.         <filter-name>CharacterEncodingFilter</filter-name>
  21.         <filter-class>com.chat.filter.CharacterEncodingFilter</filter-class>
  22.         <init-param>
  23.             <param-name>encoding</param-name>
  24.             <param-value>UTF-8</param-value>
  25.         </init-param>
  26.     </filter>
  27.     <filter-mapping>
  28.         <filter-name>CharacterEncodingFilter</filter-name>
  29.         <url-pattern>/*</url-pattern>
  30.         <dispatcher>REQUEST</dispatcher>
  31.         <dispatcher>FORWARD</dispatcher>
  32.     </filter-mapping>
  33.     
  34. </web-app>

附件:

 chatroom.rar   

阅读(3218) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~