=============================== login.jsp ============================
<%
/*
* 로그인 페이지, 로그인전 현재 로그인된 이용자수를 출력한다.
*/
%>
<%@ page language="java" contentType="text/html; charset=EUC-KR"%>
<%@ page import="test.LoginManager"%>
<%!
//싱글톤 패턴을 사용하였기 때문에 생생되어있는 인스턴스를 얻어온다.
LoginManager loginManager = LoginManager.getInstance();
%>
<%
//login_try에서 로그인을 하지 않을경우 세션에 남아있는 userId를 제거한다.
session.removeAttribute("userId");
%>
<html>
<head>
<title>로그인 중복방지 Test</title>
</head>
<body>
<h3 align="center">현재 접속자 수 : <%=loginManager.getUserCount() %>명</h3>
<form action="login_try.jsp" name="login">
<div align="center">
아이디 : <input type="text" name="userId"><br>
비밀번호 : <input type="passward" name="userPw"><br>
<input type="submit" value="로그인">
</div>
</form>
</body>
</html>
============================= login_try.jsp ============================
<%
/*
* 로그인 시도페이지, id, pw유무를 체크하고, 올바르다면
* 이미 접속한 아이디인지 체크한다. 이미 접속한 아이디라면
* 기존 접속을 유지할것인지, 기존접속을 kill시키고 로그인할것인지를
* 확인한다.
*/
%>
<%@ page language="java" contentType="text/html; charset=EUC-KR" %>
<%@ page import="test.LoginManager"%>
<%!
//싱글톤 패턴을 사용하였기 때문에 생생되어있는 인스턴스를 얻어온다.
LoginManager loginManager = LoginManager.getInstance();
%>
<html>
<head>
<title>로그인 중복방지 Test</title>
</head>
<body align="center" valign="center">
<%
String userId = request.getParameter("userId");
String userPw = request.getParameter("userPw");
//아이디 패스워드 체크
if(loginManager.isValid(userId, userPw)){
//접속자 아이디를 세션에 담는다.
session.setAttribute("userId", userId);
//이미 접속한 아이디인지 체크한다.
//out.println(userId);
//out.println(loginManager.isUsing(userId));
loginManager.printloginUsers();
if(loginManager.isUsing(userId)){
%>
이미 접속중입니다. 기존의 접속을 종료하시겠습니까?<P>
<a href="disconnect.jsp">예 </a>
<a href="login.jsp">아니오</a>
<%
}else{
loginManager.setSession(session, userId);
response.sendRedirect("login_ok.jsp");
}
%>
<%
}else{
%>
<script>
alert("로그인후 이용해 주세요.");
location.href = "login.jsp";
</script>
<%
}
%>
</body>
</html>
========================== disconnect.jsp ============================
<%
/*
* login_try.jsp에서 로그인 중복시 무시하고 로그인할경우 호출.
* 기존의 session을 끊고 hashTable에 저장후 login_ok.jsp를 호출.
*/
%>
<%@ page language="java" contentType="text/html; charset=EUC-KR" %>
<%@ page import="test.LoginManager"%>
<%!
//싱글톤 패턴을 사용하였기 때문에 생생되어있는 인스턴스를 얻어온다.
LoginManager loginManager = LoginManager.getInstance();
%>
<html>
<head>
<title>로그인 중복방지 Test</title>
</head>
<body>
<%
String userId = (String)session.getAttribute("userId");
if(userId != null){
//기존의 접속(세션)을 끊는다.
loginManager.removeSession(userId);
//새로운 세션을 등록한다. setSession함수를 수행하면 valueBound()함수가 호출된다.
loginManager.setSession(session, userId);
response.sendRedirect("login_ok.jsp");
}
%>
</body>
</html>
============================= login_ok.jsp ============================
<%
/*
* 정상적으로 로그인되었을경우 호출
* 접속자 아이디를 보여주고 현재 접속중인 모든 사용자를 뿌려준다.
*/
%>
<%@ page language="java" contentType="text/html; charset=EUC-KR" %>
<%@ page import="java.util.*, test.LoginManager"%>
<%!
//싱글톤 패턴을 사용하였기 때문에 생생되어있는 인스턴스를 얻어온다.
LoginManager loginManager = LoginManager.getInstance();
%>
<html>
<head>
<title>로그인 중복방지 Test</title>
</head>
<body align="center" valign="center">
<%
//jsp내장객체 session을 이용하여 접속자 아이디를 얻어온다.
String userId = (String)session.getAttribute("userId");
if(userId != null){
%>
<%=userId%>님 환영합니다.
<a href="logout.jsp">로그아웃</a>
<p>
현재 접속자 : <br>
<%
Collection collection = loginManager.getUsers();
Iterator iterator = collection.iterator();
int i=0;
while(iterator.hasNext()){
out.print((++i)+". "+iterator.next()+"<br>");
}
}else{
%>
<script>
alert("로그인후 이용해 주세요.");
location.href = "login.jsp";
</script>
<%
}
%>
</body>
</html>
============================= logout.jsp ==============================
<%
/*
* 로그아웃을 클릭했을때 호출된다.
*/
%>
<%@ page language="java" contentType="text/html; charset=EUC-KR" %>
<%
//session을 확~~~끊어 버린다. 이시점에 LoginManager의 valueUnbound()가 호출된다.
session.invalidate();
response.sendRedirect("login.jsp");
%>
출처 : 오라클자바(www.oraclejava.co.kr)