1

假设我的 Web 应用程序处于 Eclipse 的开发阶段,位于路径C:\eclipse\workspace\myapp(Windows) 上。

我打算让它在同一目录级别(C:\eclipse\workspace\myappfiles)生成一个文件夹,以在其中存储上传的文件(通过new File())。

但是,在生产阶段,我的 Web 应用程序将位于路径/var/lib/tomcat7/webapps/myapp(Linux)。然后它应该将文件存储在/var/lib/tomcat7/webapps/myappfiles.

如何检测这些路径来写入文件夹和文件?

我尝试了一些java.io.File方法,但似乎没有适合我完成任务的默认方法。

编辑 :

我需要这样的路径,所以我可以映射路径以通过 URL 直接访问文件。

4

3 回答 3

1

没有从 Tomcat 本身获取 Tomcat 路径的标准方法。您可以尝试查找 Tomcat 用户的工作目录,但这可能会根据您启动服务器的位置而改变。最安全的方法是将您的应用程序创建的任何文件的位置添加到您的配置中,然后让您的 webapp 检查该位置的配置。

一种简单且可移植的方法是将 的位置myappfiles放在 web.xml 中:

<servlet>
  <servlet-name>MyServlet</servlet-name>
  <servlet-class>com.example.mycompany.MyServlet</servlet-class>
  <init-param>
    <param-name>appfilesdir</param-name>
    <param-value>/var/lib/tomcat7/webapps/myappfiles</param-value>
  </init-param>
</servlet>

然后使用 Servlet 中的 GenericServlet.getInitParameter 读取并使用它:

public class MyServlet extends HttpServlet
{
    private String myAppFilesDir;

    public void init(ServletConfig config)
      throws ServletException
    {
       myAppFilesDir = getInitParameter("appfilesdir");
    }

}
于 2013-10-14T15:35:30.003 回答
1

正如 david99world 在他的评论中所说:这是一个非常糟糕的主意。另外,它甚至可能不适用于未来版本的 tomcat 或不同的配置:可以将 Tomcat 设置为根本没有“爆炸”的 web 应用程序——例如从压缩*.war文件运行。此外,tomcat 可能没有对其自己的 webapps 目录的写入权限(为强化系统而采取的基本预防措施)。

想象一下,有人正在上传一个名为“explorer.jsp”的文件,其中包含在 jsp 中实现的基本文件资源管理器:如果不关心它,tomcat 会很乐意将其解释为需要在服务器端执行的代码。

你想做的是:

  • 在某个地方找到一个上传目录,并将您的文件存储在那里。
  • 编写一个从该位置提供文件的下载 servlet。

这种方式你需要做更多的工作,但结果安装是开箱即用的安全得多。

于 2013-10-14T15:59:26.980 回答
-1

它应该完成工作:

File currentDirectory = new File("");
String commonPath = currentDirectory.getAbsolutePath();
commonPath = commonPath.substring(path.lastIndexOf(File.separator) + 1);
File myFilesDir = new File(commonPath + "myappfiles");
myFilesDir.mkdirs();
于 2013-10-14T15:32:44.123 回答