1 Servlet | URL 연결방법

Choi jeongmin·2024년 10월 17일
0

Servlet

목록 보기
2/7

서블릿에서 XML 매핑과 어노테이션 매핑은 둘 다 서블릿과
URL을 연결하는 방법이다.
현재는 어노테이션 방식을 훨씬 더 많이 사용한다.
그 이유는 어노테이션이 가지는 여러 가지 장점 때문이다.

1. xml 방식

  • 과거 방식으로, web.xml 파일에 서블릿을 등록하고 매핑하는 방식
  • 단점 : 장황함, 유연성 부족, 가독성 저하
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="https://jakarta.ee/xml/ns/jakartaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="https://jakarta.ee/xml/ns/jakartaee https://jakarta.ee/xml/ns/jakartaee/web-app_6_0.xsd"
         version="6.0">

    <servlet>
        <servlet-name>xmlmapping</servlet-name>
        <!-- 이름 지정 -->
        <servlet-class>com.ohgiraffers.section01.xml.LifeCycleTestServlet</servlet-class>
        <!-- 클래스 경로 지정 -->
        <load-on-startup>1</load-on-startup>
        <!-- 서버가 시작될 때 인스턴스를 생성한다. 태그 안의 숫자가 낮을 수록 서블릿의 우선순위가 높다. -->
    </servlet>
    <!--  *서블릿 만듦  -->
    <servlet-mapping>
        <servlet-name>xmlmapping</servlet-name>
        <!-- 어느 서블릿에 연결할지 -->
        <url-pattern>/xml-lifecycle</url-pattern>
        <!-- 연결할 요청 -->
    </servlet-mapping>
    <!-- * 요청에 서블릿 매핑 -->

</web-app>
package com.ohgiraffers.section01.xml;

import jakarta.servlet.ServletException;
import jakarta.servlet.ServletRequest;
import jakarta.servlet.ServletResponse;
import jakarta.servlet.http.HttpServlet;

import java.io.IOException;

public class LifeCycleTestServlet extends HttpServlet {

    private int initCount = 1;
    private int serviceCount = 1;
    private int destroyCount = 1;
    
    
    // 서블릿 컨테이너에 의해 최초 요청에만 실행되는 메소드
    //  - 서블릿을 처리하기 전에 준비 (DB 연결 등)
    @Override
    public void init() throws ServletException {
        System.out.println("xml 매핑 init() 호출 : " + initCount++);
    }


    @Override
    public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException {
        System.out.println("xml 매핑 service() 호출 : " + serviceCount++);
        // 최초 요청 시에는 init() 이후에 동작하고,
        // 두 번째 요청 부터는 init() 호출 없이 바로 호출된다.
    }
    // 모든 HTTP 요청이 먼저 전달되는 메소드이다.
    // 요청의 HTTP 메소드에 따라 적절하게 doGet(), doPost() 등을 호출한다. - 따로 오버라이드 안해도 됨
    

    // 컨테이너가 종료될 때 호출되는 메소드이며, 주로 자원을 반납하는 용도로 사용한다.
    @Override
    public void destroy() {
        System.out.println("xml 매핑 destroy() 호출 : " + destroyCount++);
    }


}

2. annotation 방식

  • 현대적 방식으로 서블릿 클래스 위에
    @WebServlet 어노테이션을 사용하여 직접 매핑하는 방식
  • 장점 - 간결함, 유지보수 용이, 가독성 향상
package com.ohgiraffers.section02.annotation;

import jakarta.servlet.ServletException;
import jakarta.servlet.ServletRequest;
import jakarta.servlet.ServletResponse;
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.HttpServlet;

import java.io.IOException;


@WebServlet(value = "/annotation-lifecycle", loadOnStartup = 2)
//@WebServlet(value = "/annotation-lifecycle")
//loadOnStartUp 이 없으면 실행 시 init됨
public class LifeCycleTestServlet extends HttpServlet {

    private int initCount = 1;
    private int serviceCount = 1;
    private int destroyCount = 1;


    // 서블릿 컨테이너에 의해 최초 요청에만 실행되는 메소드
    //  - 서블릿을 처리하기 전에 준비 (DB 연결 등)
    @Override
    public void init() throws ServletException {
        System.out.println("annotation 매핑 init() 호출 : " + initCount++);
    }


    @Override
    public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException {
        System.out.println("annotation 매핑 service() 호출 : " + serviceCount++);
        // 최초 요청 시에는 init() 이후에 동작하고,
        // 두 번째 요청 부터는 init() 호출 없이 바로 호출된다.
    }
    // 모든 HTTP 요청이 먼저 전달되는 메소드이다.
    // 요청의 HTTP 메소드에 따라 적절하게 doGet(), doPost() 등을 호출한다. - 따로 오버라이드 안해도 됨


    // 컨테이너가 종료될 때 호출되는 메소드이며, 주로 자원을 반납하는 용도로 사용한다.
    @Override
    public void destroy() {
        System.out.println("annotation 매핑 destroy() 호출 : " + destroyCount++);
    }
}

0개의 댓글