我有两个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。有人可以帮我解决这个问题吗?
答案 0 :(得分:0)
在您的情况下,Organization1中的org1字段不是全局变量-它是Organization1类的私有字段。这意味着当您创建Organization1的新实例时,字段org1将被设置为其默认值。字符串的默认值为null。
如果您希望一切按我希望的方式工作,则必须将字段org1声明为静态。
private static String org1;
在这种情况下,Organization1类的所有实例将具有一个org1实例的链接。
但是,这种方法有问题。字段org1的值将随servlet Organization1上的每个请求一起重写。因此,了解静态字段的工作原理是一件好事,但在实际编程中却会闻到代码的味道。