2010-12-08 7 views
3

Jetty (응용 프로그램의 일부 임)에서 실행되는 간단한 Spring MVC "Hello world"응용 프로그램을 만들고 싶습니다. 내 응용 프로그램의Jetty에 웹 응용 프로그램 컨텍스트 추가

구조는 다음과 같습니다

|-WEB-INF 
| |-view 
| |-layout 
| |-index.jsp 
| |-web.xml 
| 
|-jetty.xml 
|-application-context.xml 

내가 web.xml 파일을 기반으로 웹 애플리케이션 컨텍스트를 부두 서버를 만들고 추가하려고 :

Resource jettyConfig = Resource.newSystemResource("jetty.xml"); 
XmlConfiguration configuration = new XmlConfiguration(jettyConfig.getInputStream()); 
Server server = (Server)configuration.configure(); 

WebAppContext wac = new WebAppContext(); 
wac.setDescriptor("WEB-INF/web.xml"); 
wac.setContextPath("/"); 
wac.setParentLoaderPriority(true); 
server.setHandler(wac); 

server.start(); 

서버가 잘 시작하지만 내 상황에 맞는없이 : 로그에서 봄 시작에 대한 정보가 없습니다, 봄 mvc 컨트롤러를 사용할 수 없습니다. 아무도 내가 뭘 잘못했는지 생각 해보지 않겠습니까? jetty.xml의의

내용 : WEB-INF/web.xml 파일의

<Configure id="server" class="org.mortbay.jetty.Server"> 
     <Call name="addConnector"> 
      <Arg> 
       <New class="org.mortbay.jetty.nio.SelectChannelConnector"> 
        <Set name="port">9080</Set> 
       </New> 
      </Arg> 
     </Call> 
     <Set name="handler"> 
      <New class="org.mortbay.jetty.handler.HandlerList"> 
       <Set name="handlers"> 
        <Array type="org.mortbay.jetty.Handler"> 
         <Item> 
          <New class="org.mortbay.jetty.handler.DefaultHandler" /> 
         </Item> 
         <Item> 
          <New class="org.mortbay.jetty.handler.ResourceHandler"> 
           <Set name="resourceBase">.</Set> 
          </New> 
         </Item> 
        </Array> 
       </Set> 
      </New> 
     </Set> 
    </Configure> 

콘텐츠 :

<web-app> 
     <display-name>Hello world</display-name> 

     <init-param> 
      <param-name>development</param-name> 
      <param-value>true</param-value> 
     </init-param> 

     <servlet> 
      <servlet-name>mvc</servlet-name> 
      <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> 
      <init-param> 
       <param-name>contextConfigLocation</param-name> 
       <param-value>application-context.xml</param-value> 
      </init-param> 
      <load-on-startup>1</load-on-startup> 
     </servlet> 
     <servlet-mapping> 
      <servlet-name>mvc</servlet-name> 
      <url-pattern>/*</url-pattern> 
     </servlet-mapping> 

     <filter> 
      <filter-name>springSecurityFilterChain</filter-name> 
      <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class> 
     </filter> 
     <filter-mapping> 
      <filter-name>springSecurityFilterChain</filter-name> 
      <url-pattern>/*</url-pattern> 
     </filter-mapping> 

     <listener> 
     <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> 
     </listener> 

     <error-page> 
      <error-code>404</error-code> 
      <location>/error/404.jsp</location> 
     </error-page> 
     <error-page> 
      <error-code>500</error-code> 
      <location>/error/500.jsp</location> 
     </error-page> 
    </web-app> 

답변

9

당신이 분해 war 디렉토리에 실행하는 경우는 명시 적으로 자원 기반 속성을 설정하려고 :

context.setResourceBase("/path-to-your-project/WebContent"); 
context.setDescriptor("/path-to-your-project/WebContent/WEB-INF/web.xml"); 

또는 전쟁 자체를 배포하는 경우 다음을 사용할 수 있습니다.

context.setWar("/path-to-your-project/WebContent"); 

여기에 embedded Jetty samples을 나타내는 문서가 있습니다. 앱 맥락에서

는 :

Resource jettyConfig = Resource.newSystemResource("jetty.xml"); 
XmlConfiguration configuration = new XmlConfiguration(jettyConfig.getInputStream()); 
Server server = (Server)configuration.configure(); 

WebAppContext wac = new WebAppContext(); 
wac.setResourceBase("."); 
wac.setDescriptor("WEB-INF/web.xml"); 
wac.setContextPath("/"); 
wac.setParentLoaderPriority(true); 
server.setHandler(wac); 

server.start(); 

이것은 당신이에서 서버를 실행하는 사용자의 기본 경로는 웹 콘텐츠의 경로와 동일한 것으로 가정합니다.

+0

감사합니다. wac.setResourceBase (".") 설정은 도움이되지 않았지만 "." 절대 경로 (새로운 ClassPathResource ("."). getURI(). toString()) 경로 내 문제 해결! 자세한 내용은 http://stackoverflow.com/questions/1462953/embedded-jetty-looking-for-files-inside-its-jar-file을 참조하십시오. – mikhail

1

application-context.xml 파일은 WEB-INF 디렉토리 안에 있어야합니다.

관련 문제