2011-11-29 9 views
7

Tengo una aplicación web Java (Eclipse/OSGI) en un servidor Jetty. Quiero poder servir archivos estáticos a mi aplicación web desde una carpeta fuera de la raíz web. En mi aplicación web, todavía no conozco el nombre del archivo del archivo que quiero que se publique, así que quiero tomar el nombre de archivo (y/o la ruta) como parámetro de VM cuando inicio mi aplicación web. Por ejemplo:Servir archivos desde la carpeta fuera de la aplicación web en Jetty

Tengo una imagen - myImg.jpg - que he puesto en una carpeta en el sistema de archivos del servidor, por ejemplo root/images/myImg.jpg. Quiero tomar esto como un parámetro de VM, p. "-DmyImg =/images/myImg.jpg /" para que pueda obtener la imagen y mostrarla en mi página web. ¿Cómo puedo lograr esto? ¿Puedo hacer esto sin crear un nuevo Servlet?

¡Gracias de antemano por cualquier ayuda!

+0

Estoy intentando utilizar un ContextHandler en el archivo de configuración jetty.xml, en la que señalo la baseResource a la carpeta real en el sistema de archivos, pero cuando intento acceder a ella a través de contextPath, el recurso es "nulo". – Farna

Respuesta

11

¡Solucionado!

Esto es lo que he añadido a mi archivo jetty.xml:

<Set name="handler"> 
    <New id="Handlers" class="org.eclipse.jetty.server.handler.HandlerCollection"> 
     <Set name="handlers"> 
      <Array type="org.eclipse.jetty.server.Handler"> 
       <Item> 
        <New class="org.eclipse.jetty.server.handler.ContextHandler"> 
         <Set name="contextPath">/myContextPath</Set> 
         <Set name="handler"> 
          <New class="org.eclipse.jetty.server.handler.ResourceHandler"> 
           <Set name="directoriesListed">false</Set> 
           <Set name="resourceBase">/actual/folder/on/file/system</Set> 
          </New> 
         </Set> 
        </New> 
       </Item> 
       [...other handlers...] 
      </Array> 
     </Set> 
    </New> 
</Set> 
3

@Farna: En su respuesta que no soy capaz de entender cómo está de paso el nombre del archivo como parámetro VM. Esto es lo que hice.

Creé testparvez.xml archivo en el embarcadero webapps directorio.

<?xml version="1.0" encoding="ISO-8859-1"?> 
<!DOCTYPE Configure PUBLIC "-//Mort Bay Consulting//DTD Configure//EN" "http://jetty.eclipse.org/configure.dtd"> 

<Configure class="org.eclipse.jetty.server.handler.ContextHandler"> 
    <Set name="contextPath">/testparvez</Set> 
    <Set name="resourceBase"><SystemProperty name="mydir"/></Set> 
    <Set name="handler"> 
    <New class="org.eclipse.jetty.server.handler.ResourceHandler"> 
     <Set name="welcomeFiles"> 
     <Array type="String"> 
      <Item><SystemProperty name="myfile"/></Item> 
     </Array> 
     </Set> 
     <Set name="cacheControl">max-age=3600,public</Set> 
    </New> 
    </Set> 
</Configure> 

entonces comienzo embarcadero como

java -jar start.jar jetty.port=8082 -Dmydir=C:/test/javadoc/ -Dmyfile=index.html 

Y finalmente, el acceso desde url http://localhost:8082/testparvez/

Cuestiones relacionadas