브라우저 | 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 -> 출력