SpringBoot #3.1 Servlet

텐저린티·2023년 7월 3일
0

데브코스

목록 보기
22/41


개념

  • 서버 수용력을 확장하기 위한 자바 컴포넌트
  • 웹 서버에서 웹 어플리케이션을 호스팅하기 위한 웹 컨테이너 구현에 주로 사용
  • 서블릿 구동 위해선 WAS가 구동해야 함
  • HTTP를 통해 웹 클라이언트의 요청을 수신하고, 반응함
  • java에서는 interface로 구현
  • WAS 가 동적 컨텐츠를 제공할 수 있도록 웹 컨테이너가 DB와 동작하는 방식을 구현

Sevlet MVC

  • Model
    • 자바 객체, Pojo 로 데이터 담음
  • View
    • 모델이 담은 데이터를 시각적으로 보여주는 역할
  • Controller
    • 모델-뷰 연결하기 위한 매개체
    • 사용자 입력/요청 받아 모델 상태 변경
    • 모델 상태 변경에 따른 뷰 업데이트
    • 서블릿의 역할

Servlet LifeCycle

  • 웹 컨테이너에서 스레드를 만듬
    • 스레드 생성하는 방식은 두 가지 정도
      • 스레드 풀을 만들어서 재사용하거나 → HikariCQ
      • 매번 스레드를 생성, 제거하거나 → SimpleDataSource
  • 각 서블릿이 스레드에 할당됨
  • 서블릿은 스레드 할당되는 1회에만 init(), 할당해제되는 1회에만 destroy() 됨.
    • 스레드가 생성될 때마다 서블릿 객체가 생성되는게 아님
    • 서블릿 객체는 한 번씩만 생성되고 해제
    • 요청 발생마다 생성되거나 풀에서 가져온 스레드에 서블릿 객체가 할당되는 방식
  • 할당 해제 전까지 서블릿에 요청오면 service() 메소드를 호출
  • service() 메소드에 있는 doGet(), doPost() 메소드로 동작

구현

  • 빌드 dependency
// web
implementation "org.springframework.boot:spring-boot-starter-web"

web.xml 파일 등록 방법

  • src > main > webapp > WEB-INF > web.xml
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
         http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
         version="3.1">
    <!--  Servlet 등록  -->
    <servlet>
        <servlet-name>test</servlet-name>
        <servlet-class>com.devcourse.springorder.servlet.TestServlet</servlet-class>
    </servlet>
    <!--  서블릿과 url 패턴 매칭  -->
    <servlet-mapping>
        <servlet-name>test</servlet-name>
        <url-pattern>/*</url-pattern>
    </servlet-mapping>

</web-app>

@WebService 어노테이션 방법

// loadOnStartup : 서블릿 init이 요청때 수행되는가 미리 수행되는가
// -1 : default (요청때 생성), 1 : (어플리케이션 시작 시 생성)
@WebServlet(value = "/*", loadOnStartup = 1)
public class TestServlet extends HttpServlet {

WebApplicationInitializer 인터페이스 구현 방법

public class SpringOrderApplicationInitializer implements WebApplicationInitializer {

    private static final Logger logger = LoggerFactory.getLogger(TestServlet.class);

    // 이 메소드를 통해서 WAS에 서블릿 콘텍스트가 생성되고, 서블릿을 시작할 수 있음
    @Override
    public void onStartup(ServletContext servletContext) throws ServletException {
        logger.info("Starting Server...");
        ServletRegistration.Dynamic servletRegistration = servletContext.addServlet("test", new TestServlet());
        servletRegistration.addMapping("/*");
        servletRegistration.setLoadOnStartup(1);

    }

}
  • 근데 이렇게 Tomcat 로컬서버를 열어서 서블릿을 등록해주는 방법은 old한 방식임
profile
개발하고 말테야

0개의 댓글

관련 채용 정보