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 longserialVersionUID = 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);
    }
 
    /**
     *由子類實現,處理GETPOST請求
     *
     *@paramrequest
     *@paramresponse
     *@throwsServletException
     *@throwsIOException
     */
    publicab 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 longserialVersionUID = 5201314016000L;
 
    // 設置session生命週期爲1分鐘
    private static intsessionTimeOut = 60 * 1;
 
    private static final String ROOM_PAGE = "pages/chatroom.jsp";
 
    private static final String LOGIN_PAGE = "pages/login.jsp";
 
    private staticf 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 longserialVersionUID = 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();
       }
 
    }
}

沒有了,就這幾個類。 
 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章