-
[부스트코스] Servlet -BE부스트코스 코딩일지/웹 프로그래밍 기초 2020. 2. 14. 01:45
JDK와 eclipse ee 그리고 WAS 종류의 하나인 Tomcat까지 설치하여
본격적으로 웹 애플리케이션을 동작할 준비를 마치었습니다.
웹 어플리케이션은 정적인 콘텐츠와 동적인 콘텐츠로 나누어 볼 수 있는데요.
프로그램을 수행해서 페이지를 동적으로 만들어 주는 것이 바로 서블릿입니다.
서블릿의 역할과 작성 방법에 대해 알아보도록 하겠습니다!
Servlet 이란?
자바 웹 애플리케이션의 구성요소 중 동적인 처리를 하는 프로그램입니다.
서블릿은 WAS에 동작하는 JAVA 클래스인데요,
HttpServlet 클래스를 상속받아 동작합니다.
웹페이지의 화면 자체를 JSP로 표현한다면, 그 안에서 이뤄지는 복잡한 프로그래밍은 서블릿으로 구현하는 것입니다.
서블릿은 요청이 들어오면 그때 코드가 실행되어 응답 결과를 만들어 내는 것입니다.
[출처: https://www.edwith.org/boostcourse-web/lecture/16686/]
작성 방법
>>응답받고 싶은 부분을 코딩
1. Servlet 3.0 이상에서 사용하는 방법
- web.xml 파일을 사용하지 않음
- 자바 어노테이션(annotation)을 사용함
- 간결한 것이 특징
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html;charset=utf-8"); //응답하는 결과에 대한 타입을 설명
PrintWriter out = response.getWriter(); // getWriter: 응답 결과를 보내줄 통로 PrintWriter을 반환한다
out.print("<h1>1부터 10까지 출력합니다. <h1>");) // 출력 내용을 작성한다.
for(int i = 1; i <=10; i++) {
out.print(i+"<br>");
}
out.close(); // 모두 끝나면 통로를 닫는다
}
2. Servlet 3.0 미만에서 사용하는 방법
- servlet을 등록할 때 web.xml 파일에 등록
버전 3.0과 다르게 서블릿이 하나 만들어질 때마다 web.xml에 해당 서블릿을 등록해 주어야만 실행시킬 수 있습니다.
코드 부분은 같습니다.
[출처 : https://www.edwith.org/boostcourse-web/lecture/16687/]
라이프 사이클
실습을 통해 실제 서블릿이 실행될 때 어떤 순서로 함수가 실행되는지 확인해 보았습니다.
public LifestyleServlet() {
System.out.println("LifestyleServlet 생성!!");
}
public void init(ServletConfig config) throws ServletException {
System.out.println("init 호출");
}
public void destroy() {
System.out.println("destroy 호출");
}protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("service 호출");
}실행결과는 다음과 같습니다.
생성자 => init() => service() 순으로 호출되고 있는 것을 알 수 있습니다.
브라우저에서 새로고침을 했을 때, service()만 호출되는 것을 알 수 있는데요
바로 요청이 들어올 때마다 요청된 객체를 확인하여 이미 요청이 들어온 객체라면 새롭게 메모리를 할당하지 않고
service 메서드만 호출하게 되는 것입니다.
따라서 응답에 대한 내용은 service 메서드에 구현해야 하는 것을 알 수 있습니다!
destroy 메서드는 서블릿을 수정하는 경우, 바로 기존 메모리에 있던 부분을 내리고 새롭게 올리는 경우에 destroy 메서드가 실행되고 다시 생성자 init 메서드 순으로 실행되는 것을 알 수 있습니다.
이어서 service 메서드에 대해 자세히 알아보겠습니다.
service(request, response) 메서드
HttpServlet의 service메서드는 템플릿 메소드 패턴으로 구현합니다.
- 클라이언트의 요청이 GET일 경우에는 자신이 가지고 있는 doGet(request, response) 메서드를 호출
- 클라이언트의 요청이 Post일 경우에는 자신이 가지고 있는 doPost(request, response)를 호출
[출처 : https://www.edwith.org/boostcourse-web/lecture/16688/]
Request, Response 객체
WAS가 웹 브라우저로부터 Servlet 요청을 받으면 두 가지 객체를 생성하게 됩니다.
바로 HttpServletRequest와 HttpServletResponse입니다.
HttpServletRequest
: 웹 브라우저가 Servlet에 요청할 때(Request) 주는 정보를 담고 있습니다.
- http프로토콜의 request정보를 서블릿에게 전달하기 위한 목적으로 사용합니다.
- 헤더 정보, 파라미터, 쿠키, URI, URL 등의 정보를 읽어 들이는 메서드를 가지고 있습니다.
- Body의 Stream을 읽어 들이는 메소드를 가지고 있습니다.
HttpServletResponse
: 요청을 받은 클라이언트에게 보낼 응답에 대한 정보를 담고 있습니다.
- WAS는 어떤 클라이언트가 요청을 보냈는지 알고 있고, 해당 클라이언트에게 응답을 보내기 위한 HttpServleResponse객체를 생성하여 서블릿에게 전달합니다.
- 서블릿은 해당 객체를 이용하여 content type, 응답 코드, 응답 메시지 등을 전송합니다.
[출처 : https://www.edwith.org/boostcourse-web/lecture/16689/]
'부스트코스 코딩일지 > 웹 프로그래밍 기초' 카테고리의 다른 글
[부스트코스] CSS layout (0) 2020.02.02 [부스트코스] CSS -FE (0) 2020.02.02 [부스트코스] HTML -FE (1) 2020.02.02 [부스트코스] WAS (0) 2020.01.19 [부스트코스] 웹 서버 (0) 2020.01.19