2010-12-08 10 views
3

Je veux créer une application simple Spring MVC "Hello world" qui fonctionne sous Jetty (qui fait partie de l'application).Ajouter un contexte d'application Web à Jetty

Structure de ma demande est:

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

J'essaie de créer serveur Jetty et ajouter du contexte d'application Web basé sur fichier 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(); 

Server démarre bien, mais sans mon contexte : pas d'informations sur le démarrage du printemps dans les journaux, les contrôleurs printemps mvc ne sont pas disponibles. Est-ce que quelqu'un a des idées sur ce que je fais de mal?

Contenu de jetty.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> 

Contenu du WEB-INF/web.xml:

<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> 

Répondre

9

Si vous utilisez avec un répertoire de guerre essayer explosé définissant la propriété de la base de ressources explicitement :

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

ou si vous déployez la guerre elle-même vous pouvez simplement utiliser:

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

Voici les documents montrant embedded Jetty samples.

Dans le contexte de votre application:

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

Cela suppose que votre chemin de base où vous utilisez votre serveur à partir est le même que le chemin d'accès au contenu Web.

+0

Merci! La définition de wac.setResourceBase (".") Ne m'a pas aidé, mais quand j'ai changé "." au chemin absolu (new ClassPathResource ("."). getURI(). toString()) chemin mon problème résolu! Voir http://stackoverflow.com/questions/1462953/embedded-jetty-looking-for-files-inside-its-jar-file pour plus de détails. – mikhail

1

Le fichier application-context.xml doit être placé dans le répertoire WEB-INF.