【问题标题】:set up context variable in tomcat在tomcat中设置上下文变量
【发布时间】:2012-03-05 09:50:00
【问题描述】:

我在设置 tomcat 上下文变量时遇到问题。 我试过了:

  1. 在根文件夹中的 web.xml 中(注意:它不是 conf 文件夹中的那个) 我尝试添加上下文参数,不起作用,这并没有改变任何东西,上下文变量仍然为空

    <context-param>
        <param-name>testname</param-name>
        <param-value>testvalue</param-value>
    </context-param>
    
  2. 使用servlet getServletContext.setAttribute("test","ok") 设置变量,也不起作用,变量一直保持为null。

  3. 我曾尝试在 server.xml 中添加 crossContext=true(即使我只有一个 webapp),但它不起作用。

所以有什么建议吗?

谢谢

【问题讨论】:

  • 基本上,我想更改上下文变量的值,然后另一个 servlet 可以使用它
  • 功能需求是什么?设置一个可供部署在同一 Tomcat 服务器上的所有 Web 应用程序访问的变量?
  • 是的,该变量必须被同一服务器上的其他过滤器访问

标签: java tomcat servlets tomcat6 servlet-filters


【解决方案1】:

您需要将上下文参数添加到您的 web 应用程序的 /WEB-INF/web.xml,而不是“在根文件夹中”。

<context-param>
    <param-name>testname</param-name>
    <param-value>testvalue</param-value>
</context-param>

您需要通过ServletContext#getInitParameter()获取它:

String testname = getServletContext().getInitParameter("testname");
System.out.println(testname); // testvalue

ServletContext#set/getAttribute() 设置/获取应用程序范围内的属性。它们与上下文参数无关。

【讨论】:

  • 对不起,我应该更清楚一点,这个变量是由一个应用程序中同一服务器上的其他人访问的。目前,我在服务器上只有一个 webapp。另外,我无权在服务器上运行命令(它是一个共享托管服务器),所以环境变量可能不是一个好主意。
  • 难怪我总是得到 null,因为我使用了 getServletContext().getAttribute("test")。我以为只有在 中指定了 时才使用 getInitParameter("test"),现在我明白了
  • 上下文属性与上下文参数不同。 servlet 初始化参数只能由ServletConfig 或继承的GenericServlet#getInitParameter() 使用。至于设置值,请猜测...(提示:阅读 javadoc)。
  • 要了解属性是什么以及如何使用它们,请花点时间阅读stackoverflow.com/questions/3106452/…,总体上应该很有启发性。
猜你喜欢
  • 2012-02-09
  • 1970-01-01
  • 2012-06-30
  • 1970-01-01
  • 2011-09-21
  • 2011-06-22
  • 2019-08-22
  • 2012-09-05
  • 2017-03-20
相关资源
最近更新 更多