我有一個應用程序,其中Servlet有一個名爲Update(ReqIn, ReqOut)
的方法。我把它從doGet
& doPost
並傳遞請求和響應變量,它然後由Update(...)
填寫以下靜態變量:在Java Servlets中使用靜態變量(例如在AppEngine中)
...
public class Server extends HttpServlet {
public static HttpServletRequest In = null;
public static HttpServletResponse Out = null;
public static boolean isDebug = true;
public static boolean isPost = false;
public static String URL = "";
public static String IP = "0.0.0.0";
public static Cookie[] Cookies = null;
public static UserClass User = null;
public static boolean isLoggedIn = false;
...
}
基本上抽象最常用的東西&更新它在每次請求。這也使我能夠從任何地方訪問IP地址&當前用戶數據的網站,通過書面方式只是Server.User.getUsername();
INSEAD做一個新的類實例每次頁面加載並使用更長的訪問代碼:Server.getUser().getUsername();
現在的問題是:當在多用戶環境(AppEngine上的Jetty)時,可以引入任何問題嗎?例如。一些線程/競速問題使用戶看到不正確的IP地址,或者在極端情況下突然以不同的用戶身份登錄?
或者我應該重寫代碼並將其更改爲Public UserClass User
而不是Public static UserClass User
等?
@Downvoter:小心給個理由?使用靜態是不好的,或者你可能*(但不應該)使用ThreadLocal? – 2009-12-07 11:32:00
servlet傳入請求和響應對象以捕獲處理特定請求的狀態。爲什麼要存儲一個靜態副本來處理請求?或者,爲什麼要在請求之間存儲靜態副本?這不是一個明智的做法。 – 2009-12-11 17:08:15
@JonSkeet(順便說一句,與你同意。) – 2009-12-11 17:08:57