如何使用Tomcat从webapps外部的公用文件夹提供图像文件?我不想在不同的端口上使用第二个Apache文件服务器,因为图像文件是同一个应用程序的一部分.我不想在webapps中为公共文件夹创建一个符号链接,因为我的应用程序被部署为war文件....是否有一个更简单的解决方案,类似于在webapps中使用静态内容的默认servlet,用于外部webapps之外的静态内容
这就是我做的方式,它对我来说很好.(在Tomcat 7.x上完成)
添加
到tomcat/conf/server.xml
文件.
Windows示例:
Linux示例:
像这样(在上下文中):
... ... ... ...
通过这种方式,您应该能够在以下位置找到文件(例如/var/project/images/NameOfImage.jpg
):
http://localhost:8080/project/images/NameOfImage.jpg
你可以有一个重定向servlet.在你的web.xml中你有:
images com.example.images.ImageServlet images /images/*
您的所有图像都将位于"/ images"中,这些图像将被servlet拦截.然后它将在相关文件中读取任何文件夹并立即将其提供给它.例如,假设您的images文件夹中有一个gif,c:\ Server_Images\smilie.gif.在网页上会是.在servlet中,
HttpServletRequest.getPathInfo()
会产生"/smilie.gif".servlet会在文件夹中找到哪个.
在Tomcat 7中,您可以使用"别名"属性.来自文档:
此属性提供了一个外部位置列表,可从该位置加载此上下文的资源.别名列表的形式应为"/ aliasPath1 = docBase1,/ aliasPath2 = docBase2",其中aliasPathN必须包括一个领先"/"和docBaseN必须要么.war文件或目录的绝对路径的.将在第一个docBaseN中搜索资源,其中aliasPathN是资源的前导路径段.如果没有这样的别名,那么将以通常的方式搜索资源.如果未部署上下文,则不会清空这些外部位置.
您可以将图像文件夹部署为单独的Web应用程序,并将该文件夹的位置定义为文件系统中的任何位置.
在enginename可能为"Catalina"且hostname可能为"localhost" 的目录中的XML文件中创建Context元素$CATALINA_HOME/conf/[enginename]/[hostname]/
.
根据您希望从中查看图像的路径URL命名文件,因此,如果您的webapp具有路径"blog",则可以命名XML文件blog#images.xml
,以便在以下位置显示您的图像example.com/blog/images/
XML文件的内容应该是
小心不要取消部署此webapp,因为这可能会删除所有图像!