当我以托管模式启动网站时,所有声明为static的变量都会保留其在不同请求中的值。当我将其上传到Google App服务器时,它可以正常工作(?)。
即
我有public static String action = "index";
,如果我在另一个请求中将其值设置为“ someval”,它将显示为“ someval”而不是“ index”。
应该是这样吗?在哪里可以找到该问题的解决方案?
最佳答案
您的应用程序实例会保留在内存中,以处理多个请求,以提高效率。如果实例一段时间不处理任何请求,它将被关闭。因此,是的,您将看到此行为,在一个请求中更改全局会在另一个请求中影响它。更重要的是,Java Servlet规范允许执行多个线程,因此另一个请求可能正在执行,并且与另一个请求同时修改了全局变量。
在生产中,您的应用程序可能同时在许多服务器上运行。当然,这些变量没有相同的全局变量集,因此更改一个变量的值只会影响对同一处理程序的后续请求,而不会影响对其他处理程序的请求。
简而言之,Web应用程序中可变的全局变量通常不是一个好主意。