반응형
서블릿 관련 Listener | 추상 메서드 | 기능 |
ServletContextAttributeListener | arrtributeAdded() attributeRemoved() attributeReplaced() |
Context 객체에 속성 추가/제거/수정 이벤트 발생 시 처리함 |
HttpSessionListener | sessionCreated() sessionDestroyed() |
세션 객체의 생성/소멸 이벤트 발생 시 처리함 |
ServletRequestListener | requestInitialized() requestDestroyed() |
클라이언트의 요청 이벤트 발생 시 처리함 |
ServletREquestAttributeListener | attributedAdded() attributedRemoved() attributeReplaced() |
요청 객체에 속성 추가/제거/수정 이벤트 발생 시 처리함 |
HttpSessionBindingListener | valueBound() valueUnbound() |
세션에 바인딩/언바인딩된 객체를 알려주는 이벤트 발생 시 처리함 |
HttpSessionAttributeListener | attributedAdded() attributeRemoved() attributeReplaced() |
세션에 속성 추가/제거/수정 이벤트 발생 시 처리함 |
ServletContextListener | contextInitialized() contextDestroyed() |
컨텍스트 객체의 생성/소멸 이벤트 발생 시 처리함 |
HttpSessionActivationListener | sessionDidActivate() sessionWillPassivate() |
세션의 활성화/비활성화 이벤트 발생 시 처리함 |
- LoginVO 생성
package sec04.ex01;
import java.util.HashSet;
import java.util.Objects;
import java.util.Set;
import javax.servlet.http.HttpSessionBindingEvent;
import javax.servlet.http.HttpSessionBindingListener;
public class LoginVO implements HttpSessionBindingListener {
// 중복허용, 순서없음(index없음)
public static Set<String> logined = new HashSet<String>();
private String user_id;
public LoginVO(String user_id) {
this.user_id = user_id;
}
@Override
public void valueBound(HttpSessionBindingEvent event) {
System.out.println("세션객체에 데이터가 바인딩 됨");
logined.add(user_id);
System.out.println(logined);
}
@Override
public void valueUnbound(HttpSessionBindingEvent event) {
logined.remove(user_id);
System.out.println(logined);
}
}
- LoginTest 생성
package sec04.ex01;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
@WebServlet("/login")
public class LoginTest extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request, response);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
PrintWriter out = response.getWriter();
HttpSession session = request.getSession();
String userId = request.getParameter("user_id");
LoginVO loginUser = new LoginVO(userId);
if(session.isNew()) {
session.setAttribute("loginUser", loginUser);
request.getRequestDispatcher("member.jsp").forward(request, response);
} else {
out.print("<h1>로그인 해주세요</h1>");
}
}
}
- member 서블릿 생성
package sec04.ex01;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
@WebServlet("/logout")
public class member extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 매개값이 false 일때 세션이 존재하면 그 세션을 사용하고 새로 생성하지 않음
HttpSession session = request.getSession(false);
session.invalidate();
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
}
}
- login2.html 생성
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<form action="login" method="post">
아이디 : <input type="text" name="user_id"><br>
비밀번호 : <input type="password" name="user_pw"><br>
<button>로그인</button>
</form>
</body>
</html>
- member.jsp 생성
<%@page import="sec04.ex01.LoginVO"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
접속한 사용자 수 : <%= LoginVO.logined.size()%>
접속한 사용자 : <%= LoginVO.logined%>
<form action="logout" method="get">
<button>로그아웃</button>
</form>
</body>
</html>
크롬으로 로그인 해보고
엣지로 로그인 해보고
크롬에 있는 첫번째를 로그아웃
다시 로그인 (세번째)로
로그아웃하면 세션 제거되고 카운트에서 사라짐
반응형
'학습 > JSP' 카테고리의 다른 글
18. Filter API (0) | 2022.11.16 |
---|---|
17. 여러가지 URL 패턴 적용 (0) | 2022.11.16 |
16. 종합(회원목록, 추가, 삭제, 로그인) (0) | 2022.11.14 |
15. 세션 (0) | 2022.11.10 |
14. 쿠키 (0) | 2022.11.09 |
댓글