2 csdnzlw csdnzlw 于 2016.02.25 16:38 提问

javaweb servlet访问另外一台机器

servlet访问另外一台机器,获得另外一台机器返回的一个值。
这方面没接触过,说下思路,有代码更好了。

3个回答

qsjh898
qsjh898   2016.02.26 11:15
已采纳

假设你的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发起的。

dullchap
dullchap   2016.02.25 17:05

可以写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,可以找很多事例

csdnzlw
csdnzlw 本地项目是简单的servlet+jsp,另外一台机器只要tomcat,这个方法也可以吗?
接近 2 年之前 回复
qsjh898
qsjh898   2016.02.25 20:09

tomcat只不过是一个WEB容器,说白了也就是个JAVA程序。只要是能用JAVA实现的功能,基本上都可以放在TOMCAT上跑。

csdnzlw
csdnzlw servlet调另外一个servlet,另外一个servlet查询数据库返回一个值。这样可以吗?另外一个servlet返回值怎么写啊
接近 2 年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!