【问题标题】:getServletContext().getAttribute() returning null?getServletContext().getAttribute() 返回 null?
【发布时间】:2010-11-29 12:04:05
【问题描述】:

当尝试像这样设置上下文属性时:

void init()
{
    String testing = new String();
    testing = "This is a test";
    getServletContext().setAttribute("test", testing);
}

在一个 servlet 中,获取属性如下:

String testing = (String) getServletContext().getAttribute("test")

在第二个 servlet 中,testingnull

这是否意味着我的 servlet 位于不同的上下文中?如果是这样,我如何访问第一个 servlet 的上下文属性?请提供参考,因为我对 java/servlets 比较陌生。

我正在使用带有 Glassfish 3 的 Netbeans。

编辑:它们都在同一个 webapp 中,并且都在同一个 WEB-INF/web.xml 中定义

【问题讨论】:

    标签: java servlets


    【解决方案1】:

    如果两个 servlet 在同一个 webapp 中,默认情况下初始化的顺序是未定义的。所以它可能是,你的“第二个”servlet 在“第一个”之前初始化(根据 web.xml 中的顺序)。您可以通过在 servlet 标记中添加 load-on-startup 标记来修复它:

    <servlet>
      <servlet-name>first<servlet-name>
      ...
      <load-on-startup>1<load-on-startup>
    </servlet>
    
    <servlet>
      <servlet-name>second<servlet-name>
      ...
      <load-on-startup>2<load-on-startup>
    </servlet>
    

    【讨论】:

    • 谢谢!!这似乎有效。这让我整个早上都发疯了。你知道为什么这很重要吗?
    【解决方案2】:

    上下文 == WAR == webapps

    两个 servlet 必须位于同一个 webapp 下才能共享上下文。检查两个 servlet 类是否在相同的 WEB-INF/类下。

    【讨论】:

    • 它们都在同一个webapp中,并且都定义在同一个WEB-INF/web.xml中
    【解决方案3】:

    我相信这两个 servlet 需要在 Web 应用程序中,即打包在同一个 war 文件中,才能正常工作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-11-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-03-23
      相关资源
      最近更新 更多