-
[부스트 코스] 서블릿이란?카테고리 없음 2020. 3. 6. 23:41728x90반응형
* 본 글은 아래의 강의를 듣고 작성되었습니다.
https://www.edwith.org/boostcourse-web/lecture/16686/
[LECTURE] 1) Servlet 이란? : edwith
들어가기 전에 웹 어플리케이션은 정적인 콘텐츠와 동적인 콘텐츠로 나누어 볼 수 있습니다. 프로그램을 수행해서 페이지를 동적으로 만들어 주는 서블릿에 대해서 알아봅니다. 학습 목표 ... - 부스트코스
www.edwith.org
자바 웹 어플리케이션
WAS에 설치되어 동작하는 어플리케이션
자바 웹 어플리케이션에는 HTML, CSS, 이미지, 자바로 작성된 클래스, 각종 설정 파일 등이 포함된다.
또 이것들이 하나의 웹 어플리케이션에 여러개 포함될 수가 있다.
자바 웹 어플리케이션의 폴더 구조
반드시 폴더 구조를 지켜야함.
반드시 WEB-INF 라는 폴더가 존재해야함. 그 안에 web.xml(배포기술자. 웹 애플리케이션에 대한 정보를 다 가지고 있는 파일) 이라는 파일이 중요. servlet 3.0 미만에서는 필수로 가지고 있어야 하는 것이었는데, 3.0 이상에서는 어노테이션을 사용해서 대신해주는 부분들이 존재해 반드시 포함하지는 않아도 된다.
WEB-INF 폴더 하위에 lib 라는 폴더, classes 라는 폴더 존재.
lib애는 각종 자료 파일들이 들어있음.
classes라는 폴더 안에는 실제 class 들이 들어간다. (java 패키지, servlet 파일들 등등..)
html, jsp 등의 각종 리소스 파일은 WebContent 폴더 안에 넣어준다.
이클립스에서 실행된 Dynamic Web Project
이클립스에서 Dynamic Web Project 의 Servlet 을 실행하면, 해당 프로젝트가 이클립스가 관리하는 .metadata 폴더아래에 자바 웹 어플리케이션 폴더 구조로 만들어져 실행된다.
나는 전에 실습할때 first_prac 이라는 프로젝트를 만들었는데 tree /F 명령어로 폴더구조를 확인해보았다.
Servlet 이란?
-자바 웹 어플리케이션의 구성요소 중 동적인 처리를 하는 프로그램의 역할을 한다.
- 서블릿은 WAS 에서 동작하는 Java 클래이다.
- 서블릿은 HttpServlet 클래스를 상속받아야 한다.
- 서블릿과 JSP 로부터 최상의 결과를 얻으려면, 웹 페이지를 개발할 때 이 두가지( JSP, 서블릿) 를 조화롭게 사용해야 한다. ( 화면구성은 JSP, 복잡한 프로그래밍은 서블릿으로)
Servlet 작성 방법
1. Servlet 3.0 이상에서 사용하는 방법
- web.xml 파일 사용안함
- 자바 어노테이션을 사용
- 앞에서 실습했던 first_prac 사용
@WebServlet("/HelloServlet") public class HelloServlet extends HttpServlet { ... }
이 클래스 안에서 doGet, doPost 등의 메서드를 작성한다.
2. Servlet 3.0 spec 미만에서 사용하는 방법
- Servlet 을 등록할 때 web.xml 파일에 등록
<servlet> <description></description> <display-name>TenServlet</display-name> <servlet-name>TenServlet</servlet-name> <servlet-class>exam.TenServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>TenServlet</servlet-name> <url-pattern>ten</url-pattern> </servlet-mapping>
Servlet 의 라이프사이클
*라이프사이클(Life Cycle) - 객체의 생성부터 소멸까지의 과정.
간단하게 다음 자바 파일을 만들어 실습해보았다.
package examples; import java.io.IOException; import javax.servlet.ServletConfig; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; /** * Servlet implementation class LifecycleServlet */ @WebServlet("/LifecycleServlet") public class LifecycleServlet extends HttpServlet { private static final long serialVersionUID = 1L; /** * @see HttpServlet#HttpServlet() */ public LifecycleServlet() { System.out.println("LifecycleServlet 생성!!"); } /** * @see Servlet#init(ServletConfig) */ public void init(ServletConfig config) throws ServletException { System.out.println("init test 호출!!"); } /** * @see Servlet#destroy() */ public void destroy() { System.out.println("destroy 호출!!"); } /** * @see HttpServlet#service(HttpServletRequest request, HttpServletResponse response) */ protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { System.out.println("service 호출!!"); } }
코드를 실행하면,
해당 URL 로 클라이언트가 서버에게 요청을 보낸다.
서버는 이 URL 을 받아서 이 LifecycleServlet 이라는 URL 매핑은 LifecycleServlet 이지 라는 정보를 알았을 것.
해당 클래스가 메모리에 존재하는지를 체크.
메모리에 존재하지 않는 다면 객체를 생성. 메모리에 존재하지 않는다면, 생성자와 init 메서드 호출.
브라우저를 새로고침. 새로운 요청인 것이다. 이미 객체는 존재하기 때문에 service 만 계속 호출이 된다.
destroy 메서드는 코드를 조금 수정하면, 다시 새로운 객체가 생성되기 때문에 이전 객체가 소멸되기에 이때 호출된다.
HttpServletRequest, HttpServletResponse 객체 이해하기
웹브라우저에 URL 입력, Enter
웹브라우저는 도메인과 포트번호를 통해 서버에 접속한다.
path 정보, 클라이언트의 IP, 클라이언트의 다양한 정보를 포함한 요청 정보를 서버에게 전송한다.
클라이언트로부터 요청이 들어오면 WAS 는 HttpServletRequest 라는 객체와 HttpServletResponse 라는 객체를 생성한다.
HttpServletRequest 객체에는 요청할 때 가지고온 다양한 정보들을 담고, HttpServletResponse 에는 현재 접속한(= 요청을 보낸 클라이언트) 에게 전송하기 위한 정보를 담을 수 있는 개체에 생성해준다. 이렇게 생성된 두 개의 객체를 요청 정보에 있는 path 로 매핑된 서블릿에게 전달한다.
이렇게 전달한 객체는 service(), doGet(), doPost() 와 같은 메서드에 파라미터로 전달되서 사용하게 된다.
HttpServletRequest 는 HTTP 프로토콜의 request 정보( =헤더, 파라미터 정보, 쿠키, URL, URI 등등..) 를 모두 메서드로 담아 서블릿에게 전달하기 위한 목적으로 사용을 하고,
HttpServletResponse 객체는 WAS 가 어떤 클라이언트로부터 요청을 받았는지, 해당 클라이언트에 보낼 응답을 이 객체를 생성해 서블릿에게 전달한다. 서블릿은 이 객체를 이용해 content type, 응답코드, 응답 메세지 등을 전송할 수 있다.
728x90