servlet访问另外一台机器,获得另外一台机器返回的一个值。
这方面没接触过,说下思路,有代码更好了。
假设你的Servlet是用来实现HTTP请求的,C为客户端,S1是你的servlet,S2是所谓的另一台机器中的Servlet。
现在C向S1发起了一个HTTP请求1,而S1在处理这个HTTP请求1的时候,发现需要向S2发送HTTP请求2获取某些数据,因此它就向S2发送HTTP请求2。
S2处理完HTTP请求2向S1返回结果,S1得到HTTP请求2的结果后,把结果数据包装在HTTP请求1的结果中,并向C返回结果。
画成流程图就是下面这样。
C————>S1--------->S2
C<————S1<---------S2
对于S1和S2来说,它们仍然是最简单的Servlet,接收并处理HTTP请求。只不过HTTP请求2是由HTTP请求1发起的。
可以写Socket,也可以直接用JDK的RMI(远程方法调用)
RMI调用例子如下:
package com.dullchap.rmi.test;
import java.rmi.Naming;
import java.rmi.Remote;
import java.rmi.RemoteException;
import java.rmi.registry.LocateRegistry;
import java.rmi.server.UnicastRemoteObject;
public class RMIServerTest extends UnicastRemoteObject implements MyRemote{
/**
* 抛出异常的默认构造方法
* @throws RemoteException
*/
public RMIServerTest() throws RemoteException {
super();
}
/**
* 远程调用处理,这里返回一个100的值
*/
public int start() throws RemoteException {
return 100;
}
/**
* 程序入口
* @param args
*/
public static void main(String[] args) {
try {
//在服务器端新建一个对象
RMIServerTest rmiTest = new RMIServerTest();
//注册1099端口
LocateRegistry.createRegistry(1099);
//将对象绑定到服务上
Naming.rebind("myServer", rmiTest);
System.out.println("myServer is ready.");
} catch (Exception e) {
System.out.println("myServer Server failed: " + e);
}
}
}
/**
* 定义一个接口,这个接口在服务器端和客户端需要同时存在
*
*/
interface MyRemote extends Remote {
public int start() throws RemoteException ;
}
package com.dullchap.rmi.test;
import java.net.MalformedURLException;
public class RMIClientTest {
public static void main(String[] args) throws RemoteException, MalformedURLException, NotBoundException{
//写上服务器端的IP和注册名
String url="rmi://127.0.0.1/myServer";
//获取RMI对象
MyRemote myRemote = (MyRemote)Naming.lookup(url);
//执行RMI对象
int result = myRemote.start();
//打印结果
System.out.println("从服务器返回的值是:"+result);
}
}
如不明白,可百度RMI,可以找很多事例
tomcat只不过是一个WEB容器,说白了也就是个JAVA程序。只要是能用JAVA实现的功能,基本上都可以放在TOMCAT上跑。