09 서블릿,필터,리스너
p196 - src/main/java/boot/start/servlet/LifeCycle
@WebServlet(name = "lifeCycle", urlPatterns = "/lifecycle")
public class LifeCycle extends HttpServlet {
// 서블릿이 초기화될 때 한 번만 호출
@Override
public void init() throws ServletException {
super.init();
System.out.println("Servlet is being initialized - init()");
}
// 클라이언트 요청이 있을 때마다 호출
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("Processing GET request - doGet()");
response.setContentType("text/html");
PrintWriter out = response.getWriter();
out.println("<html><body>");
out.println("<h1>Servlet Lifecycle</h1>");
out.println("<p>This is the GET response.</p>");
out.println("<p>Check the console for lifecycle logs.</p>");
out.println("</body></html>");
}
// 클라이언트 요청이 있을 때마다 호출 (POST 요청)
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("Processing POST request - doPost()");
response.setContentType("text/html");
PrintWriter out = response.getWriter();
out.println("<html><body>");
out.println("<h1>Servlet Lifecycle</h1>");
out.println("<p>This is the POST response.</p>");
out.println("<p>Check the console for lifecycle logs.</p>");
out.println("</body></html>");
}
// 서블릿이 메모리에서 제거될 때 호출
@Override
public void destroy() {
System.out.println("Servlet is being destroyed - destroy()");
super.destroy();
}
}
p199 - src/main/java/boot/start/filter/LoggingFilter
@WebFilter("/filter") // 필터가 적용될 서블릿 URL 패턴 지정
public class LoggingFilter implements Filter {
// 필터 초기화 메서드
@Override
public void init(FilterConfig filterConfig) throws ServletException {
System.out.println("LoggingFilter initialized");
}
// 요청 및 응답 처리 메서드
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
System.out.println("LoggingFilter - Request received at " + new Date());
// 다음 필터 또는 서블릿으로 요청을 전달
chain.doFilter(request, response);
System.out.println("LoggingFilter - Response sent at " + new Date());
}
// 필터 소멸 메서드
@Override
public void destroy() {
System.out.println("LoggingFilter destroyed");
}
}
p199 - src/main/java/boot/start/servlet/FilterServlet
@WebServlet(name = "filterServlet", urlPatterns = "/filter")
public class FilterServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// 응답 Content-Type 설정
resp.setContentType("text/html");
// 출력 스트림
PrintWriter out = resp.getWriter();
out.println("<html><body>");
out.println("<h1>Welcome to Filter Example Servlet</h1>");
out.println("<p>This is the response generated by FilterExampleServlet</p>");
out.println("</body></html>");
}
}
p203 - src/main/java/boot/start/listener/SessionListener
@WebListener
public class SessionListener implements HttpSessionListener {
@Override
public void sessionCreated(HttpSessionEvent se) {
System.out.println("Session created: " + se.getSession().getId());
// 세션 속성 설정 (예: 세션 카운터 증가)
se.getSession().setAttribute("sessionStartTime", System.currentTimeMillis());
}
@Override
public void sessionDestroyed(HttpSessionEvent se) {
System.out.println("Session destroyed: " + se.getSession().getId());
// 세션 종료 시 리소스 정리 또는 로그 기록
Long sessionStartTime = (Long) se.getSession().getAttribute("sessionStartTime");
long sessionDuration = System.currentTimeMillis() - sessionStartTime;
System.out.println("Session duration: " + sessionDuration + " ms");
}
}
p203 - src/main/java/boot/start/servlet/LoginServlet
@WebServlet(name = "loginServlet", urlPatterns = "/login")
public class LoginServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 이미 로그인되어 있는지 확인
HttpSession session = request.getSession(); // 기존 세션이 있으면 가져오고, 없으면 null 반환
if (session != null && session.getAttribute("username") != null) {
// 이미 로그인한 사용자면 프로필 페이지로 리다이렉트
response.sendRedirect("/jsp/login/profile.jsp");
} else {
// 로그인하지 않은 사용자에게 로그인 폼을 제공
request.getRequestDispatcher("/jsp/login/login.jsp").forward(request, response);
}
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 클라이언트로부터 전송된 사용자 아이디와 비밀번호
String username = request.getParameter("username");
String password = request.getParameter("password");
// 간단한 하드코딩된 사용자 검증 (실제로는 데이터베이스에서 검증해야 함)
if ("admin".equals(username) && "password".equals(password)) {
// 로그인 성공 시 세션에 사용자 정보 저장
HttpSession session = request.getSession();
session.setAttribute("username", username);
// 프로필 페이지로 리다이렉트
response.sendRedirect("/profile");
} else {
// 로그인 실패 시 다시 로그인 페이지로
response.sendRedirect("/jsp/login/login.jsp?error=true");
}
}
}
Last updated