我目前正在使用Java EE和Tomcat Server开发Wepapp。我正在使用上下文属性,例如:
ServletContext context = getServletConfig().getServletContext();
String defaultUser = (String) context.getAttribute("default_user");
但是最近我读到,当您在多台服务器中部署Web应用程序时,不建议使用上下文属性。
是真的吗? 我该如何解决?也许将来我会使用几台服务器(AWS或其他工具)。
谢谢!
PS:我实际上仅将上下文属性用于只读目的,只需读取配置参数即可。
答案 0 :(得分:2)
例如请参阅Servlet Context in Clustered Environment,其中说明了问题:
如果容器分布在许多虚拟机上,则Web应用程序将为每个JVM都有一个ServletContext实例。
上下文属性对于创建它们的JVM是本地的。这样可以防止ServletContext属性成为分布式容器中的共享内存存储。当需要在分布式环境中运行的servlet之间共享信息时,应将这些信息放置在session中,存储在数据库中或在Enterprise JavaBeans组件中设置。如果要跨多个JVM处理会话属性,则它们必须是可序列化的,这是群集的要求。可以通过将会话属性的某些字段声明为临时字段来使其不集群。