Javaサーブレットは同じアカウントを実現した後にログインして前のログインを排除します(QQのようです)

10368 ワード

QQの登录のような机能を実现して、アカウントはすでに1か所に登录して、别の1か所に登录する时、前回の登录を排除します.
原理の概要:
主にservletでのユーザー登録時の処理であり、servletではユーザーとsessionIdの関係およびユーザーとsessionの関係を維持し、2つのmapに保存され、ユーザー登録時にmapにレコードが追加され、
mapに既にユーザが存在していることが判明した場合は、そのユーザに対応するレコードを削除し、セッションを破棄するのではなくmapのレコードを削除することに注意し、その後、そのセッションにユーザに提示された情報を入れてから、新しいユーザの情報を
mapに入れます.ページではセッションにプロンプトがあるかどうかを絶えず検証する必要があり、ある場合はすでに絞り出されていることを説明し、jspで取得したセッションのattributeは自動的に更新されないことに注意しなければならない.
つまりページをリフレッシュしないと、servletが既にそのユーザのセッションにプロンプト情報を入れていてもページには得られないので、ここではAjax方式でサーバにリクエストを絶えず送信して取得する必要がある
セッションにおけるユーザプロンプト情報の動的は,セッションにプロンプト情報があることを発見するとプロンプトを与える.
プロジェクト構造:
             
web.xml
             


  LoginPush
  
  
	cn.com.hafx.LoginServlet
  
	
  
  	login
  	cn.com.hafx.LoginServlet
  
  
  	login
  	/login.do
  	/reLogin.do
  	/getUserMsg.do
  
  
  
    login.jsp
  
  

LoginServlet.java
import java.io.IOException;
import java.io.PrintWriter;
import java.util.HashMap;
import java.util.Map;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;


/**
 *  
 * @author lyh
 * @version 2013-4-11
 * @see LoginServlet
 * @since
 */
public class LoginServlet extends HttpServlet implements HttpSessionListener
{
    /**
     *    
     */
    private static final long serialVersionUID = -2080934157550504694L;

    /**
     *   
     */
    private static Log log = LogFactory.getLog(LoginServlet.class);

    /** 
     *    Session     
     */
    public static final Map USER_SESSION = new HashMap();

    /** 
     * seeionId         
     */
    public static final Map SESSIONID_USER = new HashMap();

    /**
     *   HttpSessionListener       session     
     */
    @Override
    public void sessionCreated(HttpSessionEvent se)
    {
        String sessionId = se.getSession().getId();

        log.info("  session sessionId= " + sessionId);
    }

    /**
     *   HttpSessionListener       session     
     */
    @Override
    public void sessionDestroyed(HttpSessionEvent se)
    {
        String sessionId = se.getSession().getId();

        //  session       session          
        //      session     HttpSession   
        USER_SESSION.remove(SESSIONID_USER.remove(sessionId));

        log.info("  session sessionId= " + sessionId);
    }

    /** 
     *      
     */
    @Override
    protected void service(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException
    {

        //      
        request.setCharacterEncoding("utf-8");
        String servletPath = request.getServletPath();
        String uri = servletPath.substring(1, servletPath.lastIndexOf(".do"));

        try
        {
            //  
            if ("login".equals(uri))
            {
                HttpSession session = request.getSession();
                String userName = request.getParameter("userName");
                String password = request.getParameter("password");

                if (userName != null && !"".equals(userName.trim()))
                {
                    //        
                    if (login(userName, password))
                    {
                        //      (                 )   
                        userLoginHandle(request);

                        //     HttpSession      
                        USER_SESSION.put(userName.trim(), session);

                        //  sessionId         
                        SESSIONID_USER.put(session.getId(), userName);

                        log.info("  [" + userName + "]    ...");

                        session.setAttribute("userName", userName);
                        session.removeAttribute("userMsg");

                        //      
                        response.sendRedirect("main.jsp");
                    }
                    //    
                    else
                    {
                        log.info("  [" + userName + "]     ...");

                        request.setAttribute("msg", "    ,     !");

                        //response.sendRedirect("login.jsp");
                        request.getRequestDispatcher("login.jsp").forward(request, response);
                    }
                }
                else
                {
                    log.info("  [" + userName + "]     ...");

                    request.setAttribute("msg", "    ,     !");

                    //response.sendRedirect("login.jsp");
                    request.getRequestDispatcher("login.jsp").forward(request, response);
                }
            }
            //    
            else if ("reLogin".equals(uri))
            {
                HttpSession session = request.getSession();
                String userName = (String)session.getAttribute("userName");
                if (session != null)
                {
                    //    session
                    //USER_SESSION.remove(SESSIONID_USER.remove(session.getId()));
                    session.invalidate();
                }
                if (userName != null && !"".equals(userName))
                {
                    log.info("  [" + userName + "]    ...");
                }
                //        
                response.sendRedirect("login.jsp");
            }
            //ajax  
            else if ("getUserMsg".equals(uri))
            {
                HttpSession session = request.getSession();

                response.setContentType("text/html");
                response.setCharacterEncoding("utf-8");

                PrintWriter out = response.getWriter();
                out.print(session.getAttribute("userMsg"));
            }
        }
        catch (Exception e)
        {
            log.error(e.getClass() + e.getMessage());
            PrintWriter out = response.getWriter();
            out.print("       !");
        }
    }

    /**
     * 
     * Description:          
* @param request * @see */ private void userLoginHandle(HttpServletRequest request) { // String userName = request.getParameter("userName"); // sessionId //String sessionId = request.getSession().getId(); // sessionId , --HttpSession //USER_SESSION.remove(SESSIONID_USER.remove(sessionId)); // HttpSession HttpSession session = USER_SESSION.remove(userName); if (session != null) { // sessionId SESSIONID_USER.remove(session.getId()); session.removeAttribute("userName"); session.setAttribute("userMsg", " , !"); } } /** * * Description: DB
* @param userName * @param password * @return * @see */ private boolean login(String userName, String password) { return ("lyh".equals(userName) && "123456".equals(password)); } }

login.jsp





  
	
    
  		function show(){
			if('<%=msg%>'!=''){
				alert('<%=msg%>');
			}
  	  	}
    


  	

 
 

main.jsp





    


	
	
		var int; 
		var userMsg = '';
		var i =0;
		function checkUserOnline(){
			$.ajax({
				type:"post",
				url:"getUserMsg.do",
				dataType : "text",
				success:function(data){userMsg = data;},
				error:function(){
					alert("        !");
					clearInterval(int);
					reLogin();
				}
			});
			if(userMsg=='null'||userMsg==''){
				return;
			}
			else{
				alert(userMsg);
				clearInterval(int);
				reLogin();
			}
		}
		function reLogin(){
			window.location = "reLogin.do";
		}

		function checkLogin(){
			int = setInterval("checkUserOnline()",500);
		}
	"+userName+"
"); } %>