Comment puis-je utiliser Tomcat pour servir des fichiers image d'un dossier public en dehors de webapps? Je ne veux pas utiliser un deuxième serveur de fichiers Apache sur un port différent, 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 à l'intérieur de webapps puisque mon application est déployée en tant que fichier war. Existe-t-il une solution plus simple, similaire à l'utilisation d'un servlet par défaut pour le contenu statique à l'intérieur de webapps, pour le contenu statique à l'extérieur de webapps?
Réponses
Trop de publicités?C'est comme ça que je l'ai fait et ça a bien fonctionné pour moi. Tomcat 7.x
Ajouter un <contexte> à tomcat / conf / server.xml
Exemple gagnant:
<Context docBase="c:\Documents and Settings\The User\images" path="/project/images" />
Exemple Lin:
<Context docBase="/var/project/images" path="/project/images" />
Comme ça:
<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">
...
<!--HERE THE MAGIC LINE-->
<Context docBase="/var/project/images" path="/project/images" />
</Host>
</Engine>
</Service>
</Server>
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
Vous pourriez avoir une redirection de servlet. En vous web.xml vous auriez:
<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>
Toutes vos images dans "/images", qui serait intercepté par la servlet. Il serait alors lire dans le fichier concerné dans tout ce dossier et de le servir en sortir. Par exemple, disons que vous avez un gif dans votre dossier d'images, c:\Server_Images\smilie.gif. Dans la page web serait <img src="http:/example.com/app/images/smilie.gif"...
. Dans la servlet, HttpServletRequest.getPathInfo()
donnerait "/smilie.gif". Qui la servlet trouverez dans le dossier.
Dans Tomcat 7, vous pouvez utiliser des "alias" de la propriété. À partir de la docs:
Cet attribut fournit une liste des lieux à l'extérieur à partir de laquelle pour charger les ressources pour ce contexte. La liste des alias doit être de la forme "/aliasPath1=docBase1,/aliasPath2=docBase2" où aliasPathN doit inclure l'un des principaux " / " et docBaseN doit être un chemin absolu, soit un .la guerre de fichier ou à un répertoire. Une ressource sera recherché dans la première docBaseN pour qui aliasPathN est l'un des principaux segments de tracé de la ressource. Si ce n'est pas alias, ensuite, la ressource va être recherché dans la manière habituelle. Ces emplacements ne seront pas vidés si le contexte de l'onu, déployés.
Vous pouvez déployer un dossier d'images séparément, comme une webapp et de définir l'emplacement du dossier pour être n'importe où dans le système de fichiers.
Créer un Contexte élément dans un fichier XML dans le répertoire $CATALINA_HOME/conf/[enginename]/[hostname]/
où enginename pourrait être "Catalina" et le nom d'hôte peut être 'localhost'.
Nom du fichier basé sur le chemin de l'URL que vous souhaitez que les images soient vues depuis, donc, si votre webapp a path "blog", vous pouvez nommer le fichier XML blog#images.xml
et pour que vos images sont visibles à l' example.com/blog/images/
Le contenu du fichier XML doit être <Context docBase="/filesystem/path/to/images"/>
Veillez à ne pas annuler le déploiement de cette webapp, que pouvait supprimer toutes vos images!
Au lieu de configurer Tomcat pour rediriger les requêtes, utilisez Apache comme une interface avec l' Apache Tomcat connecteur de sorte que Apache est uniquement de servir du contenu statique, tout en demandant tomcat pour le contenu dynamique.
À l'aide de la JKmount directive (ou autres), vous pouvez spécifier exactement laquelle les demandes sont envoyées à Tomcat.
Demandes pour du contenu statique, tels que des images, seraient desservis directement par Apache, à l'aide d'un standard configuration d'un hôte virtuel, tandis que d'autres demandes, défini dans le JKMount directive sera envoyé à Tomcat travailleurs.
Je pense que cette mise en œuvre serait de vous donner plus de flexibilité et de contrôle sur l'ensemble de l'application.