从Servlet创建文件和目录

时间:2013-12-05 21:22:01

标签: java file servlets directory

我无法创建目录或写入文件。

这返回false:

String cwd = this.getServletConfig().getServletContext().getRealPath(".");
(new File(cwd + File.separator + 'dir')).mkdir();

并抛出异常:java.io.FileNotFoundException: /var/lib/tomcat7/webapps/code/./users/foo/test (Brak dost?pu) :(访问被拒绝)

PrintWriter out = new PrintWriter(path(user, filename));
out.print(content);

我正在使用tomcat运行Xubuntu。我不在apps目录中仅使用WAR文件符号链接。我是app目录的所有者(与其他文件相同)。

3 个答案:

答案 0 :(得分:0)

您需要指定绝对路径:

(new File('/users/foo/dir')).mkdir();

我建议使用java.home变量。

或者,您可以向运行java进程的用户授予写入权限。

答案 1 :(得分:0)

我只是将group设置为tomcat7作为我的目录。

sudo chown $(whoami):tomcat7 myapp

答案 2 :(得分:0)

不幸的是,大多数发行版都没有创建开发人员友好的Java运行时环境。

以下是最佳做法:

  1. 下载并安装Oracle JDK而不是openJDK(在此步骤中您 可能会意识到Ubuntu和基于debian的发行版很糟糕 发展)
  2. 创建用户:

    useradd -m -G users -s /bin/bash tomcat
    
  3. 下载最新鲜的tomcat,将其解压缩到/opt/tomcat-7.0.x

  4. 创建符号链接:

    ln -s /opt/tomcat-7.0.x /opt/tomcat
    
  5. 安装rc脚本(说明对RHEL有效,我不知道如何在Ubuntu中完成):

    ln -s /opt/tomcat/bin/cacalina.sh /etc/init.d/tomcat7
    chown tomcat /etc/init.d/tomcat7
    chmod +s /etc/init.d/tomcat7
    
  6. 将此脚本添加到自动启动:

    chkconfig tomcat7 on
    
  7. 启动服务器

    service tomcat7 start
    
  8. 在这种环境中,您不会遇到问题,因为$ {user.home}将指向可写目录。