我创建了一个动态 Web 项目,并使用 Apache Tomcat 作为服务器。
在我的 servlet 中,我正在创建一个文本文件并希望在 JSP 中重用它。但是,当我执行以下简单操作时,默认情况下会在 Eclipse 的安装文件夹中创建它们:
File f = new file("test.txt").
我不知道为什么会这样。有没有办法在WebContent
目录中创建文件,因为我想让该文件在我的 JSP 中可供下载。
我创建了一个动态 Web 项目,并使用 Apache Tomcat 作为服务器。
在我的 servlet 中,我正在创建一个文本文件并希望在 JSP 中重用它。但是,当我执行以下简单操作时,默认情况下会在 Eclipse 的安装文件夹中创建它们:
File f = new file("test.txt").
我不知道为什么会这样。有没有办法在WebContent
目录中创建文件,因为我想让该文件在我的 JSP 中可供下载。
Java有一个“当前目录”的概念。当您通过 Eclipse 启动应用程序时,这可能确实指向您的安装目录。如果您不指定任何路径,则会在当前目录中创建一个文件。test.txt
因此,你最终在那里的原因。
该WebContent
目录是 Eclipse 特有的。您的代码不应依赖于将任何内容放在那里。只有在开发应用程序时才通过 Eclipse 启动应用程序,而不是在将其部署到实时服务器时。
此目录的内容将成为root
您的 .war 的内容,这是一个众所周知的位置,与您如何启动和部署应用程序无关,但您仍然不能依赖在运行时向该位置写入任何内容。您可以将您的应用程序部署为打包的 .war(可能用于实时部署),或者您可以将您的应用程序未打包部署,但您的应用程序服务器可能根本无法获取运行时所做的任何更改。
如果您确定您的应用程序仅在单个服务器上运行,您可以做什么将文件写入文件系统上的一个众所周知的位置,例如/tmp
,或/var/yourapp/files
等。然后,提供这些文件的代码可以从中获取它们地点。
如果您想根据 Java EE 规则 100% 安全地播放它,您可以将文件存储在具有可配置地址的 FTP 服务器之类的东西上。从技术上讲,您的战争可以在集群上的节点之间传送,并且请求最终可能会发送到不同的机器,因此依赖于本地文件系统将无法正常工作。
执行此语句this.getServletContext().getRealPath ("")
,您将获得 Tomcat WebServer 在运行时指向的路径。您可以添加一个文件夹“MyFolder”并调用此语句:
新文件(this.getServletContext().getRealPath(“”)+“/MyFolder/test.txt”);
无论如何,默认路径看起来像:
...\workspace\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\<NameOfYourProject>
请注意,当您创建一个新文件时,它不会出现在您的直接工作区中(检查.metadata路径),除非您更改了 Tomcat 应该指向的运行时位置。