Comment configurer Tomcat pour servir des images à partir d’un dossier externe en dehors des applications Web?

Comment puis-je utiliser Tomcat pour diffuser des fichiers image à partir d’un dossier public en dehors des applications Web? Je ne veux pas utiliser un serveur de fichiers Apache 2ème sur un autre port car les fichiers image font partie de la même application. Et je ne veux pas créer de lien symbolique vers le dossier public de webapps depuis que mon application est déployée en tant que fichier war …. Existe-t-il une solution plus simple similaire à l’utilisation du servlet par défaut pour le contenu statique

Vous pourriez avoir un servlet de redirection. Dans votre web.xml, vous auriez:

 images com.example.images.ImageServlet   images /images/*  

Toutes vos images seraient dans “/ images”, qui seraient interceptées par le servlet. Il serait alors lu dans le fichier approprié dans n’importe quel dossier et le servir immédiatement. Par exemple, disons que vous avez un fichier gif dans votre dossier images, c: \ Server_Images \ smilie.gif. Dans la page Web serait Dans le servlet, HttpServletRequest.getPathInfo() donnerait "/smilie.gif". Ce que la servlet trouverait dans le dossier.

C’est comme ça que je l’ai fait et ça a bien fonctionné pour moi. (fait sur Tomcat 7.x)

Ajoutez un au fichier tomcat/conf/server.xml .

Exemple Windows:

  

Exemple Linux:

  

Comme ça (en contexte):

  ...  ...  ...  ...       

De cette façon, vous devriez pouvoir trouver les fichiers (par exemple /var/project/images/NameOfImage.jpg ) sous:

 http://localhost:8080/project/images/NameOfImage.jpg 

Dans Tomcat 7, vous pouvez utiliser la propriété “aliases”. De la documentation :

Cet atsortingbut fournit une liste d’emplacements externes à partir desquels charger des ressources pour ce contexte. La liste des alias doit être de la forme “/ aliasPath1 = docBase1, / aliasPath2 = docBase2” où aliasPathN doit inclure un ‘/’ et docBaseN doit être un chemin absolu vers un fichier .war ou un répertoire. Une ressource sera recherchée dans le premier docBaseN pour lequel aliasPathN est un segment de chemin principal de la ressource. S’il n’y en a pas, la ressource sera recherchée de la manière habituelle. Ces emplacements externes ne seront pas vidés si le contexte n’est pas déployé.

Vous pouvez déployer un dossier d’images en tant qu’application Web distincte et définir l’emplacement de ce dossier dans le système de fichiers.

Créez un élément Context dans un fichier XML dans le répertoire $CATALINA_HOME/conf/[enginename]/[hostname]/ où enginename pourrait être ‘Catalina’ et hostname pourrait être ‘localhost’.

Nommez le fichier en fonction de l’URL de chemin d’access à partir de laquelle les images doivent être affichées. Par conséquent, si votre application Web possède un chemin d’access, vous pouvez nommer le fichier XML blog#images.xml pour que vos images soient visibles sur example.com/blog/images/

Le contenu du fichier XML doit être

Veillez à ne pas déployer cette application Web, car cela pourrait supprimer toutes vos images!

Au lieu de configurer Tomcat pour redirect les requêtes, utilisez Apache comme interface avec le connecteur Apache Tomcat pour qu’Apache ne serve que du contenu statique, tout en demandant du contenu dynamic à tomcat.

En utilisant la directive JKmount (ou autres), vous pouvez spécifier exactement quelles requêtes sont envoyées à Tomcat.

Les demandes de contenu statique, telles que des images, seraient directement envoyées par Apache, à l’aide d’une configuration d’hôte virtuel standard, tandis que les autres demandes, définies dans la directive JKMount, seraient envoyées aux employés de Tomcat.

Je pense que cette mise en œuvre vous donnerait le plus de flexibilité et de contrôle sur l’application globale.

Aucune des solutions basées sur la définition de XML n’ayant fonctionné pour moi, j’ai trouvé cette réponse très utile. A pris environ une minute et un petit changement de code: j’ai modifié cette ligne

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

dans

this.basePath = getInitParameter("basePath");

Ceci est très simple et facile à gérer le contenu statique à partir du dossier webapps extérieur dans tomcat.

Editez simplement le fichier server.xml sous $ CATALINA_HOME / config / server.xml comme ci-dessous et redémarrez le tomcat.

  ****   

Ajoutez l’élément de contexte dans l’élément hôte avec deux atsortingbuts docBase et path.

1) docBase: représente le répertoire du disque dur 2) path: représente l’URI sur lequel vous souhaitez diffuser le contenu statique.

Par exemple: Si vous avez 7.png dans le répertoire C: \ Ankur \ testFiles, vous pouvez accéder au fichier 7.png comme ci-dessous:

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

Pour plus de détails, consultez le blog

Plusieurs années plus tard, nous pouvons faire ce qui suit avec Spring Web MVC, dans notre fichier webapp-servlet.xml :