backend
  • README
  • DOCS
    • Java Docs
    • Servlet Docs
    • JSP Docs
    • DB & SQL Docs
    • Spring Boot Docs
    • Spring Security Docs
    • AWS Docs
  • 설치하기
    • Intellij 설정
  • 자바
    • 01 Java란?
    • 02 자바 시작하기
    • 03 자료형과 연산자
    • 04 제어문
    • 05 메소드
    • 06 클래스 기초
      • Static 보충자료
      • 패키지 보충자료
    • 07 객체지향 프로그래밍
    • 08 클래스 더 알아보기
      • 열거형 ENUM 보충자료
    • 09 클래스와 자료형
      • 다형성 보충자료
      • 제네릭 보충자료
    • 10 컬렉션 프레임워크
      • 컬렉션 프레임워크 보충자료
    • 11 람다식과 함수형 프로그래밍
      • 람다식 보충자료
    • 12 오류 대비하기
      • 오류 보충자료
    • 13 멀티태스킹
      • 멀티태스킹 보충자료
    • 교재보충
      • java.lang
  • 스프링
    • 서블릿, JSP
      • 05 Servlet(서블릿)
        • 서블릿 보충자료
        • 서블릿 추가코드
        • XML, YAML, JSON
      • 06 JSP(자바 서버 페이지)
        • JSP 보충자료
      • 07 JSTL(JSP 스탠다드 태그 라이브러리)
        • JSTL 보충자료
      • 08 Cookie(쿠키), Session(세션)
      • 09 서블릿,필터,리스너
        • 서블릿,필터,리스너 보충자료
      • 11 도서관리 프로젝트 실습
    • Spring Boot
      • 01 스프링 등장 배경, 객체지향
        • 스프링 등장 배경, 객체지향 보충자료
      • 02 IOC(제어의 역전), DI(의존성 주입)
        • IOC 보충자료
        • DI 보충자료
      • 03 스프링 구조
        • 스프링 구조 보충설명
      • 04 테스트코드 실습
      • 05 스프링 빈 설정
        • 스프링 빈 설정 보충자료
      • 06 싱글톤
        • 싱글톤 보충 자료
      • 07 스프링 빈 자동설정
        • 스프링 빈 자동설정 보충자료
      • 08 빈 생명주기
        • 빈 생명주기 보충자료
      • 09 빈 스코프
        • 빈 스코프 보충자료
      • 10 스프링 MVC
        • 스프링 MVC 보충자료
        • 데이터베이스 연동에 필요한 부분
      • 11 Validation(검증)
        • Validation(검증) 보충자료
      • 12 Bean Validation(빈검증)
        • Bean Validation(빈검증) 보충자료
      • 13 예외처리
        • 예외처리 보충자료
      • 14 타입변환
      • 15 JDBC(Java Database Connectivity)
      • 16 커넥션풀
      • 17 트랜잭션
        • 트랜잭션 보충자료
      • 18 JDBC 템플릿 활용
      • 19 MyBatis
      • 20 JPA(Java Persistence API)
      • 22 게시판 프로젝트 실습
    • Spring Security
      • 보안(Security)
      • Spring Security
      • 2. Spring Security 알아보기
        • 보안 위협 실제 사례와 방어 전략
      • 3. Spring Security 기본 동작 흐름
      • 4. Spring Security로 인증 권한 추가하기
        • Spring Security의 인증 및 인가
      • 5. Spring Security에서 세션 관리하기
        • 세션(Session)과 쿠키(Cookie) 비교, 토큰(Token)과의 관계
        • 해싱 및 해싱알고리즘
        • base64
      • 6. Spring Security 악용 보호
        • SameSite
      • 7. Spring Security로 인가 권한 추가하기
      • 8. Bcrypt(비크립트) 암호화
      • OAuth2 적용하기
  • 네트워크
    • HTTP
    • OSI 7계층
  • DB&SQL
    • 01 Database(데이터베이스)와 SQL 개요
    • 02 관계형 모델
    • 03 집합
    • 04 JOIN 연산
    • 05 MySQL
      • 세이브포인트
      • DBeaver, Mysql 오토커밋 설정 관련
    • 06 SQL 기초
      • 예시데이터 쿼리문
    • 07 SQL 실습
      • 실습 스키마
    • 08 Join 활용
      • 실습스키마
    • 09 SQL 활용
      • 실습스키마
    • 10 정규화
      • 실습 스키마
    • 데이터타입
    • 예시 프로젝트 스키마 구성
  • AWS
    • SSL 연결하기
    • 보충설명
Powered by GitBook
On this page
  1. 스프링
  2. 서블릿, JSP

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");
        }
    }
}
Previous08 Cookie(쿠키), Session(세션)Next서블릿,필터,리스너 보충자료

Last updated 6 months ago