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

Ali*_*gul 5 jsf netbeans weblogic primefaces

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

private static String fontPath = FacesContext.getCurrentInstance().getExternalContext().getRealPath("arialuni.ttf");
Run Code Online (Sandbox Code Playgroud)

但是当我通过Oracle Weblogic 11g控制台手动部署我的ear文件时,找不到ttf文件,我得到NullPointerException.

我已经尝试了几种方法让它工作但没有机会.如果有人可以帮助我,我会非常感激.

问候

Bal*_*usC 11

ServletContext#getRealPath()(和固有从而提高其JSF委托人ExternalContext#getRealPath())将返回null时servletcontainer被配置为扩大在RAM内存空间,而不是在本地磁盘文件系统空间部署的WAR.众所周知,"重型"服务器可以提高性能.至于有哪些,你可以进一步利用在物理本地磁盘文件系统路径没有办法File或者FileInputStream,null将被退回.

getRealPath()绝对是获得该文件的内容的目的错误的工具.永远不要使用getRealPath().您应该使用ServletContext#getResourceAsStream()(或其JSF委托者ExternalContext#getResourceAsStream()).

InputStream content = FacesContext.getCurrentInstance().getExternalContext().getResourceAsStream("/arialuni.ttf");
// ...
Run Code Online (Sandbox Code Playgroud)

请注意,InputStream出于显而易见的原因,您绝对不应将其指定为静态变量.如果你真的需要,请先将其读入,byte[]以便安全地关闭它.

也可以看看:


归档时间:

查看次数:

7876 次

最近记录:

9 年,1 月 前