자바 웹 어플리케이션 정의
- WAS에 설치(deploy)되어 동작하는 어플리케이션 (웹 어플리케이션 : e.g) 쇼핑몰, 카페, 블로그…)
-
HTML, CSS, 이미지, 자바로 작성된 클래스(Servlet도 포함됨, package, 인터페이스 등), 각종 설정 파일
등이 포함
Servlet
- 자바 웹 어플리케이션의 구성요소 중
동적인 처리를 하는 프로그램의 역할
- WAS에서 동작하는
Java Class
Servlet Container (중요!!)
- 컨테이너는 인스턴스의 생명주기를 관리하며, 생성된 인스턴스에게 추가적인 기능을 제공
- Servlet을 실행해주는 WAS는 Servlet 컨테이너를 가지고 있음
- WAS는 웹 브라우저로부터 서블릿 URL에 해당하는 요청을 받으면, 서블릿을 메모리에 올린 후 실행
- WAS가 과자를 만드는 공장이라고 가정
- Servlet은 고객이 요청한 과자 명세
- Serlvet Container는 과자 명세를 보고 작업을 진행하는 로봇
- 개발자가 서블릿 클래스를 작성했지만, 실제로 메모리에 올리고 실행하는 것은 WAS가 가지고 있는 Servlet 컨테이너임
- Servlet컨테이너는 동일한 서블릿에 해당하는 요청을 받으면, 또 메모리에 올리지 않고 기존에 메모리에 올라간 서블릿을 실행하여 그 결과를 웹 브라우저에게 전달
- 컨테이너는 보통 인스턴스의 생명주기를 관리하며, 생성된 인스턴스들에게 추가적인 기능을 제공하는 것
Servlet 생명주기
@WebServlet("/LifecycleServlet")
public class LifecycleServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
public LifecycleServlet() {
System.out.println("LifecycleServlet 생성!!");
}
public void init(ServletConfig config) throws ServletException {
System.out.println("init test 호출!!");
}
public void destroy() {
System.out.println("destroy 호출!!");
}
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
{
System.out.println("service호출!!");
}
}
- localhost:8080/example/LifecycleServlet 요청
-
Web.xml or Annotation
에 localhost:8080/example/LifecycleServletURL Mapping이 존재하는지 체크
- LifecycleServlet 서블릿 클래스가 메모리에 존재? => 없으면
생성자 호출
하여 객체 생성 - init, service 메소드 호출
- 다시 새로고침 또는 다른브라우저에 요청하면 service 메소드만 호출됨
서버는서블릿 객체를 여러개 만들지 않는다!!
- 서블릿.java 클래스를 새로 수정한다면 기존거는 destroy되고 다시 생명주기가 반복됨
doGet, doPost
get, post 방식으로 서버에 요청시,
service 메소드가 호출
되면서
자신의 doGet, doPost 메소드가 호출
됨
- HttpServlet의 doGet(request, response)메소드, doPost(request, response)메소드 오버라이딩
Request, Response 객체 이해
HttpServletRequest
- http프로토콜의 request정보를 서블릿에게 전달하기 위한 목적으로 사용합니다.
- 헤더정보, 파라미터, 쿠키, URI, URL 등의 정보를 읽어 들이는 메소드를 가지고 있습니다.
- Body의 Stream을 읽어 들이는 메소드를 가지고 있습니다.
HttpServletResponse
- WAS는 어떤 클라이언트가 요청을 보냈는지 알고 있고, 해당 클라이언트에게 응답을 보내기 위한 HttpServleResponse객체를 생성하여 서블릿에게 전달합니다.
- 서블릿은 해당 객체를 이용하여 content type, 응답코드, 응답 메시지등을 전송합니다.