【问题标题】:access tomcat alias dir from java从java访问tomcat别名目录
【发布时间】:2017-04-06 16:25:00
【问题描述】:

在 Tomcat7 中,有一个选项可以使用上下文中的别名,如下所示:

 <Context aliases="/up=/var/tomcat/upload"></Context>

有了这个,我可以从 webapp 外部访问文件。现在,我想从我的 Java 代码中写入和读取这个目录,但不知道如何。

我可以这样做:

servletContext.getResourcePaths("/up/")

这显示了 /var/tomcat/upload 的内容。

我怎样才能写到这个目录?

我对例外答案做了什么: 将此添加到 context.xml:

<Context aliases="/up=/var/tomcat/upload">
     <Valve className="org.apache.catalina.valves.RemoteAddrValve" allow=".*" />
     <Parameter name="uploadDir" value="/var/tomcat/upload"/>

这在我的 java 代码中:

String uploadDir = servletContext.getInitParameter("uploadDir") + subDir;
OutputStream bos = new FileOutputStream(uploadDir + fileName);

这可行,但我只能使用参数并跳过别名,因为对于 java 它没有帮助。所以我不太确定别名背后的想法是什么。我认为这是用于上传文件,因为重新部署此目录后,内容不会被覆盖。但是如果 java 只能使用额外的参数来访问它,那么它只能用于提供可能位于 webapp 内部(war 内部)的静态内容。

【问题讨论】:

    标签: java tomcat aliases


    【解决方案1】:

    您单独告诉您的 Java 代码上传文件夹 (/var/tomcat/upload) 的路径,以便它可以在那里读取/写入文件。

    例子:

    <Context aliases="/up=/var/tomcat/upload">
        <Parameter name="uploadDir" value="/var/tomcat/upload"/>
    </Context>
    

    你的java代码可以通过调用ServletContext.getInitParameter("uploadDir")获取参数值。

    【讨论】:

    • 所以像这样: String uploadDir = ServletContext.getInitParameter("uploadDir"); OutputStream bos = new FileOutputStream(uploadDir + file.getOriginalFilename());
    • 嗯,getInitParameter() 不是静态方法,所以你需要ServletContext 实例,你可能想使用new File(uploadDir, fileName) 来组合它们,否则可以。
    猜你喜欢
    • 2013-12-18
    • 1970-01-01
    • 2015-03-20
    • 2021-05-17
    • 2010-10-16
    • 1970-01-01
    • 2015-09-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多