我需要创建目录并在servlet中读取它们。
如果我想在webapps/appName
目录中创建一个文件夹,我该怎么做呢?
目前如果我这样做:
File file = new File("conf\Conf.xml");
这将查看目录“{TOMCAT_HOME} \ bin \”
如何将默认目录指向“{TOMCAT_HOME} \ webapps \ appName \”
答案 0 :(得分:1)
如果我想在我的webapps / appName目录中创建一个文件夹,我该怎么做呢?
无。您应该忘记这种方法并寻找替代方法。无论何时重新部署WAR,甚至每当重新启动服务器时,webapp文件夹结构中所做的所有更改都将不可避免地丢失。
您需要准备一个具有读/写权限的固定文件夹,并将其绝对磁盘文件系统路径设置为配置设置(properties / xml文件)或VM参数。例如,/var/webapp/uploads
。这样您就可以按常规方式使用File
。
String root = getRootSomehow(); // Must return "/var/webapp/uploads".
File file = new File(root, "somefile.txt");
// ...
完全不同的替代方法是使用数据库。如果您将Web应用程序部署到不允许您在webapp上下文之外创建文件夹的主机,这将是唯一的选择。
答案 1 :(得分:0)
为什么要这样做的问题......最便携的方法是向你的servlet添加<init-param>
并以这种方式传递路径。
您也可以使用System.getenv()
获取TOMCAT_HOME
环境变量,假设它已设置。
答案 2 :(得分:0)
你只需要从servlet上下文获取真正的路径,这将提供你正在寻找的路径,做这样的事情,这段代码将创建当前日期作为名称的目录。如果要避免servlet启动延迟,请创建一个线程并将目录创建委托给线程。您可以像这样将目录路径保存到servlet上下文。
private static final String DIR_SERVLET_CTX_ATTRIB = "directoryPathAttrib";
public void init() throws ServletException {
StringBuilder filePathBuilder = new StringBuilder(getServletContext().getRealPath("/").toString());
filePathBuilder.append(File.separator);
filePathBuilder.append(new SimpleDateFormat("MM-dd-yyyy").format(new Date()));
System.out.println("Directory path: "+ filePathBuilder.toString());
File file = new File(filePathBuilder.toString());
if(!file.exists())
{
file.mkdir();
System.out.println("finished creating direcotry");
}
getServletContext().setAttribute(DIR_SERVLET_CTX_ATTRIB, filePathBuilder.toString());
}
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, java.io.IOException
{
String dirPath = (String)getServletContext().getAttribute(DIR_SERVLET_CTX_ATTRIB);
File file = new File(dirPath + File.separator + "test.txt");
FileOutputStream fis = new FileOutputStream(file);
fis.write("Hello".getBytes());
fis.flush();
}