Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/364.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在servlet中加载属性文件_Java_Jakarta Ee_Servlets - Fatal编程技术网

Java 在servlet中加载属性文件

Java 在servlet中加载属性文件,java,jakarta-ee,servlets,Java,Jakarta Ee,Servlets,我在WEB-INF中有一个属性文件,其中包含我的servlet需要使用的一些属性(如数据库密码等属性)。加载此文件的最佳方式是什么?我是否应该重写servlet的init方法,以便只加载一次文件 谢谢我不是说这种方法是正确的,因为我不使用JEE,但根据我的记忆,您可以使用ServletContextListener方法来实现这一点。就这样实施吧 class ContextListenerImpl implements ServletContextListener { @Override

我在WEB-INF中有一个属性文件,其中包含我的servlet需要使用的一些属性(如数据库密码等属性)。加载此文件的最佳方式是什么?我是否应该重写servlet的init方法,以便只加载一次文件


谢谢

我不是说这种方法是正确的,因为我不使用JEE,但根据我的记忆,您可以使用
ServletContextListener
方法来实现这一点。就这样实施吧

class ContextListenerImpl implements ServletContextListener {

    @Override
    public void contextDestroyed(ServletContextEvent sce) {
        //lets skip it for now
    }

    @Override
    public void contextInitialized(ServletContextEvent sce) {

        ServletContext sc = sce.getServletContext();

        //read parameter from properties and add it to servlet context attributes
        sc.setAttribute("yourParameterName", "value");
    }

}
例如,您应该能够在任何servlet中使用它

protected void doGet(HttpServletRequest request,
        HttpServletResponse response) throws ServletException, IOException {
    //...
    getServletContext().getAttribute("yourParameterName");
    //...
}
顺便说一句,属性的值还可以保存其他对象,而不仅仅是字符串

哦,别忘了将这个侦听器添加到您的web应用程序中。加上

<listener>
    <listener-class>full.name.of.ContextListenerImpl</listener-class>
</listener>

full.name.of.ContextListenerImpl

到您的
web.xml
文件。

我使用的是Netbeans和JBoss AS7,这些参数是否只针对一个servlet,还是也可以用于其他servlet?其他servlet也会使用它们。这是为什么这些参数不是web.xml中的上下文参数?听起来这是一个很好的用例…因为会有很多参数,我更喜欢将它们放在一个单独的文件中。这个解决方案允许其他servlet访问相同的属性吗?是的,整个web应用程序应该只有一个
ServletContext
,所以
getServletContext()
应在所有servlet中返回该类的相同实例。它也是我们通过
sce.getServletContext()在listener中获得的相同实例
因此所有servlet都将从相同的
ServletContext
读取属性。