본문 바로가기

JAVA

HttpSessionBindingListener을 이용한 로그인 접속자수 표시

간단한 Servlet을 사용 후 HttpSessionBinding Listener를 사용한 접속자 수 증가 로직

LoginImpl.java
LoginImpl.java

  • 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. */
                }
            }

'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