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