我有两个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。有人可以帮我解决这个问题吗?
在您的情况下,Organization1中的字段org1不是全局变量 - 它是类Organization1的私有字段。这意味着当您创建Organization1字段的新实例时,org1将设置为其默认值。 String的默认值为null。
如果你想让一切按照我想要的方式工作,你必须将字段org1声明为静态。
private static String org1;
在这种情况下,类Organization的所有实例都将具有指向一个org1实例的链接。
但是,这种方法存在问题。对于servlet Organization1上的每个请求,都将重写字段org1的值。因此,了解静态字段的工作方式是一项很好的任务,但在实际编程中却有代码味道。