为什么从另一个Java Servlet或Java类调用Java Servlet类中的方法会返回null?

时间:2019-02-21 11:10:54

标签: java servlets

我有两个Java Servlet Organization1和Organization2。我已经将Organization1的响应值保存到一个名为org1的全局变量中。然后,我在Organization1中创建了方法getOrg1Name(),该方法返回保存在该全局变量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;
    }

} 然后,我创建了第二个servlet Organization2。在Organization2的doPost()方法中,我创建了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()返回null。有人可以帮我解决这个问题吗?

1 个答案:

答案 0 :(得分:0)

在您的情况下,Organization1中的org1字段不是全局变量-它是Organization1类的私有字段。这意味着当您创建Organization1的新实例时,字段org1将被设置为其默认值。字符串的默认值为null。

如果您希望一切按我希望的方式工作,则必须将字段org1声明为静态。

private static String org1;

在这种情况下,Organization1类的所有实例将具有一个org1实例的链接。

但是,这种方法有问题。字段org1的值将随servlet Organization1上的每个请求一起重写。因此,了解静态字段的工作原理是一件好事,但在实际编程中却会闻到代码的味道。