8.1 서블릿 주석 소개

Tomcat은 버전 7부터 Servlet API 3.0 웹 서블릿 사양을 지원하기 시작했습니다 . 특히 이라는 패키지가 등장했습니다 javax.servlet.annotation. 여기에는 서블릿 클래스에 주석을 추가하는 데 사용할 수 있는 다양한 유형의 주석이 포함되어 있습니다. 주석을 사용하는 경우 배포 설명자(web.xml)가 필요하지 않습니다.

가장 유용한 주석 목록:

주석 설명
1 @WebServlet 서블릿 선언
2 @WebInitParam 초기화 매개변수를 지정합니다.
@WebFilter 웹 필터 선언
4 @WebListener 웹 라이저 선언
5 @ServletSecurity 보안 설정을 구성할 수 있습니다.

예:

@WebServlet( urlPatterns = {"/api/*"} )
public class Example extends HttpServlet {
    protected void doGet( HttpServletRequest request, HttpServletResponse response) throws Exception {
         response.setContentType("text/html");
         PrintWriter out = response.getWriter();
         out.println("Hello World!");
    }
}

하나의 주석으로 서블릿을 선언하고 /api/*.

8.2 서블릿 매핑 설정

주석에는 @WebServlet주석이 설명하는 서블릿의 매우 유연한 구성을 허용하는 많은 매개변수가 있습니다. 주요 사항을 살펴 보겠습니다.

기인하다 설명
1 name 서블릿 고유 이름(web.xml에서와 같이)
2 displayName 사람이 읽을 수 있는 서블릿 이름
description 서블릿 설명
4 value 매핑할 URL을 설정합니다.
5 urlPatterns 매핑할 URL 목록 지정(값 대신 사용)
6 initParams 서블릿의 시작 매개변수를 설정할 수 있습니다.
7 asyncSupported 서블릿이 비동기적으로 실행될 수 있음을 지정합니다(HTTP/2).
8 loadOnStartup 서블릿 시작 우선순위를 제어하는 ​​시퀀스 번호
9 smallIcon 작은 서블릿 아이콘을 설정합니다.
10 largeIcon 큰 서블릿 아이콘을 설정합니다.

여기에 몇 가지 흥미로운 점이 있습니다.

먼저 value및 는 urlPatterns상호 교환 가능한 속성입니다. 둘 다 서블릿이 매핑되어야 하는 URL 목록을 지정할 수 있습니다.

둘째, 이 매개변수는 asyncSupported서블릿이 HTTP/2 프로토콜을 통해 비동기 요청을 올바르게 처리하는지 여부를 나타냅니다.

세 번째 중요한 속성은 initParamsServletContext에 배치될 매개변수 목록을 설정할 수 있도록 합니다.

예:

@WebServlet(
        urlPatterns = {"/sendFile", "/uploadFile"},
        loadOnStartup = 1,
        asyncSupported = true,
        initParams = {
            @WebInitParam(name = "saveDir", value = "c:/uploaded"),
            @WebInitParam(name = "allowedTypes", value = "jpg,gif,png")
        }
)
public class ImageUploadServlet extends HttpServlet {

    public void doGet(HttpServletRequest request, HttpServletResponse response) throws Exception {
        String saveDir = getInitParameter("saveDir");
        String fileTypes = getInitParameter("allowedTypes");

        PrintWriter writer = response.getWriter();

        writer.println("saveDir = " + saveDir);
        writer.println("fileTypes = " + fileTypes);
    }
}

8.3 필터 매핑 설정

위에서 언급했듯이 필터는 서블릿의 유틸리티 유형이며 서블릿처럼 구성됩니다. 주석이 갖는 속성은 다음과 같습니다 @WebFilter.

기인하다 설명
1 filterName 필터 고유 이름(web.xml에서와 같이)
2 displayName 사람이 읽을 수 있는 필터 이름
description 필터 설명
4 value / urlPatterns 매핑할 URL 목록을 설정합니다.
5 dispatcherTypes DispatcherTypes 목록을 지정합니다.
6 servletNames 적용할 서블릿 목록을 지정합니다.
7 initParams 필터의 시작 매개변수를 설정할 수 있습니다.
8 asyncSupported 필터가 비동기적으로 실행될 수 있음을 지정합니다(HTTP/2).
9 smallIcon 작은 필터 아이콘을 설정합니다.
10 largeIcon 큰 필터 아이콘을 설정합니다.

특정 서블릿에 대한 모든 요청을 가로채는 필터의 예 :

@WebFilter(servletNames = {"MyOwnServlet", "UploadServlet"})
public class MyFilter implements Filter {
    // implements Filter's methods here...
}

여러 매개변수가 지정된 필터의 예 :

@WebFilter(
        urlPatterns = "/uploadFilter",
        initParams = @WebInitParam(name = "fileTypes", value = "doc;xls;zip;txt;jpg;png;gif")
)
public class UploadFilter implements Filter {
    // implements Filter's methods here...
}

RequestDispatcher에 대한 유형이 지정된 필터의 예 :

@WebFilter(
        urlPatterns = "/admin",
        dispatcherTypes = {DispatcherType.REQUEST, DispatcherType.FORWARD}
)
public class MyFilter implements Filter {
    // implements Filter's methods here...
}

다음 강의에서 필터와 서블릿의 목적에 대해 자세히 알아볼 것입니다.