gpt4 book ai didi

jsf - 使用 getRealPath() 从 bean 获取文件位置

转载 作者:行者123 更新时间:2023-12-01 17:56:01 26 4
gpt4 key购买 nike

我在从 back bean 访问外部文件时遇到问题。我想做的是使用 ttf 文件以便通过 iText 库使用字体。当我通过 Netbeans 7.2 运行我的应用程序时,下面的代码工作正常:

private static String fontPath = FacesContext.getCurrentInstance().getExternalContext().getRealPath("arialuni.ttf");

但是当我通过 Oracle Weblogic 11g 控制台手动部署 Ear 文件时,找不到 ttf 文件,并且出现 NullPointerException。

我尝试了多种方法让它发挥作用,但没有机会。如果有人可以帮助我,我将不胜感激。

问候

最佳答案

ServletContext#getRealPath() (本质上它的 JSF 委托(delegate)者 ExternalContext#getRealPath() )将返回 null当 servlet 容器配置为在 RAM 内存空间而不是本地磁盘文件系统空间中扩展部署的 WAR 时。众所周知,“重型”服务器这样做是为了提高性能。由于没有任何物理本地磁盘文件系统路径可供您在 File 中进一步利用。或FileInputStream , null将会被退回。

getRealPath()对于获取文件内容来说绝对是错误的工具。 Never ever use getRealPath() 。您应该使用 ServletContext#getResourceAsStream() (或其 JSF 委托(delegate)人 ExternalContext#getResourceAsStream() )。

InputStream content = FacesContext.getCurrentInstance().getExternalContext().getResourceAsStream("/arialuni.ttf");
// ...

请注意,您绝对不应该分配 InputStream出于显而易见的原因作为静态变量。如果您确实需要,请将其读入 byte[]首先,以便您可以安全地关闭它。

另请参阅:

关于jsf - 使用 getRealPath() 从 bean 获取文件位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21282920/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com