Java - 动态Web项目 - 全局对象

时间:2014-06-13 17:40:50

标签: java java-ee web

我很兴趣创建一个全局对象,它将由我的所有servlet和所有JSP文件共享。 但我不明白该怎么做。 请指教。

对于senario,这个对象将包含我的servlet和jsp文件想从中获取信息的大量信息。 我知道如何在servlet和jsp之间传递对象。 但我不知道如何为整个"系统"初始化1个全局对象。或"网站"


<display-name>WebTest1</display-name>
<listener>
    <listener-class>listeners.AppListener</listener-class>
</listener>
<welcome-file-list>
    <welcome-file>MainPage.html</welcome-file>
    <welcome-file>MainPage.htm</welcome-file>
    <welcome-file>MainPage.jsp</welcome-file>
    <welcome-file>default.html</welcome-file>
    <welcome-file>default.htm</welcome-file>
    <welcome-file>default.jsp</welcome-file>
</welcome-file-list>
<servlet>
    <servlet-name>SimpleServlet</servlet-name>
    <servlet-class>servlets.SimpleServlet</servlet-class>
</servlet>

1 个答案:

答案 0 :(得分:4)

您应该将对象存储在应用程序上下文中。您可以在应用程序使用ServletContextListener开始时执行此操作。

public AppListener implements ServletContextListener {

    public void contextInitialized(ServletContextEvent sce) {
        //application is being deployed
        //register the "global" object here
        ServletContext sc = sce.getServletContext();
        MyGlobalClass globalObject = ...
        sc.setAttribute("globalObject", globalObject);
    }
    public void contextDestroyed(ServletContextEvent sce) {
        //application is being undeployed
    }
}

在web.xml中将此类注册为侦听器:

<listener>
    <listener-class>package.where.defined.AppListener</listenerclass>
</listener>

然后,您可以在Servlet和JSP中访问此对象:

的Servlet

public void doGet(...) throws ... {
    ServletContext servletContext = request.getServletContext();
    MyGlobalClass globalObject = (MyGlobalClass)servletContext.getAttribute("globalObject");
    //use it...
}

JSP:

${globalObject.someField}