728x90
ID와 비밀번호를 입력하여 전송하는 로그인 창 작성
<!-- login2.html -->
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>로그인창</title>
</head>
<body>
<form name="frmLogin" method="post" action="login" encType="UTF-8">
아이디 : <input type="text" name="user_id"><br>
비밀번호: <input type="password" name="user_pw"><br>
<input type="submit" value="로그인">
<input type="reset" value="다시 입력">
</form>
</body>
</html>
LoginImpl loginUser=new LoginImpl(user_id, user_pw)를 실행하여 전송된 ID와 비밀번호를 저장하고,
session.setAttribute("loginUser", loginUser)으로 세션에 바인딩 시 미리 HttpSessionBinding Listener를 구현한 LoginImpl의 valueBound( ) 메서드를 호출한다.
// LoginTest.java
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;
/**
* Servlet implementation class LoginTest2
*/
@WebServlet("/login")
public class LoginTest2 extends HttpServlet {
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("utf-8");
response.setContentType("text/html; charset=utf-8");
PrintWriter out = response.getWriter();
HttpSession session = request.getSession();
String user_id = request.getParameter("user_id");
String user_pw = request.getParameter("user_pw");
LoginImpl loginUser = new LoginImpl(user_id, user_pw);
if(session.isNew()) {
session.setAttribute("loginUser", loginUser);
}
out.println("<head>");
out.println("<script type='text/javascript'>");
out.println("setTimeout('history.go(0);', 5000)");
out.println("</script>");
out.println("</head>");
out.println("<html><body>");
out.println("아이디는 " + loginUser.user_id + "<br>");
out.println("총 접속자수는 " + LoginImpl.total_user + "<br>");
out.println("</body></html>");
}
}
HttpSessionBindingListener를 구현하여 세션에 바인딩 이벤트를 처리하는 이벤트 핸들러가 구현되어 있다. 세션에 바인딩 시 valueBound( )가 호출되어 static 변수인 total_user의 값을 1 증가시킨다.
// LoginImpl.java
package sec04.ex01;
import javax.servlet.http.HttpSessionBindingEvent;
import javax.servlet.http.HttpSessionBindingListener;
public class LoginImpl implements HttpSessionBindingListener {
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;
}
public void valueBound(HttpSessionBindingEvent arg0) {
System.out.println("사용자 접속");
++total_user;
}
public void valueUnbound(HttpSessionBindingEvent arg0) {
System.out.println("사용자 접속 해제");
total_user--;
}
}
서로 다른 종류의 브라우저에서 접속하여 실행 결과를 확인해보면 다음과 같다.
참고로 HttpSessionBindingListener를 구현한 LoginImpl 클래스는 리스너를 따로 등록할 필요가 없다.
728x90
'웹 개발 기초 > 자바 웹을 다루는 기술' 카테고리의 다른 글
JSP 3단계 작업 과정 (0) | 2023.02.27 |
---|---|
HttpSessionListener 이용해 로그인 접속자 수 표시 (3) | 2023.02.23 |
여러 가지 서블릿 관련 Listener API (0) | 2023.02.22 |
Filter API (0) | 2023.02.22 |
서블릿의 여러 가지 URL 패턴 (0) | 2023.02.22 |