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
의견을 남기기 위해서는 SLiPP 계정이 필요합니다.
안심하세요! 회원가입/로그인 후에도 작성하시던 내용은 안전하게 보존됩니다.
SLiPP 계정으로 로그인하세요.
또는, SNS 계정으로 로그인하세요.