假设我的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映射直接文件访问的路径。
答案 0 :(得分: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();
答案 1 :(得分:0)
从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");
}
}
答案 2 :(得分:0)
正如david99world在评论中所说:这是一个非常糟糕的主意。此外,它甚至可能不适用于未来版本的tomcat或不同的配置:Tomcat可以设置为根本没有“爆炸”的web应用程序 - 例如从压缩的*.war
文件运行。此外,tomcat可能没有对其自己的webapps目录的写权限(为加强系统而采取的基本预防措施)。
想象一下有人正在上传一个名为“explorer.jsp”的文件,其中包含一个在jsp中实现的基本文件资源管理器:不管它如何,tomcat很乐意将其解释为需要在服务器端执行的代码。
您想要做的是:
你需要以这种方式进行更多的一点更多的工作,但最终的安装更加安全,无法开箱即用。