SpringBoot 등록 Servlet 의 세 가지 방법 에 대한 상세 한 설명

7407 단어 SpringBoot책.Servlet
본 스 택 장 은 Spring Boot 에 Servlet,Filter,Listener 를 등록 하 는 방법 을 가르쳐 드 립 니 다.
1.Spring Boot 등록
Spring Boot 는 ServletRegistrationBean,FilterRegistrationBean,ServletListenerRegistrationBean 세 가지 종 류 를 각각 Servlet,Filter,Listener 를 등록 하 는 데 사 용 했 습 니 다.다음은 Servlet 의 예제 코드 입 니 다.

import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

/**
 * @author Java   
 */
public class RegisterServlet extends HttpServlet {

  @Override
  protected void service(HttpServletRequest req, HttpServletResponse resp) throws IOException {
    String name = getServletConfig().getInitParameter("name");
    String sex = getServletConfig().getInitParameter("sex");

    resp.getOutputStream().println("name is " + name);
    resp.getOutputStream().println("sex is " + sex);
  }

}

@Bean
public ServletRegistrationBean registerServlet() {
  ServletRegistrationBean servletRegistrationBean = new ServletRegistrationBean(
      new RegisterServlet(), "/registerServlet");
  servletRegistrationBean.addInitParameter("name", "javastack");
  servletRegistrationBean.addInitParameter("sex", "man");
  return servletRegistrationBean;
}
2.구성 요소 스 캔 등록
Servlet 3.0 이전에 Servlet,Filter,Listener 등 구성 요 소 는 web.xml 에서 설정 해 야 합 니 다.3.0 이후 부터 web.xml 이 설정 파일 이 필요 하지 않 습 니 다.모든 구성 요 소 는 코드 설정 이나 주 해 를 통 해 목적 을 달성 할 수 있 습 니 다.
다음 그림 에서 보 듯 이 Servlet 3.1 에서 캡 처 합 니 다.

Servlet 3.0 은 이 세 개의 주 해 를 대체 하기 시작 했다.
@WebServlet=>servlet 설정 대신
@WebFilter=>필터 설정 대신
@WebListener=>listener 설정 대신
Servlet 예제 설정

import javax.servlet.annotation.WebInitParam;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

/**
 * @author Java   
 */
@WebServlet(name = "javaServlet", urlPatterns = "/javastack.cn", asyncSupported = true,
    initParams = {
    @WebInitParam(name = "name", value = "javastack"),
    @WebInitParam(name = "sex", value = "man") })
public class JavaServlet extends HttpServlet {

  @Override
  protected void service(HttpServletRequest req, HttpServletResponse resp) throws IOException {
    String name = getServletConfig().getInitParameter("name");
    String sex = getServletConfig().getInitParameter("sex");

    resp.getOutputStream().println("name is " + name);
    resp.getOutputStream().println("sex is " + sex);
  }

}
필터 예제 설정

/**
 * @author Java   
 */
@WebFilter(filterName = "javaFilter", urlPatterns = "/*", initParams = {
    @WebInitParam(name = "name", value = "javastack"),
    @WebInitParam(name = "code", value = "123456") })
public class JavaFilter implements Filter {

  @Override
  public void init(FilterConfig filterConfig) throws ServletException {
    System.out.println("java filter init.");
    String name = filterConfig.getInitParameter("name");
    String code = filterConfig.getInitParameter("code");
    System.out.println("name is " + name);
    System.out.println("code is " + code);
  }

  @Override
  public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
      throws IOException, ServletException {
    System.out.println("java filter processing.");
    chain.doFilter(request, response);
  }

  @Override
  public void destroy() {
    System.out.println("java filter destroy.");
  }

}
Listener 설정 방식 은 비슷 합 니 다.위의 예제 코드 는 보 자마자 알 수 있 습 니 다.여 기 는 더 이상 상세 하 게 설명 하지 않 습 니 다.
주의해 야 할 것 은 내 장 된 서버 가 Servlet 3.0 의 javax.servlet.ServletContainerInitializer 인 터 페 이 스 를 직접 실행 하지 않 거나 Spring 의 org.springframework.web.WebApplicationInitializer 인 터 페 이 스 를 직접 실행 하지 않 으 면 Spring Boot 응용 을 종료 할 수 있다 는 점 이다.
따라서 Spring Boot 내장 서버 를 사용 하려 면 설정 류 에 @ServletComponentScan 주 해 를 추가 하여 Servlet 구성 요소 스 캔 기능 을 켜 야 합 니 다.독립 된 서버 를 사용 하면 추가 할 필요 가 없 으 며 서버 내부 의 자동 발견 체 제 를 사용 합 니 다.
동적 등록
Spring Boot 에서 Servlet,Filter,Listener 초기 화 작업 을 수행 하려 면 Spring 에서 다음 인 터 페 이 스 를 실현 하고 bean 으로 등록 해 야 합 니 다.
org.springframework.boot.web.servlet.ServletContextInitializer
ServletContext 는 다음 과 같은 몇 가지 동적 등록 방법 을 제공 합 니 다.

다음은 동적 으로 Servlet 예제 코드 를 추가 합 니 다.

import javax.servlet.annotation.WebInitParam;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

/**
 * @author Java   
 */
@WebServlet(name = "javaServlet", urlPatterns = "/javastack.cn", asyncSupported = true,
    initParams = {
    @WebInitParam(name = "name", value = "javastack"),
    @WebInitParam(name = "sex", value = "man") })
public class JavaServlet extends HttpServlet {

  @Override
  protected void service(HttpServletRequest req, HttpServletResponse resp) throws IOException {
    String name = getServletConfig().getInitParameter("name");
    String sex = getServletConfig().getInitParameter("sex");

    resp.getOutputStream().println("name is " + name);
    resp.getOutputStream().println("sex is " + sex);
  }

}

import cn.javastack.springbootbestpractice.servlet.InitServlet;
import org.springframework.boot.web.servlet.ServletContextInitializer;
import org.springframework.stereotype.Component;

import javax.servlet.ServletContext;
import javax.servlet.ServletRegistration;

/**
 * @author Java   
 */
@Component
public class ServletConfig implements ServletContextInitializer {

  @Override
  public void onStartup(ServletContext servletContext) {
    ServletRegistration initServlet = servletContext
        .addServlet("initServlet", InitServlet.class);
    initServlet.addMapping("/initServlet");
    initServlet.setInitParameter("name", "javastack");
    initServlet.setInitParameter("sex", "man");
  }

}
총결산
본 고 는 Spring Boot 에 등 록 된 세 가지 Servlet,Filter,Listener 방식 을 소개 하 며 활용 하고 있다.
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.

좋은 웹페이지 즐겨찾기