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