[英]Accessing linux local file system from java web application
我们在托管在apache服务器中的Web应用程序中使用java库。库中的ReadConfFile方法返回文件未找到错误。方法如下
public byte[] ReadConfFile()
{
try
{
File file = new File("/home/product/api/conf.txt");
if(!file.exists())
return "file not found".getBytes();
byte[] buf = new byte[(int) file.length()];
FileInputStream fis = new FileInputStream(file);
fis.read(buf);
return buf;
} catch (IOException e)
{
e.printStackTrace();
return null;
}
}
是否允许从 Web 应用程序访问本地文件系统? 如果是,那么是否需要设置任何访问权限?
快速回答您的问题:您可以从 Web 应用程序访问文件系统,但您必须检查您的应用程序服务器/Web 容器以了解如何配置 SecurityManager(如果已安装)。
但是,您阅读文件的方法存在严重问题,您应该解决:
不要检查if(!file.exists())
最好检查if(!file.isFile())
。 如果文件是目录,第一次检查也会返回 true。
如果没有文件,最好不要返回字符串、抛出异常或加载一些默认配置或做其他有用的事情。
您读取文件的逻辑非常糟糕。 如果 read 函数返回不同数量的可用字节(可能读取是分块的),您将得到一个损坏的结果。
您不要在 finally 块中关闭流(或者,如果您使用的是 Java 7,请使用 try 与资源)。
异常处理也不好。 打印堆栈跟踪不好,记录它会更好。 处理异常最好(抛出异常,或切换到某些默认配置,例如文件不存在时)。
编辑:如果您想访问客户端的文件系统,则无法直接通过在服务器上运行的 Web 应用程序来完成。 这当然必须通过在客户端上运行的代码来完成,并且您必须填写有关客户端正在运行的内容的更多详细信息,因为“标准”Web 应用程序将在客户端上具有 Javascript 和 (X)HTML ,不是爪哇。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.