0

我有一堂课GlobalData

public class GlobalData {
    public static  String SERVER_ROOT;
    public static  String LOGIN_JSP = GlobalData.SERVER_ROOT + "login.jsp";
    public static  String HOME_JSP = GlobalData.SERVER_ROOT + "s/home.jsp";
    public static  String Logout = GlobalData.SERVER_ROOT + "Logout";
    public static ServletContext SERVLET_CONTEXT;
 }

我从 contextListener 设置这些字符串

        GlobalData.SERVLET_CONTEXT = contextEvent.getServletContext();
        GlobalData.SERVER_ROOT = GlobalData.SERVLET_CONTEXT.getContextPath()+"/";

        System.out.println("setting server root : " + GlobalData.SERVER_ROOT);
        System.out.println("setting Home jsp : " + GlobalData.HOME_JSP);
        System.out.println("setting Login : " + GlobalData.LOGIN_JSP);
        System.out.println("setting Logout : " + GlobalData.Logout)

输出是:

setting server root : /JCMM/
setting Home jsp : nulls/home.jsp
setting Login : nulllogin.jsp
setting Logout : nullLogout

我无法理解这种行为。谁能找到,问题出在哪里?

4

1 回答 1

6

初始化类时GlobalData,会设置所有静态变量。没有值SERVER_ROOT,所以它被初始化为null。然后初始化接下来的 3 个变量。用于+连接字符串时,anull会产生字符串“null”,因此 3 个值LOGIN_JSPHOME_JSP和中的每一个都Logout以“null”开头。

稍后,您设置了 SERVER_ROOT,但您不更新其他 3 个,因此它们保留为前面带有“null”的字符串。

于 2013-03-20T21:01:41.713 回答