0

我是一个 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(name);

当我编译并运行它时,我看到值名称设置为某个输入值“abc”。然后调试器进入另一个项目的 appInput 函数,并将 name_print 的值也设置为“abc”。

但是当我刷新运行tomcat服务器的网页时,它永远不会显示新设置的name_print值,而是继续显示appMonitor servlet类第一次加载时设置的旧值“null”。

我试图找出问题无济于事4天。有什么想法/帮助吗?谢谢!

4

1 回答 1

1

当我编译并运行它时,我看到值名称设置为某个输入值“abc”。然后调试器进入另一个项目的 appInput 函数,并将 name_print 的值也设置为“abc”。

听起来您是在与 Tomcat 分开运行的。这意味着您不仅有两个不同的类加载器 - 您还有两个完全独立的 JVM,它们恰好在同一台计算机上运行。静态变量不会在这些进程之间共享。

目前还不清楚您要实现什么,但是如果您希望来自一个进程的信息在一个单独的进程中可用,您将需要使用一些跨进程通信,或者共享一些比静态变量更全局的东西- 例如,将数据写入一个进程中的文件,然后从另一个进程中的文件中读取。

于 2012-12-27T00:42:10.350 回答