2012-06-05 5 views
0

동일한 Jetty 서버에서 정적 파일과 Thrift 서비스를 제공하려고합니다. 지금까지 다음 코드가 있습니다.동일한 Jetty 서버에서 Thrift/TServlet과 정적 파일을 모두 제공하십시오.

val server = new Server(); 
val connector = new SelectChannelConnector(); 
connector.setPort(4567); 
server.addConnector(connector); 

val servlet_handler = new ServletContextHandler(server,"/thrift",ServletContextHandler.SESSIONS); 
servlet_handler.addServlet(new ServletHolder(new SomeThriftServlet()), "/thrift/*"); 

val resource_handler = new ResourceHandler(); 
resource_handler.setWelcomeFiles(new String[]{ "index.html" }); 
resource_handler.setResourceBase("."); 

val handlers = new HandlerList(); 
handlers.setHandlers(new Handler[] { resource_handler, servlet_handler, new DefaultHandler() }); 
server.setHandler(handlers); 

server.start(); 
server.join(); 

정적 파일은 잘 처리되지만 스레 이프 서비스는 계속 404 오류를 제공합니다. 내가 도대체 ​​뭘 잘못하고있는 겁니까?


는 정적 파일을 제공하는 코드는 this question에서 찍은하고, '발'유형 project lombok에 의해 처리된다,하지만 난 현재의 코드를 더 읽을 생각하기 때문에 나는 거기에서 그들을 왼쪽 .

답변

0

문제의 핵심은 ResourceHandler을 자체 컨텍스트로 감싸고 두 개 이상의 컨텍스트에 기본 경로를 지정해야한다는 것입니다. 이것은 ResourceHandler 자체의 기본 경로가 없기 때문입니다.

그런 다음 ContextHandlerCollection에 서버에 컨텍스트를 제공 할 수 있습니다.이 컨텍스트는 가장 긴 일치하는 경로 접두어를 기반으로 사용할 컨텍스트를 결정합니다.

Server server = new Server(); 

val connector = new SelectChannelConnector(); 
connector.setPort(4567); 
server.addConnector(connector); 

val thr = new SomeThriftServlet(); 

val ct0 = new ServletContextHandler(ServletContextHandler.SESSIONS); 
ct0.setContextPath("/thr"); 
ct0.addServlet(new ServletHolder(thr), "/*"); 

val rsc = new ResourceHandler(); 
rsc.setDirectoriesListed(true); 
rsc.setWelcomeFiles(new String[]{ "index.html" }); 
rsc.setResourceBase("."); 

val ct1 = new ContextHandler(); 
ct1.setContextPath("/rsc"); 
ct1.setHandler(rsc); 

val contexts = new ContextHandlerCollection(); 
contexts.setHandlers(new Handler[] {ct0, ct1, new DefaultHandler() }); 

server.setHandler(contexts); 

server.start(); 
server.join(); 
관련 문제