我在同一个tomcat实例上运行了3个网络应用程序,一个应用程序( ZaapMartAdmin )供管理员将文件上传到另一个应用程序( ImageUploads )目录,第三个应用程序( ROOT )只是读取上传到的文件( ImageUploads )并从那里显示图像文件。 我从here,here,here和here获得了一些想法。
这是我的servlet中的相关代码(请注意:servlet正在 ZaapMartAdmin 上运行):
//...
String fileName = generateFileName(request);//Generate the image file name
byte[] imageBytes = getByteArray(request);//Generate the image bytes
//Where to save the image part
ServletContext adminContext = request.getServletContext();//ZaapMartAdmin context
ServletContext rootContext = adminContext.getContext("/");//ROOT context
ServletContext uploadsContext = rootContext.getContext("/ImageUploads");//ImageUploads context
String absolutePath = uploadsContext.getRealPath("");
File imagesDirectory = new File(absolutePath + File.separator + "images");
if(!imagesDirectory.exists())
imagesDirectory.mkdir();
try(FileOutputStream fos = new FileOutputStream(absolutePath + File.separator + "images" + File.separator + fileName);)
{
fos.write(imageBytes);//<-- store the image in the directory
//... store file name to database ...
}
//...
从服务器端,我的目录结构如下所示:
现在的问题是,当我运行此servlet时,文件将保存在“ ZaapMartAdmin ”目录中,而不是“ ImageUploads ”目录中。 并且它不会抛出任何异常。
此外,我在每个应用的context.xml中添加了crossContext="true"
。
请问我在这里做错了什么?
答案 0 :(得分:0)
在对this part上下文进行更多研究之后,我能够推断出问题的解决方案是在tomcat / conf / server.xml文件中的Host标记中添加新的Context标记。 :
<Host name="admin.zaapmart.com" appBase="webapps/zaapmart.com/ZaapMartAdmin"
unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false">
<Alias>www.admin.zaapmart.com</Alias>
<Context path="" reloadable="true" docBase="/home/royalsee/tomcat/webapps/zaapmart.com/ZaapMartAdmin" crossContext="true"/>
<!-- next line of code did the trick -->
<Context path="/ImageUploads" reloadable="true" docBase="/home/royalsee/tomcat/webapps/zaapmart.com/ImageUploads" crossContext="true"/>
</Host>
我修改了我的servlet代码:
//...
String fileName = generateFileName(request);//Generate the image file name
byte[] imageBytes = getByteArray(request);//Generate the image bytes
//Where to save the image part
ServletContext adminContext = request.getServletContext();//ZaapMartAdmin context
ServletContext uploadsContext = adminContext.getContext("/ImageUploads");//ImageUploads context
String absolutePath = uploadsContext.getRealPath("");
File imagesDirectory = new File(absolutePath + File.separator + "images");
if(!imagesDirectory.exists())
imagesDirectory.mkdir();
try(FileOutputStream fos = new FileOutputStream(absolutePath + File.separator + "images" + File.separator + fileName);)
{
fos.write(imageBytes);//<-- store the image in the directory
//... store file name to database ...
}
//...
之后我重新启动了tomcat服务器,一切都按照我想要的方式运行了!