ajax聊天室(JSP版)4

Servlet类真的没什么好说的。

先写个BaseServlet基类,以后的几个Servlet类就直接继承它,而不是HttpServlet。


package org.jvk.chatroom.servlet;
 
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
 
public abstract class BaseServlet extends HttpServlet {
 
    public final static String USER = "user" ;
 
    private static final long serialVersionUID = 520131401655L;
 
    protected Log log = LogFactory.getLog( this .getClass());
 
    @Override
    public void doGet(HttpServletRequest request, HttpServletResponse response)
           throws ServletException, IOException {
       execute(request, response);
    }
 
    @Override
    public void doPost(HttpServletRequest request, HttpServletResponse response)
           throws ServletException, IOException {
       execute(request, response);
    }
 
    /**
      * 由子类实现 , 处理 GET POST 请求
      *
      * @param request
      * @param response
      * @throws ServletException
      * @throws IOException
      */
    public ab stract void execute(HttpServletRequest request,
           HttpServletResponse response) throws ServletException, IOException;
 
    protected final String getValue(HttpServletRequest request, String param) {
       String str = request.getParameter(param);
       if (str == null )
           return "" ;
       return str;
    }
 
    private static byte [] lock = new byte [0];
 
    protected final void setNoCache(HttpServletRequest request,
           HttpServletResponse response) {
       synchronized ( lock ) {
           if (request.getProtocol().compareTo( "HTTP/1.0" ) == 0)
              response.setHeader( "Prama" , "no-cache" );
           else if (request.getProtocol().compareTo( "HTTP/1.1" ) == 0)
              response.setHeader( "Cache-Control" , "no-cache" );
           response.setDateHeader( "Expires" , 0);
       }
    }
}

 
package org.jvk.chatroom.servlet;
 
import java.io.IOException;
import java.util.Collection;
 
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
 
import org.jvk.chatroom.bean.Room;
import org.jvk.chatroom.bean.User;
import org.jvk.chatroom.service.ChatroomManager;
 
public class Login extends BaseServlet {
 
    private static final long serialVersionUID = 5201314016000L;
 
    // 设置 session 生命周期为 1 分钟
    private static int sessionTimeOut = 60 * 1;
 
    private static final String ROOM_PAGE = "pages/chatroom.jsp" ;
 
    private static final String LOGIN_PAGE = "pages/login.jsp" ;
 
    private static f inal String this_PAGE = "login" ;
 
    private static final String ERROR_PAGE = "pages/error.jsp" ;
 
    public void execute(HttpServletRequest request, HttpServletResponse response)
           throws ServletException, IOException {
       String userName = getValue(request, "userName" );
       String roomName = getValue(request, "roomName" );
       if (userName.length() < 1 || roomName.length() < 1) {
           Collection<Room> rooms = ChatroomManager.newInstance().getRooms()
                  .values();
           request.setAttribute( "rooms" , rooms);
           request.getRequestDispatcher( LOGIN_PAGE ).forward(request, response);
       } else if (ChatroomManager.newInstance().exists(roomName, userName)) {
           log .info( " 该用户已存在 , 请使用其他字符 " );
           request.setAttribute( "returnURL" , this_PAGE );
           request.setAttribute( "errorMessage" , " 该用户已存在 , 请使用其他字符 " );
           request.getRequestDispatcher( ERROR_PAGE ).forward(request, response);
       } else {
           HttpSession session = request.getSession( true );
           User user = new User(userName, ChatroomManager.newInstance()
                  .getRoom(roomName));
           session.setMaxInactiveInterval( sessionTimeOut );
           user.setLastGetMessage(510);
           user.setLastGetUserList(520);
           session.setAttribute( USER , user);
           session.setAttribute( "room" , ChatroomManager.newInstance().getRoom(
                  roomName));
           response.sendRedirect( ROOM_PAGE );
       }
    }
 
}

package org.jvk.chatroom.servlet;
 
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
 
import org.jvk.chatroom.bean.Message;
import org.jvk.chatroom.bean.User;
import org.jvk.chatroom.service.ChatroomManager;
 
 
public class SendMessage extends BaseServlet {
    private static final long serialVersionUID = 520131401655L;
    @Override
    public void execute(HttpServletRequest request, HttpServletResponse response) throws ServletException,
           IOException {
       HttpSession session = request.getSession( false );
       if (session == null ){
           response.getWriter().write( "" );
           return ;
       }
       synchronized (session) {
           User user = (User) session.getAttribute( USER );
           Message message = new Message();
           String to = request.getParameter( "to" );
           if ( "all" .equals(to))
              to = null ;
           String content = request.getParameter( "content" );
           message.setContent(content);
           message.setFrom(user.getName());
           message.setTo(to);
           message.setDate(System.currentTimeMillis());
           ChatroomManager.newInstance().addMessageToRoom(message, user.getRoom());
           // 假装响应下
           response.getWriter().write( "" );
       }
    }
}
 

 
package org.jvk.chatroom.servlet;
 
import java.io.IOException;
import java.io.PrintWriter;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
 
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
 
import org.jvk.chatroom.bean.Message;
import org.jvk.chatroom.bean.User;
import org.jvk.chatroom.service.ChatroomManager;
 
public class GetMessage extends BaseServlet {
 
    @Override
    public void execute(HttpServletRequest request, HttpServletResponse response) throws ServletException,
           IOException {
       HttpSession session = request.getSession( false );
       if (session == null )
           return ;
       synchronized (session) {
           User user = (User) session.getAttribute( USER );
           List<Message> messages = ChatroomManager.newInstance().getMessagesFromRoom(user);
           StringBuffer xml = new StringBuffer(4096);
           xml.append( "<messages>" );
           for (Message message : messages) {
              xml.append( "<message>" );
              xml.append( "<from>" + message.getFrom() + "</from>" );
              xml.append( "<date>" + new SimpleDateFormat().format( new Date(message.getDate())) + "</date>" );
              xml.append( "<content>" + message.getContent() + "</content>" );
              xml.append( "</message>" );
           }
           xml.append( "</messages>" );
           System. out .println( "xml=" +xml);
           setNoCache(request, response);
           response.setContentType( "text/xml; charset=UTF-8" );
           PrintWriter out = response.getWriter();
           out.print(xml);
           out.flush();
       }
 
    }
 
}
 

 
package org.jvk.chatroom.servlet;
 
import java.io.IOException;
import java.io.PrintWriter;
import java.util.List;
 
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
 
import org.jvk.chatroom.bean.User;
import org.jvk.chatroom.service.ChatroomManager;
 
public class GetUserList extends BaseServlet {
 
    @Override
    public void execute(HttpServletRequest request, HttpServletResponse response)
           throws ServletException, IOException {
       HttpSession session = request.getSession( false );
       if (session == null )
           return ;
       synchronized (session) {
           User user = (User) session.getAttribute( USER );
           ChatroomManager dao = ChatroomManager.newInstance();
           List<User> list = dao.getUsersFromRoom(user);
          
           StringBuffer buffer = new StringBuffer(1024);
           buffer.append( "<users>" );
           for (User tempUser : list) {
              buffer.append( "<user name=/"" + tempUser.getName() + "/"/>" );
           }
           buffer.append( "</users>" );
           log .info( "users=/n" + buffer);
           setNoCache(request,response);
           response.setContentType( "text/xml; charset=UTF-8" );
           PrintWriter out = response.getWriter();
           out.print(buffer);
           out.flush();
       }
 
    }
}

没有了,就这几个类。 
 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值