Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/364.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在与web应用程序相同的目录中创建文件夹?_Java_Eclipse_File_Tomcat_Path - Fatal编程技术网

Java 如何在与web应用程序相同的目录中创建文件夹?

Java 如何在与web应用程序相同的目录中创建文件夹?,java,eclipse,file,tomcat,path,Java,Eclipse,File,Tomcat,Path,假设我的web应用程序在Eclipse中处于开发阶段,路径是C:\Eclipse\workspace\myapp(Windows) 我打算让它在同一目录级别生成一个文件夹(C:\eclipse\workspace\myappfiles)来存储上传的文件(通过newfile()) 然而,在生产阶段,我的web应用程序将位于路径/var/lib/tomcat7/webapps/myapp(Linux)。然后,它应该将文件存储在/var/lib/tomcat7/webapps/myappfiles中

假设我的web应用程序在Eclipse中处于开发阶段,路径是C:\Eclipse\workspace\myapp(Windows)

我打算让它在同一目录级别生成一个文件夹(
C:\eclipse\workspace\myappfiles
)来存储上传的文件(通过
newfile()

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

如何检测写入文件夹和文件的路径?

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

编辑:


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

它应该可以完成任务:

File currentDirectory = new File("");
String commonPath = currentDirectory.getAbsolutePath();
commonPath = commonPath.substring(path.lastIndexOf(File.separator) + 1);
File myFilesDir = new File(commonPath + "myappfiles");
myFilesDir.mkdirs();

它应该完成这项工作:

File currentDirectory = new File("");
String commonPath = currentDirectory.getAbsolutePath();
commonPath = commonPath.substring(path.lastIndexOf(File.separator) + 1);
File myFilesDir = new File(commonPath + "myappfiles");
myFilesDir.mkdirs();

没有从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>

没有从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>

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

假设有人正在上传一个名为“explorer.jsp”的文件,其中一个基本的文件资源管理器是在jsp中实现的:在不处理它的情况下,tomcat会很高兴地将其解释为需要在服务器端执行的代码

您要做的是:

  • 在某处找到一个上传目录,并将文件存储在那里
  • 编写一个下载servlet,为该位置的文件提供服务

这样您需要做更多的工作,但最终的安装更加安全。

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

假设有人正在上传一个名为“explorer.jsp”的文件,其中一个基本的文件资源管理器是在jsp中实现的:在不处理它的情况下,tomcat会很高兴地将其解释为需要在服务器端执行的代码

您要做的是:

  • 在某处找到一个上传目录,并将文件存储在那里
  • 编写一个下载servlet,为该位置的文件提供服务

这样您需要做更多的工作,但最终的安装会更加安全。

只是一个注释,这在实践中是一个非常糟糕的想法,您可能希望将文件存储在某种文件系统中,比如说只是一个注释,这在实践中是一个非常糟糕的想法,您希望将文件存储在某种类型的文件系统中,如say like Understand,这是一种很好的做法。在这种情况下,您并不是在硬编码应用程序所在的位置,而是在硬编码应用程序工作文件所在的位置。正如评论中所指出的,将这两者分开是一种很好的方法,因为这样可以在不影响应用程序所需文件的情况下升级servlet容器。但是,如果您想一致地定义应用程序的位置,您应该使用@KayKay的解决方案,确保始终定义CATALINA_HOME,或者使用您自己的环境变量,以避免在同一台机器上部署多个Tomcat时出现问题。理解,这是一个好的做法。在这种情况下,您并不是在硬编码应用程序所在的位置,而是在硬编码应用程序工作文件所在的位置。正如评论中所指出的,将这两者分开是一种很好的方法,因为这样可以在不影响应用程序所需文件的情况下升级servlet容器。然而,如果你想一致地定义你的应用程序的位置,你应该使用@KayKay的解决方案,确保总是定义CATALINA_HOME,或者使用你自己的环境变量来避免在同一台机器上部署多个Tomcat的情况下出现问题。这是@david99world的评论。这是@david99world的评论。