将文件保存到在同一Tomcat实例中运行的另一个Web应用程序(不工作)

时间:2017-06-27 12:24:53

标签: java tomcat servlets

我在同一个tomcat实例上运行了3个网络应用程序,一个应用程序( ZaapMartAdmin )供管理员将文件上传到另一个应用程序( ImageUploads )目录,第三个应用程序( ROOT )只是读取上传到的文件( ImageUploads )并从那里显示图像文件。 我从herehereherehere获得了一些想法。

这是我的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 ...
}
//...

从服务器端,我的目录结构如下所示:

enter image description here

现在的问题是,当我运行此servlet时,文件将保存在“ ZaapMartAdmin ”目录中,而不是“ ImageUploads ”目录中。 并且它不会抛出任何异常。

此外,我在每个应用的context.xml中添加了crossContext="true"

请问我在这里做错了什么?

1 个答案:

答案 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服务器,一切都按照我想要的方式运行了!