Spring 자바 설정 을 통 해 Tomcat 을 통합 하 는 방법

4795 단어 Spring집성Tomcat
추가Tomcat의존

<!--        -->
<dependency>
    <groupId>org.apache</groupId>
    <artifactId>apache-tomcat-9.0.36-src</artifactId>
    <version>1.0-SNAPSHOT</version>
</dependency>
우선 시작 클래스 가 필요 합 니 다.

public class TomcatRun {

	private static final int PORT = 8080;
	private static final String CONTEXT_PATH = "/com/yu";

	public static void main(String[] args) {
		Tomcat tomcat = new Tomcat();
    //       
		tomcat.setPort(PORT);
		tomcat.getHost().setAppBase(".");
    //    Connector    ,       Connector,   tomcat        Connector
		tomcat.getConnector();
		tomcat.addWebapp(CONTEXT_PATH, new File("src/main/webapp").getAbsolutePath());
		try {
			tomcat.start();
		} catch (LifecycleException e) {
			e.printStackTrace();
		}
		tomcat.getServer().await();
	}
}
지정 한 포트 를 만 들 수도 있 습 니 다.

//      connector
// Connector connector = new Connector();
// connector.setPort(PORT);
// tomcat.getService().addConnector(connector);
만 들 기tomcat설정

public class MyWebApplicationInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {
	@Override
	protected Class<?>[] getRootConfigClasses() {
		return new Class[]{RootConfig.class};
	}

	@Override
	protected Class<?>[] getServletConfigClasses() {
		return new Class[]{AppConfig.class};
	}

	@Override
	protected String[] getServletMappings() {
		return new String[]{"/*"};
	}

	@Override
	protected Filter[] getServletFilters() {
		return new Filter[]{
				//
				new CharacterEncodingFilter(StandardCharsets.UTF_8.name())
		};
	}
}
여기 끝 이 야...
문제 가 왔 습 니 다Connector어떻게 작 동 합 니까Spring?
Servlet 3.0 용기(예 를 들 어 Tomcat)는 classpath*아래Tomcat파일 을 스 캔 합 니 다.그 안에 지 정 된Sping의 실현 을 실현 합 니 다.또한 하나의 주해META-INF/services/javax.servlet.ServletContainerInitializer는 특정한 종류 에 관심 이 있 음 을 나타 내 고 onStartup 방법 을 호출 할 때ServletContainerInitializer지 정 된 인터페이스의 실현 류 를 전달 합 니 다.
예 를 들 어HandlesTypes중의HandlesTypes실현 류SpringServletContainerInitializerSpringServletContainerInitializer방법,즉 위 에서 정의 한WebApplicationInitializer부류 의onStartup를 호출 할 것 이다.여기 서MyWebApplicationInitializeronStartup의 초기 화 를 연이어 완성 할 것 이다.

@HandlesTypes(WebApplicationInitializer.class)
public class SpringServletContainerInitializer implements ServletContainerInitializer {

	@Override
	public void onStartup(@Nullable Set<Class<?>> webAppInitializerClasses, ServletContext servletContext)
			throws ServletException {

		List<WebApplicationInitializer> initializers = new LinkedList<>();

		if (webAppInitializerClasses != null) {
			for (Class<?> waiClass : webAppInitializerClasses) {
				// Be defensive: Some servlet containers provide us with invalid classes,
				// no matter what @HandlesTypes says...
				if (!waiClass.isInterface() && !Modifier.isAbstract(waiClass.getModifiers()) &&
						WebApplicationInitializer.class.isAssignableFrom(waiClass)) {
					try {
						initializers.add((WebApplicationInitializer)
								ReflectionUtils.accessibleConstructor(waiClass).newInstance());
					}
					catch (Throwable ex) {
						throw new ServletException("Failed to instantiate WebApplicationInitializer class", ex);
					}
				}
			}
		}

		if (initializers.isEmpty()) {
			servletContext.log("No Spring WebApplicationInitializer types detected on classpath");
			return;
		}

		servletContext.log(initializers.size() + " Spring WebApplicationInitializers detected on classpath");
		AnnotationAwareOrderComparator.sort(initializers);
		for (WebApplicationInitializer initializer : initializers) {
      //   WebApplicationInitializer    onStartup  
			initializer.onStartup(servletContext);
		}
	}

}
image-20210413234957179
Spring 이 자바 설정 을 통 해 Tomcat 을 통합 하 는 것 에 관 한 이 글 은 여기까지 소개 되 었 습 니 다.더 많은 Spring 설정 통합 Tomcat 내용 은 우리 의 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 조회 하 시기 바 랍 니 다.앞으로 많은 응원 바 랍 니 다!

좋은 웹페이지 즐겨찾기