当我以托管模式启动我的网站时,所有声明为静态的变量都会在不同的请求中保留它的值。当我将其上传到谷歌应用服务器时,它工作正常(?)。
即。
我有public static String action = "index";
,如果我在另一个请求中将其值设置为“someval”,则会显示“someval”而不是“index”。
它应该是这样吗?我在哪里可以搜索此问题解决方案?
答案 0 :(得分:1)
为了提高效率,您的应用实例会在内存中保留多个请求。如果实例暂时不处理任何请求,它将被关闭。所以是的,你会看到这种行为,在一个请求中更改全局会影响另一个请求。更重要的是,Java Servlet规范允许多个执行线程,因此另一个请求可以在执行另一个请求的同时修改您的全局变量。
在生产环境中,您的应用可能会在许多服务器上同时运行。当然,它们没有相同的全局变量集,因此将值更改为一个只会影响对同一个处理程序的后续请求 - 而不是对其他处理程序的请求。
简而言之,webapp中的可变全局变量通常是一个坏主意。
答案 1 :(得分:0)
使用public static final String action = "index";
将确保操作的值不会发生变化。
答案 2 :(得分:0)