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 つの変数が初期化されます。を使用+して文字列を連結するnullと、文字列は「null」になるためLOGIN_JSP、 、HOME_JSP、およびの 3 つの値はそれぞれLogout「null」で始まります。

後で SERVER_ROOT を設定しますが、他の 3 つは更新しないため、先頭に「null」が付いた文字列のままです。

于 2013-03-20T21:01:41.713 に答える