2010-12-08 71 views
3

我想創建在Jetty下運行的簡單Spring MVC「Hello world」應用程序(這是應用程序的一部分)。我的應用程序的向Jetty添加Web應用程序上下文

結構是:

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

我嘗試基於web.xml文件創建Jetty服務器並添加Web應用程序上下文:

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(); 

服務器啓動正常,但沒有我的情況下:沒有關於彈簧啓動日誌的信息,spring 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

如果您正在使用的分解戰爭目錄中運行,嘗試設置資源基礎屬性顯式:

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 2010-12-09 03:38:19

1

application-context.xml文件應放置在WEB-INF目錄中。

相關問題