2013-10-14 187 views
0

假设我的Web应用程序在Eclipse的开发阶段,路径为C:\eclipse\workspace\myapp(Windows)。如何在与Web应用程序相同的目录中创建文件夹?

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

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

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

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

编辑:

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

+3

只是一个评论,在实践中这是一个非常糟糕的主意,你会希望将文件存储在某种文件系统中,比如像[Amazon S3](http://aws.amazon.com/s3/ ) – david99world

回答

0

应该把工作做好:

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

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

一个简单的方法和便携的方式做,这是放置在你的web.xml的myappfiles位置:

<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> 

然后从使用GenericServlet.getInitParameter你的servlet中读取它并使用它:

public class MyServlet extends HttpServlet 
{ 
    private String myAppFilesDir; 

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

} 
+0

了解,并且是一个很好的做法。在这种情况下,你并不是真正在你的应用程序的硬编码,而是你的应用程序工作文件的位置。如注释所示,将这两者分开是一种很好的方法,因为这样可以升级servlet容器,而不会影响应用程序需要的文件。但是,如果您想要一致地定义应用程序的位置,则应该使用@ KayKay的解决方案,确保始终定义CATALINA_HOME,或者使用您自己的环境变量来避免在同一台计算机上部署多个tomcat的情况下出现问题。 – lreeder

0

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

想象一下,有人正在用jsp中实现的基本文件浏览器上传名为“explorer.jsp”的文件:如果不考虑它,tomcat会很乐意将此解释为需要在服务器端执行的代码。

你想要做的是:

  • 查找上传目录,某个地方,以及存储文件存在。
  • 编写一个下载servlet来提供该位置的文件。

你需要一个一点多做一些工作这种方式,但由此产生的安装这么多的安全外的开箱。

+0

这是@ david99world的评论。 – lreeder

+0

感谢 - 更正。我不知道我的眼睛对我做了什么 –

相关问题