【问题标题】:Is there a way to have a "universal variable" in Java Web?有没有办法在 Java Web 中有一个“通用变量”?
【发布时间】:2014-07-24 14:29:20
【问题描述】:

有没有办法让一个变量影响 Java Web、Java Servlet 和 JSP 中的所有会话和所有用户?

我知道您可以将这些变量保存在数据库中,但还有其他方法可以实现吗?

【问题讨论】:

  • 您可以使用三种范围;请求、页面应用程序
  • 我的意思是一个可以从任何会话和客户端访问的会话,你知道,每次一个用户登录我的网络应用程序时,他们都会创建一个与其他会话分开的新会话,并且与其他会话没有通信除非他们通过数据库进行通信。
  • 再次阅读我的评论,因为您的问题明确询问了数据库之外的方法。
  • 你能解释一下他们三个吗?只是我们有需要存储在应用程序上的数据,但我们既不能拥有外部文档(例如我的意思是 .json)也不能将其存储在数据库中,但我们可以将其存储为所有人都可以访问的变量应用程序。此外,这是一个变量,因此它会随着时间而变化。
  • 然后你可以将它存储在应用程序范围内。要获得完整的解释,我建议您阅读 Head First Servlets 和 JSP。

标签: java jsp tomcat jakarta-ee


【解决方案1】:

我认为 servlet 上下文可以完成这项工作。

例如:

ServletContextListener

public void contextInitialized(final ServletContextEvent arg0) {
        arg0.getServletContext().setAttribute("my_var", 0);
        ...
}

HttpServlet

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        int myVar = (Integer) getServletContext().getAttribute("my_var");
        ...
}

【讨论】:

    【解决方案2】:

    声明公共类,然后添加静态变量。

    public class Globals {
       public static int globalVariable = 0;
    }
    

    那么Globals.globalVariable 将可以在应用程序中的任何位置访问。

    【讨论】:

    • 但这会在每次新用户登录时改变,不是吗?
    【解决方案3】:

    您可以通过多种方式实现:

    • 使用配置文件

      也许你可以使用配置文件,例如,有一个config.properties,它有level = 10,你在Web服务器启动时将它加载到Listener中,并通过Map存储在内存中,你可以更改/随时访问,也可以通过 json 将值发送到前端。

    • 在 jsp/servlet 中使用应用范围变量

    【讨论】:

    • ServletContext(应用程序范围变量)是一个不错的选择。
    • @arturojain 是的,这对于 jsp/servlet 应用程序来说是最好的。但是如果你想让它独立于编程语言,例如为 php 提供 API,您可能喜欢基于配置文件的方法。
    猜你喜欢
    • 2013-05-07
    • 1970-01-01
    • 1970-01-01
    • 2018-10-23
    • 1970-01-01
    • 2010-10-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多