간단한 Servlet을 사용 후 HttpSessionBinding Listener를 사용한 접속자 수 증가 로직
- HttpSessionListener 이용 방법
- package sec04.ex02;
import javax.servlet.ServletContext;
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;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.List;
@WebServlet("/login")
public class LoginServlet extends HttpServlet {
ServletContext context = null;
//로그인 접속자 아이디 저장
List user_list = new ArrayList();
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html; charset=utf-8");
context = getServletContext();
PrintWriter out = response.getWriter();
HttpSession session = request.getSession();
String user_id = request.getParameter("user_name");
String user_pw = request.getParameter("user_pw");
//LoginImpl클래스 객체 생성
LoginImpl loginuser = new LoginImpl(user_id, user_pw);
//신규 세션일 경우 바인딩 진행 후 LoginImpl valueBound() 메서드 호출
if(session.isNew())
{
session.setAttribute("loginUser", loginuser);
user_list.add(user_id);
context.setAttribute("user_list", user_list);
}
out.print("<html>");
out.print("<head>");
out.print("<script type='text/javascript'>");
out.print("setTimeout('history.go(0);', 5000)");
out.print("</script>");
out.print("</head>");
out.print("<body>");
out.print("아이디는 : " + loginuser.user_id + "</br>");
out.print("비밀번호 : " + loginuser.user_pw + "</br>");
out.print("총 접속자 수 : " + LoginImpl.total_user + "</br>");
out.print("접속 아이디 : </br>");
for (int i = 0; i< user_list.size(); i++)
{
System.out.println(user_list.get(i));
out.print(user_list.get(i)+"</br>");
}
out.print("<a href='logout?user_id="+user_id+"'>로그아웃 </a></br>");
out.print("</body></html>");
}
} - logout.java
- private void doHandle(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{
response.setContentType("text/html; charset=utf-8");
context = getServletContext();
PrintWriter out = response.getWriter();
HttpSession session = request.getSession();
String user_id = request.getParameter("user_name");
session.invalidate();
//context객체 내 getAttribute 사용 하여 바인딩된 user_list 데이터를 가지고옴
List user_list = (ArrayList) context.getAttribute("user_list");
//null 방지를 위한 예외처리
if(user_list != null)
{
user_list.remove(user_id);
context.removeAttribute("user_list");
context.setAttribute("user_list", user_list);
out.println("<br> 로그아웃 완료.");
}
else
{
out.print("로그인 상태가 아닙니다.</br>");
}
} - HttpSessionListener를 구현 하기 위해서는 꼭 리스너를 구현하여 구성해야 한다.
- LoginImpl.java
- @WebListener
public class LoginImpl implements ServletContextListener, HttpSessionListener, HttpSessionAttributeListener {
String user_id;
String user_pw;
static int total_user = 0;
public LoginImpl() {
}
public LoginImpl(String user_id, String user_pw){
this.user_id = user_id;
this.user_pw = user_pw;
}
@Override
public void contextInitialized(ServletContextEvent sce) {
/* This method is called when the servlet context is initialized(when the Web application is deployed). */
}
@Override
public void contextDestroyed(ServletContextEvent sce) {
/* This method is called when the servlet Context is undeployed or Application Server shuts down. */
}
@Override
public void sessionCreated(HttpSessionEvent se) {
System.out.println("세션 생성");
++total_user;
/* Session is created. */
}
@Override
public void sessionDestroyed(HttpSessionEvent se) {
System.out.println("세션 삭제");
--total_user;
/* Session is destroyed. */
}
@Override
public void attributeAdded(HttpSessionBindingEvent sbe) {
/* This method is called when an attribute is added to a session. */
}
@Override
public void attributeRemoved(HttpSessionBindingEvent sbe) {
/* This method is called when an attribute is removed from a session. */
}
@Override
public void attributeReplaced(HttpSessionBindingEvent sbe) {
/* This method is called when an attribute is replaced in a session. */
}
}
- @WebListener
- LoginImpl.java
- private void doHandle(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{
- package sec04.ex02;
'JAVA' 카테고리의 다른 글
JSP 스크립트 요소 (0) | 2021.08.30 |
---|---|
JSP 정의와 구성 요소 (0) | 2021.08.28 |
서블릿 Listener API (0) | 2021.08.25 |
Filter를 이용한 한글 인코딩 실습 (0) | 2021.08.25 |
Filter API (0) | 2021.08.24 |