embedded tomcat에서 servlet 3.0 매핑 설정이 동작하지 않는 이슈 해결

2014-10-29 11:53

embedded tomcat을 활용해 웹 서버를 시작하는 경우 servlet 3.0 기반으로 작성한 매핑이 동작하지 않는 경우가 발생한다. 이 문제가 발생하는 원인은 maven과 같은 빌드 도구를 사용할 경우 컴파일되는 output 경로가 WEB-INF/classes가 아니기 때문이다. maven의 경우 기본 output 디렉토리는 target/classes이다.

Tomcat 8.0인 경우 서버를 시작할 때 다음과 같이 추가 설정이 필요하다.

import java.io.File;


import org.apache.catalina.Context;
import org.apache.catalina.WebResourceRoot;
import org.apache.catalina.startup.Tomcat;
import org.apache.catalina.webresources.DirResourceSet;
import org.apache.catalina.webresources.StandardRoot;


public class WebServerLauncher {
	public static void main(String[] args) throws Exception {
        String webappDirLocation = "WebContent/";
        Tomcat tomcat = new Tomcat();
        tomcat.setPort(8080);


        Context ctx = tomcat.addWebapp("/", new File(webappDirLocation).getAbsolutePath());
        File additionWebInfClasses = new File("target/classes");
        WebResourceRoot resources = new StandardRoot(ctx);
        resources.addPreResources(new DirResourceSet(resources, "/WEB-INF/classes", additionWebInfClasses.getAbsolutePath(), "/"));
        ctx.setResources(resources);
        
        System.out.println("configuring app with basedir: " + new File("./" + webappDirLocation).getAbsolutePath());


        tomcat.start();
        tomcat.getServer().await();
    }
}

이 이슈는 http://stackoverflow.com/questions/11669507/embedded-tomcat-7-servlet-3-0-annotations-not-working 에서 참고해 해결했다. 이 문서를 보면 tomcat 7.0의 예제도 포함되어 있다.

0개의 의견 from SLiPP

의견 추가하기