我最终使用了 RMI。使用本教程,我得到了它的工作:http ://sacrosanctblood.blogspot.com/2008/11/rmi-tutorial-rmi-and-tomcat.html 。关键是:在启动 servlet 中,您必须确保要存根的 Object 是类范围的,而不是方法范围的。此外,不需要安全管理器代码。
这是我正在使用的 startServer servlet 的代码:
public class startServer extends HttpServlet
{
public static boolean isRegistered = false;
public IRemote service = new RemoteImpl();
@Override
public void init(ServletConfig config) throws ServletException
{
super.init(config);
if (!isRegistered)
{
try
{
IRemote stub = (IRemote) UnicastRemoteObject.exportObject(service, 0);
Registry registry = LocateRegistry.createRegistry(9345);
registry.rebind(IRemote.serviceName, stub);
System.out.println("Remote service bound");
isRegistered = true;
}
catch (Exception e)
{
System.err.println("Remote service exception:");
e.printStackTrace();
}
}
}
}
这是客户端代码:
public String getRemoteString()
{
String result = "";
try
{
Registry registry = LocateRegistry.getRegistry(9345);
IRemote serv = (IRemote) registry.lookup(IRemote.serviceName);
result = serv.executeRemote("Test");
}
catch (Exception e)
{
System.err.println("Remoteservice exception:");
e.printStackTrace();
}
return result;
}
目前它在同一台服务器上运行,但我确信我可以让 2 在以后工作。