如何在多个jsp页面之间共享存储对象?

时间:2014-06-06 14:56:18

标签: java jsp javabeans

我希望在多个JSP页面和会话之间从磁盘加载后共享一个对象。到目前为止,我找到的最接近的解决方案是:

<jsp:useBean id="inventory" class="shared.Inventory" scope="application" />

然而,这限制了我使用新bean。我想加载一个在应用程序启动时保存到磁盘的对象,并在所有JSP页面上共享它。

1 个答案:

答案 0 :(得分:3)

您应该在应用程序启动时使用ServletContextListener加载对象。然后,将其存储在应用程序范围内。

public class AppListener implements ServletContextListener {
    public void contextInitialized(ServletContextEvent sce) {
        //application is deployed
        //create your object and load it
        Inventory inventory = ...
        //get the application context
        ServletContext servletContext = sce.getServletContext();
        //store the object in application scope
        servletContext.setAttribute("inventory", inventory);
    }
    public void contextDestroyed(ServletContextEvent sce) {
        //application is undeployed
    }
}

然后,相应地在web.xml中注册过滤器:

<listener>
    <listener-class>package.where.you.store.AppListener</listenerclass>
</listener>

在部署应用程序之后,bean可以在所有用户的所有页面中使用,并且可以通过表达式语言访问:

${inventory.someField}