브라우저   WAS 서블릿필터 WebApplication
  요청———-> httpServletRequest httpServletResponse was안에 위치  
  <———-응답      
    요청정보에서 context path를 구하고 해당하는 webapp을 구해서 ———-> <———- 해당하는 Webapp 구해서
        PATH가 정적 : default Servlet PATH가 동적 : 서블릿,JSP
  • request,response가 넘어오면 메모리에 있느냐 확인 후
    • 있다면 - service() 실행
    • 없다면 - 인스턴스 생성(init()) - 후 service()
    • destroy - was 종료 시, webapp이 갱신 시(재배포), servlet 갱신 시
  • HttpServletRequest : 요청정보를 저장

  • HttpServletResponse : 응답을 위한 정보저장

  • wepapp,path가 없으면 404
  • WAS에 webapp 배포 시 webapp을 구분해 주는 것이 context path

  • WAS가 servlet인스턴스 생성 부터 실행까지 한다.

HttpServlet

  • 추상클래스
  • init(), destroy(), service(requst, response), doGet(), doPost()메소드를 가짐
  • 오버라이딩하면 자식꺼가 호출됨
  • IOC(제어의 역전)-나는 작성만, 다른 건 자기가 알아서
  • 그래서 서블릿 라이프 사이클을 알아야 한다.

Servlet의 라이프 사이클)

해당 jsp 페이지 요청시 servlet java 파일로 변환을 하고 컴파일 해 servlet class로 만들고 해당 객체를 생성하는데 한번 객체가 생성되고 나면 이후 다른 Client 요청은 멀티 쓰레드로 처리하게 된다.

Servlet 객체 생성

  • 최초 한번 생성 | @PostConstructor 호출
  • 생성자 이후, init 메서드 이전에 호출 |
    init() 메서드 호출
  • 최초 한번 호출 | doGet()/doPost() 호출
  • 요청시마다 호출 | destroy() 호출
  • 마지막 한번(자원 해제) | @PreDestroy 호출
  • destroy() 이후 호출

  • 서블릿은 PATH를 가진다
    • 서블릿 3.0 미만 : web.xml
    • 3.0이상 : @(어노테이션)
  • httpServlet
    • 되도록 필드 선언 x
    • 동시접근해도 문제없을땐 O
    • 아니면 synchronized
  • WAS는 내부적으로 쓰레드를 돌린다.
    • 메모리에 있나 - > No면 init() :인스턴스 생성 - > Service()
  • 메소드가 다른데 PATH 가 같을 경우 -> 메소드가 달라도 다 같은 처리면 Service(), 메소드별 처리 -> 각 메소드 오버라이딩
  • destory() : WAS 종료 시, webapp 이 갱신 시(재배포), servlet 갱신 시

  • gracefully kill

  • requestScope - 값이 forward 하는동안 유지되는 변수
    • forward시 setAtt…, getAtt…로 줌
    • forward는 같은 어플리케이션, redirect는 아무곳이나(다른 웹, 어플 다, 새로운URL로 보냄, 큰 값은 전달 x)
    • req,resp는 보낼 수 없다, 상태코드 302를 보냄
  • pageScope - 지역벼수(서블릿에서만, jsp에서만 사용되는 변수)

  • 참고 - 자기자신의 생성자를 호출하는 방법 : this()
    • 절대경로 : /, http[s]
    • 상대경로 : 현재 url기준으로 그 밑에 생김
  • WEB-INF - 외부에서 접근 불가
  • VO,DTO - 하나의 값을 가지는 객체
  • 네임 필드 - Name 필드
  • 네임 프로퍼티 - getter setter.Name
    • ${board.title} - title 프로퍼티, 필드를 불러오는게 아니다.
  • MVC 패턴

    • Model , View , Controller 의 합성어로 소프트웨어 공학에서 사용되는 소프트웨어 디자인 패턴

    • Model : 백그라운드에서 동작하는 로직을 처리합니다.

    • View : 사용자가 보게 될 결과 화면을 출력합니다.

    • Controller : 사용자의 입력처리와 흐름 제어를 담당합니다.

  • MVC model 1
    • req,resp -><- jsp -> 객체 -> DB
  • MVC model 2
    • req -> 서블릿 -> 객체 -> DB
    • 서블릿 -> view -> 출력