【发布时间】:2019-07-15 06:50:22
【问题描述】:
我有两个 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。有人可以帮我解决这个问题吗?
【问题讨论】:
-
在这种情况下,“全局变量”是什么意思?看起来您正在使用第一个 servlet 类的字段(实例变量),在这种情况下,您无法从另一个实例中检索它也就不足为奇了。
-
不要在 servlet 中使用字段,尤其是全局变量。因为多个用户可以同时运行 servlet。例如,您可以将内容存储在用户的 session 中。
-
就我们所知,有一个 if (isEven(getRandomNumber()) { return null; } return "5"; 在那里。我们怎么知道?
-
此外,您永远不应该创建 servlet 类的实例。 Servlet 实例只能由 servlet 容器管理。
-
我已经添加了代码。请立即检查。