为什么Java servlet类中的方法在从另一个java servlet或java类调用时返回null?

问题描述 投票:0回答:1

我有两个Java Servlets 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。有人可以帮我解决这个问题吗?

java servlets
1个回答
0
投票

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

如果你想让一切按照我想要的方式工作,你必须将字段org1声明为静态。

private static String org1;

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

但是,这种方法存在问题。对于servlet Organization1上的每个请求,都将重写字段org1的值。因此,了解静态字段的工作方式是一项很好的任务,但在实际编程中却有代码味道。

© www.soinside.com 2019 - 2024. All rights reserved.