반응형
# 서블릿??!!
서블릿은 서버 쪽에서 실행되며 클라이언트의 요청을 동적으로 처리할 수 있게끔 도와주는 자바 클래스입니다.
서블릿은 자바 클래스이므로 자바의 일반적인 특징은 모두 가지고 있습니다. 하지만 자바와 달리 서블릿은 톰캣과 같은 서블릿 컨테이너에서 실행되야 합니다.
클라이언트가 웹 서버에 요청을 하면 웹 서버는 그 요청을 톰캣과 같은 웹 애플리케이션 서버(WAS)에 위임합니다. 그러면 WAS 는 각 요청에 해당하는 서블릿을 실행합니다. 그 후 서블릿은 요청에 대한 기능을 수행한 후 결과를 반환하여 클라언트에게 응답하게 됩니다.
서블릿의 특징
- 서버에서 실행된다.
- 정적인 웹 프로그램을 동적으로 처리할수 있게 해준다.
- 스레드 방식으로 실행된다.
- 자바 클래스이기 때문에 자바의 특징을 갖는다.
- 서블릿 컨테이너(톰캣)에서 실행된다.
# 서블릿의 생명주기 메서드
서블릿 생명주기 메서드란 서블릿 실행 단계마다 호출되어 기능을 수행하는 콜백 메서드를 말합니다. 서블릿의 생명주기를 자세히 알아보기 위해 서블릿 클래스를 만들어 보여드리겠습니다.
package servletTest.servlet1;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class FirstServlet extends HttpServlet{
@Override
public void init() throws ServletException{ //=> 서블릿 생성
System.out.println("init 메서드 호출");
}
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{
System.out.println("doGet 메서드 호출");//=> 요청 받음
}
@Override
public void destroy() { //=> 서블릿 종료
System.out.println("destory 메서드 호출");
}
}
다음과 같이 FirstSevlet를 만들어줍니다. HttpServlet 상속을 반드시 받아야 합니다. 이후 http://127.0.0.1:8090/프로젝트이름/패키지이름.FirstServlet으로 해당 서블릿 요청이 가능합니다. 하지만 매번 이렇게 요청하기에는 많이 번거로우니깐 web.xml에서 다음과 같은 태그를 만들어줍니다.
(web.xml 에서 수동으로 말고 애너테이션을 이용하여 자동으로 할 수도 있습니다.)
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd" id="WebApp_ID" version="4.0">
<display-name>servletTest</display-name>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>default.html</welcome-file>
<welcome-file>default.htm</welcome-file>
<welcome-file>default.jsp</welcome-file>
</welcome-file-list>
<servlet><!-- 실제로 매핑에 대해 실행되는 서블릿 클래스를 설정하는 태그-->
<servlet-name>firstServlet</servlet-name> <!-- 반드시 mapping의 서블릿 이름과 같아야함-->
<servlet-class>servletTest.servlet1.FirstServlet</servlet-class> <!-- 실제로 매핑되는 패키지 포함된 클래스 경로 -->
</servlet>
<servlet-mapping><!-- 논리적인 서블릿 설정을 위한 태그-->
<servlet-name>firstServlet</servlet-name> <!-- -->
<url-pattern>/first</url-pattern> <!-- url로 맵핑될 때 -->
</servlet-mapping>
</web-app>
servlet 태그와 servlet-mapping 태그를 만들어줍니다. 그럼 http://localhost:8090/first 으로 요청이 가능합니다. 만약 제대로 구현을 했다면 다음과 같은 코드가 출력됩니다.
그리고 만약 서버를 종료하지 않은 상태에서 한번 더 요청을 하면 init 메서드는 호출이 안되고 doGet 메서드만 호출이 됩니다.
이처럼 동작하는 것은 서블릿이 스레드 방식으로 동작하기 때문입니다. 따라서 서블릿은 메모리에 존재하는 서블릿을 재사용함으로써 훨씬 빠르고 효율적으로 동작할 수 있게 됩니다.
그리고 서버를 종료하면 destroy 메서드 호출이 됩니다.
읽어주셔서 감사합니다.
질문은 언제나 환영합니다.
"난 반드시 백엔드 왕이 될거야"
반응형
'...' 카테고리의 다른 글
[JS]DOM 쉽게 이해하기!! 고척스카이돔 아닙니다 (4) | 2020.12.23 |
---|---|
[JS] jquery로 클래스명이 동일한 여러 개의 태그 접근하기 (0) | 2020.12.23 |
[DB] RDS, NoSQL 그리고 NewSQL (0) | 2020.12.21 |
[JS] 프로토타입 이해하기 with 프로토타입 체인 (2) | 2020.12.17 |
[DB] 정형, 반정형, 비정형 데이터 (1) | 2020.12.16 |