Jak skonfigurować Tomcat do serwowania obrazów z folderu zewnętrznego poza webapps? [duplikat]

to pytanie ma już odpowiedzi tutaj : najprostszy sposób serwowania statycznych danych spoza serwera aplikacji w aplikacji internetowej Java (10 odpowiedzi) Zamknięty 1 rok temu.

Jak mogę używać programu Tomcat do serwowania plików graficznych z folderu publicznego poza webapps? Nie chcę używać drugiego serwera plików Apache na innym porcie, Ponieważ pliki obrazów są częścią tej samej aplikacji. I nie chcę tworzyć dowiązania symbolicznego do folderu publicznego wewnątrz webapps, ponieważ moja aplikacja jest wdrożony jako wojna file....Is istnieje prostsze rozwiązanie podobne do używania domyślnego servletu dla zawartości statycznej wewnątrz webapps, dla treści statycznych poza webapps

 70
Author: Colin 't Hart, 2009-01-06

8 answers

Możesz mieć serwlet przekierowujący. W sieci.xml masz:

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

Wszystkie Twoje obrazy będą w "/ images", które zostaną przechwycone przez servlet. Następnie wczytuje się w odpowiednim pliku w dowolnym folderze i serwuje go z powrotem. Na przykład, powiedzmy, że masz gif w folderze obrazów, c:\Server_Images\smilie.gif. Na stronie będzie <img src="http:/example.com/app/images/smilie.gif".... W servlet, HttpServletRequest.getPathInfo() by ustąpić " / smilie.gif". Które servlet znajdzie w folderze.

 28
Author: sblundy,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-01-06 18:57:14

To jest sposób, w jaki to zrobiłem i to działało dobrze dla mnie. (zrobione na Tomcat 7.x)

Dodaj <context> do pliku tomcat/conf/server.xml.

Przykład systemu Windows:

<Context docBase="c:\Documents and Settings\The User\images" path="/project/images" />
Przykład Linuksa:
<Context docBase="/var/project/images" path="/project/images" />

Tak (w kontekście):

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

W ten sposób powinieneś być w stanie znaleźć pliki (np. /var/project/images/NameOfImage.jpg) Pod:

http://localhost:8080/project/images/NameOfImage.jpg 
 80
Author: delkant,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-11-11 13:28:00

W Tomcat 7 można użyć właściwości "aliases". Z docs :

Ten atrybut dostarcza listę zewnętrznych lokalizacji, z których można załadować zasoby dla tego kontekstu. Lista aliasów powinna mieć postać "/aliasPath1=docBase1, / aliasPath2=docBase2", gdzie aliasPathN musi zawierać wiodące'/', a docBaseN musi być bezwzględną ścieżką do jednego z nich.plik wojenny lub katalog. Zasób będzie wyszukiwany w pierwszym docBaseN, dla którego aliasPathN jest wiodącym segmentem ścieżki zasób. Jeśli nie ma takiego aliasu, zasób będzie przeszukiwany w zwykły sposób. Te zewnętrzne lokalizacje nie zostaną opróżnione, jeśli kontekst nie zostanie wdrożony.
 18
Author: gamliela,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-10-01 11:05:27

Możesz wdrożyć folder obrazów jako oddzielną aplikację webową i zdefiniować lokalizację tego folderu w dowolnym miejscu w systemie plików.

Tworzenie elementu Context w pliku XML w katalogu $CATALINA_HOME/conf/[enginename]/[hostname]/ gdzie enginename może być 'Catalina', a hostname może być 'localhost'.

Nazwij plik na podstawie adresu URL ścieżki, z którego chcesz wyświetlać obrazy, więc jeśli Twoja aplikacja webapp ma ścieżkę "blog", możesz nazwać plik XML blog#images.xml, aby Twoje obrazy były widoczne w example.com/blog/images/

Zawartość pliku XML powinna wynosić <Context docBase="/filesystem/path/to/images"/>

Uważaj, aby nie undeploy tej webapp, jak to może usunąć wszystkie obrazy!

 7
Author: Justin Emery,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-03-15 13:04:05

Zamiast konfigurować Tomcat do przekierowywania żądań, użyj Apache jako nakładki z Apache Tomcat connector, aby Apache obsługiwał tylko zawartość statyczną, pytając tomcat o zawartość dynamiczną.

Używając dyrektywy JKmount (lub innych) Możesz dokładnie określić, które żądania są wysyłane do Tomcat.

Żądania zawartości statycznej, takie jak obrazy, byłyby obsługiwane bezpośrednio przez Apache, przy użyciu standardowej konfiguracji hosta wirtualnego, podczas gdy inne żądania, zdefiniowane w dyrektywa JKMount zostanie wysłana do pracowników Tomcat.

Myślę, że ta implementacja dałaby Ci największą elastyczność i kontrolę nad całością aplikacji.

 3
Author: adilei,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-01-07 07:04:39

Po tym, jak żadne z rozwiązań opartych na definiowaniu XMLs nie zadziałało dla mnie, znalazłem tę odpowiedź bardzo pomocną. Zajęło to około minuty, a mała zmiana kodu: zmodyfikowałem tę linię

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

Do

this.basePath = getInitParameter("basePath");

 1
Author: Yossi Shasho,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 11:55:19

Wiele lat później możemy wykonać następujące czynności za pomocą Spring Web MVC w naszym pliku webapp-servlet.xml:

<mvc:resources mapping="/static/**" location="/static/" />
 -1
Author: ThierryB,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-08-26 12:27:39

Jest to bardzo proste i proste do serwera statycznej zawartości spoza folderu webapps w tomcat.

Wystarczy edytować serwer.xml pod $CATALINA_HOME / Config / server.xml jak poniżej i uruchom ponownie 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>

Dodaj element context wewnątrz elementu hosta z dwoma atrybutami docBase i path.

1) docBase: reprezentuje katalog dysku twardego 2) path: reprezentuje uri, na którym chcesz podawać statyczną zawartość.

Dla przykład: jeśli masz 7.png wewnątrz C:\Ankur\testFiles katalog następnie można uzyskać dostęp do 7.plik png jak poniżej:

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

Po Więcej szczegółów zajrzyj na blog

 -1
Author: Ankur jain,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-21 08:57:31