Почему метод в классе сервлетов Java возвращает нуль при вызове из другого сервлета или класса Java? - PullRequest
0 голосов
/ 21 февраля 2019

У меня есть два Java-сервлета Организация1 и Организация2.Я сохранил значение ответа Organization1 в одну глобальную переменную с именем org1.Затем я создал метод getOrg1Name () в Organization1, который возвращает значение, сохраненное в этой глобальной переменной org1.Пожалуйста, проверьте код ниже:

   public class Organization1 extends HttpServlet {

    private String org1;

    public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        PrintWriter pw = response.getWriter();
        response.setContentType("text/html");

        this.org1 = request.getParameter("org1_name");

}
    public String getOrg1Name()
    {
        return this.org1;
    }

} Затем, после того как я создал 2-й сервлет Organization2.Внутри метода doPost () Organization2 я создал экземпляр Organization1, чтобы я мог вызвать этот метод getOrg1Name (), который возвращает значение, сохраненное в глобальной переменной org1.Пожалуйста, проверьте код ниже:

    public class Organization2 extends HttpServlet {

        private String org2;

        public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

            PrintWriter pw = response.getWriter();
            response.setContentType("text/html");

            this.org2 = request.getParameter("org2_name");

            Organization1 organization1 = new Organization1();
            String org1 = organization1.getOrg1Name();

            // org1 is always null. Why??   
    }
    }

Но каждый раз, когда метод getOrg1Name () возвращает ноль.Может кто-нибудь помочь мне с этим вопросом?

1 Ответ

0 голосов
/ 21 февраля 2019

Поле org1 в Organization1 не является глобальной переменной в вашем случае - это закрытое поле класса Organization1.Это означает, что при создании нового экземпляра поля Organization1 для org1 устанавливается значение по умолчанию.Значение по умолчанию для String равно нулю.

Если вы хотите, чтобы все работало так, как я вижу, вам нужно объявить поле org1 как статическое.

private static String org1;

В этом случае все экземплярыкласс Organization1 будет иметь ссылку на один экземпляр org1.

Однако у этого подхода есть проблема.Значение поля org1 будет перезаписываться при каждом запросе к сервлету Organization1.Поэтому хорошо понять, как работают статические поля, но запах в реальном программировании пахнет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...