我是一个 tomcat/servlet 新手,在过去的 3/4 天里一直被困在这个问题上。任何帮助表示赞赏! 我有一个 servlet 类,它有一个静态变量 name_print。静态函数 appInput 接受一个字符串并将 name_print 设置为该字符串。此类 appmonitor.java 的代码如下:
打包AppMonitor_pack;
导入报表...
private static String name_print;
public app_monitor() {
// TODO Auto-generated constructor stub
}
/**
* @param args
*/
public static void main(String[] args) {
// TOsDO Auto-generated method stub
}
public static void appInput (String name){
name_print = name;
System.out.println("From appInput " + name_print);
}
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
PrintWriter writer = resp.getWriter();
writer.println("<body> "+ name_print +" </body>");
}
我已将这个简单的项目包含在另一个名为 Sockets 的项目中。在那里,我有一个监听套接字,它接收一个名为 name 的字符串。我调用第一个项目的静态函数 appInput 并将接收到的字符串名称传递给它,以便它将 name_print 设置为这个新值。
Socket.java 中与此相关的行是: app_monitor.appInput(名称);
当我编译并运行它时,我看到值名称被设置为某个输入值“abc”。然后调试器进入另一个项目的 appInput 函数,并将 name_print 的值也设置为“abc”。
但是当我刷新运行tomcat服务器的网页时,它不再显示新设置的name_print值,而是继续显示第一次加载appMonitor servlet类时设置的旧值“null”。
我已经尝试找出问题 4 天无果。有什么想法/帮助吗? 谢谢!
最佳答案
WHen I compile and run this, I see that the value name is set to some input value "abc". Then the debugger goes into the appInput function of the other project, and sets the value of name_print to "abc" too.
听起来您正在独立于 Tomcat 运行它。这意味着您不仅拥有两个不同的类加载器——您拥有两个完全独立的 JVM,它们恰好运行在同一台计算机上。静态变量不会在这些进程之间共享。
目前还不清楚您要实现什么目标,但是如果您希望一个进程中的信息在一个单独的进程中可用,则需要使用一些跨进程通信,或者共享一些更全局的东西,而不仅仅是静态变量 - 例如在一个进程中将数据写入文件,然后在另一个进程中从文件中读取数据。
关于java - 静态变量在 Apache tomcat servlet 实例化中没有得到更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14048018/