Hvordan config Tomcat å tjene bilder fra en ekstern mappe utenfor webapps?

stemmer
61

Hvordan kan jeg bruke Tomcat å tjene bildefiler fra en fellesmappe utenfor webapps? Jeg ønsker ikke å bruke en andre Apache filserver på en annen port siden bildefilene er en del av samme app. Og jeg ønsker ikke å lage en symlink til fellesmappen inne webapps siden min app er utplassert som en krig fil .... Er det en enklere løsning lik ved hjelp av standard servlet for statisk innhold i webapps, for statisk innhold utenfor utenfor webapps

Publisert på 06/01/2009 klokken 16:39
kilden bruker
På andre språk...                            


8 svar

stemmer
27

Du kunne ha en omdirigering servlet. I du web.xml du vil ha:

<servlet>
    <servlet-name>images</servlet-name>
    <servlet-class>com.example.images.ImageServlet</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>images</servlet-name>
    <url-pattern>/images/*</url-pattern>
</servlet-mapping>

Alle bildene vil være i "/ images", som ville bli fanget opp av servlet. Det ville da lese i den aktuelle filen i hvilken mappe og serverer den rett ut igjen. For eksempel si at du har en gif i bilder mappen c: \ Server_Images \ smilie.gif. På nettsiden vil være <img src="http:/example.com/app/images/smilie.gif".... I servlet, HttpServletRequest.getPathInfo()ville gi "/smilie.gif". Som servlet ville finne i mappen.

Svarte 06/01/2009 kl. 16:51
kilden bruker

stemmer
3

I stedet for å konfigurere Tomcat å omdirigere forespørsler, bruker Apache som en frontend med Apache Tomcat-kontakt , slik at Apache er kun serverer statisk innhold, mens ber Tomcat for dynamisk innhold.

Bruke JKmount direktivet (eller andre) kan du spesifisere nøyaktig hvilke forespørsler sendes til Tomcat.

Forespørsler om statisk innhold, for eksempel bilder, vil bli servert direkte av Apache, ved hjelp av en standard virtuell vert konfigurasjon, mens andre forespørsler, definert i JKMount Direktivet vil bli sendt til Tomcat arbeidere.

Jeg tror denne implementeringen vil gi deg størst fleksibilitet og kontroll på den generelle søknaden.

Svarte 06/01/2009 kl. 17:04
kilden bruker

stemmer
7

Du kan distribuere en bildemappen som en egen webapp og definere plasseringen av denne mappen til å være hvor som helst i filsystemet.

Lag en kontekst element i en XML-fil i katalogen $CATALINA_HOME/conf/[enginename]/[hostname]/ der enginename kan være 'Catalina' og vertsnavn kan være 'localhost'.

Navnet på filen basert på banen nettadressen du vil at bildene skal vises fra, så hvis din webapp har banen 'blogg', kan du kalle XML-filen blog#images.xmlog så at bildene vil være synlig påexample.com/blog/images/

Innholdet i XML-filen bør være <Context docBase="/filesystem/path/to/images"/>

Vær forsiktig så du ikke undeploy dette webapp, som som kan slette alle bildene dine!

Svarte 15/03/2010 kl. 11:04
kilden bruker

stemmer
1

Etter ingen av løsninger basert på definere XML-er fungerte for meg, fant jeg dette svaret svært nyttig. Tok omtrent et minutt, og en liten kode endring: Jeg endret denne linjen

this.basePath = getServletContext().getRealPath(getInitParameter("basePath"));

inn i

this.basePath = getInitParameter("basePath");

Svarte 15/08/2012 kl. 05:49
kilden bruker

stemmer
-1

Mange år senere, kan vi gjøre følgende med Spring Web MVC, inne i vårt webapp-servlet.xmlfilen:

<mvc:resources mapping="/static/**" location="/static/" />
Svarte 26/08/2012 kl. 10:27
kilden bruker

stemmer
18

I Tomcat 7, kan du bruke "alias" eiendom. Fra docs :

Dette attributtet inneholder en liste over eksterne steder å laste ressurser for denne sammenhengen. Listen over aliaser bør være på formen "/ aliasPath1 = docBase1, / aliasPath2 = docBase2" der aliasPathN må inkludere en ledende '/' og docBaseN må være en absolutt bane til enten en war-fil eller en katalog. En ressurs vil bli søkt for i det første docBaseN som aliasPathN er en ledende bane segment av ressursen. Hvis det er ingen slike alias, da ressursen vil bli søkt på vanlig måte. Disse eksterne steder vil ikke tømmes, hvis teksten er un-utplassert.
Svarte 01/10/2012 kl. 09:05
kilden bruker

stemmer
66

Dette er den måten jeg gjorde det, og det fungerte fint for meg. (gjøres på Tomcat 7.x)

Legg en <context>til tomcat/conf/server.xmlfilen.

Windows eksempel:

<Context docBase="c:\Documents and Settings\The User\images" path="/project/images" />

Linux eksempel:

<Context docBase="/var/project/images" path="/project/images" />

Som dette (i sammenheng):

<Server port="8025" shutdown="SHUTDOWN">
 ...
  <Service name="Catalina">
    ...
    <Engine defaultHost="localhost" name="Catalina">
     ...
     <Host appBase="webapps"
      autoDeploy="false" name="localhost" unpackWARs="true"
      xmlNamespaceAware="false" xmlValidation="false">
      ...
      <!--MAGIC LINE GOES HERE-->
       <Context  docBase="/var/project/images" path="/project/images" />

      </Host>
    </Engine>
  </Service>
</Server>

På denne måten, bør du være i stand til å finne filene (f.eks /var/project/images/NameOfImage.jpg) under:

http://localhost:8080/project/images/NameOfImage.jpg 
Svarte 07/04/2014 kl. 13:54
kilden bruker

stemmer
0

Dette er veldig enkelt og rett frem til serveren statisk innhold fra eksterne webapps-mappen i tomcat.

Bare redigere server.xml under $ CATALINA_HOME / config / server.xml som nedenfor, og start Tomcat.

<Host name="localhost"  appBase="webapps"
            unpackWARs="true" autoDeploy="true">

        **<Context docBase="C:\Ankur\testFiles"  path="/companyLogo" />**

       <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
               prefix="localhost_access_log" suffix=".txt"
               pattern="%h %l %u %t &quot;%r&quot; %s %b" />

</Host>

Tilsett sammenheng element inne i verten element med to attributt docBase og bane.

1) docBase: representerer den harddisken katalog 2) bane: representerer uri som du ønsker å tjene statisk innhold.

For eksempel: Hvis du har 7.png inne i C: \ Ankur \ testFiles katalog så kan du få tilgang til 7.png filen som nedenfor:

http: // localhost: 8081 / companyLogo / 7.png

For flere detaljer, sjekk bloggen

Svarte 21/05/2017 kl. 07:57
kilden bruker

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more