先祝大家新年快乐,我有下面这样一个问题。
在用struts1做一个系统的时候,要访问另一个系统的DB,那个系统是另一个公司做的,他们用的是不同的web server,DB也是他们自己的。我需要更新他们那边DB里的一些字段,可是他们并不允许我直接去访问他们的DB,而是给了我一个接口,说是传给它固定格式的参数,就可以调用他们那边的一个什么东西,就可以更新了。
他们给的格式是这样的:
http://xxx.xxx.xxx.xx/xx/xxxx=xxx&xxx=<参数1>&xxx=<参数2>
他们说让我直接访问这个格式的东西就可以完成更新了,想问问大家,这是一个什么东西呢,是那个URL下的一个可执行文件么?而且我在我的action里面怎么使用这个东西,又如何接受更新是否成功的返回值呢?大家有用过类似的这种写法的么,麻烦能指点一下,有类似代码最好。看在我大过年还在加班的份上,帮个忙吧,谢谢了。

解决方案 »

  1.   

    恩,他给你的可以看成是一个API啦,你先要去问一下这个API会不会返回值,返回什么样的值,通过哪个接口返回,直到这些你才能拿到confirm的值。这样给API还是很不普遍的说 - -..因为很危险。 不过如果你不知道会不会返回值,貌似你只能用这个API执行一些命令。 action 里面进行数据库操作的时候,调用这个接口就好:xxx = "http://xxx.xxx.xxx.xx/xx/xxxx=xxx&xxx="+<参数1>+"&xxx="+<参数2>然后就像 URL 一样直接访问这个网络就好。
      

  2.   

    这是一种传参的方式,前面http://xxx.xxx.xxx.xx/xx/xxxx=xxx是接收数据的地址,和http://127.0.0.1(也就是localhost):8080/company/test.do?actionType=test是
    一个意思,后面&xxx= <参数1>&xxx= <参数2> 是你需要更新的数据,如name="test"&
    class="test"。
      

  3.   

    谢谢大家,那么具体的写法是应该象下面这样么String url = "http://xxx.xxx.xxx.xx/xx/test.do?name=" + 参数1 + "&id=" + 参数2;
    String result = new ActionForward(url);result是返回值,是这样的么?
      

  4.   

    String result = new ActionForward(url); 
    这怎么看都不对啊,哪位明白人快来帮帮忙吧
      

  5.   

    我也不懂这个,呵呵。
    试试直接把他给的这个地址直接在浏览器中打开,看看显示什么,如果确实是你要的东西,就用ajax的方式加载,然后用js的方式获取里面需要的数据,再提交到后台,就能抓到了。不过这个的可能性极小。
      

  6.   


    这个我也不懂
    貌似你只能用这个API执行一些命令。 action 里面进行数据库操作的时候,调用这个接口就好: xxx = "http://xxx.xxx.xxx.xx/xx/xxxx=xxx&xxx="+ <参数1>+"&xxx="+ <参数2> 然后就像 URL 一样直接访问这个网络就好。
      

  7.   

    通过get方式将参数传到目标页面并且在目标页面完成更新操作有啥想不开的?至于接受返回的值么 你可以通过读取目标页面的输出流来搞定 这个也不是不行吧 尝试尝试新年快乐
      

  8.   

    http://xxx.xxx.xxx.xx/xx/xxxx=xxx&xxx= <参数1>&xxx= <参数2> 将参数传到后台 调用那个方法
      

  9.   

    直接用socket连接,或者用file uri链接 就可以了
      

  10.   

    应该是个url,使用网页跳转就行了。
      

  11.   

    就是个接口嘛,通过url的参数,传递你的数据,参数名是接口规定好的,参数值是你的数据,拼好url传过去就好了,至于对方系统是否有返回值,还要看接口,不过修改数据库操作应该是有返回值的,根据返回值,判断你的数据是否修改成功,然后再做相应处理。
    采用这种方式的目的是通过url的方式,使两个系统联系起来,你不必知道那个系统的内部实现,调用接口就可以完成你系统的功能了。
      

  12.   

    这是一种传参的方式,前面http://xxx.xxx.xxx.xx/xx/xxxx=xxx是接收数据的地址,和http://127.0.0.1(也就是localhost):8080/company/test.do?actionType=test是 
    一个意思,后面&xxx= <参数1>&xxx= <参数2> 是你需要更新的数据,如name="test"& 
    class="test"。
      

  13.   

    大家都说这是个url的传参方式,可这要怎么调呢,谁能给个代码么,我真是没太想明白。
    我感觉可能是rmi吧,不过不管怎么样这周会有个结果,到时候把结果贴出来再结帖。
      

  14.   

    看你在哪里调用了,如果在页面调用,直接将页面跳转到http://xxx.xxx.xxx.xx/xx/xxxx=xxx&xxx= <参数1>&xxx= <参数2>,可以给一个链接或者按钮,调用js跳转,window.location='http://xxx.xxx.xxx.xx/xx/xxxx=xxx&xxx= <参数1>&xxx= <参数2>'就可以了,如果在后台servlet或者是action中调用,就要使用URLConnection发送请求了
      

  15.   

    我是要在action中调用的。像BearKin,dickli1986说的需要用到URLConnection 来远程调用。
    把客户端代码贴出来大家参考一下import java.net.*;
    import java.io.*;public class HelloWorldGet {
      public static void main(String[] args) {
        try {
          // URL object 生成
          URL helloURL = 
             new URL("http://xxx.xxx.xxx.xx/xx/xxxx=xxx&xxx= <参数1>&xxx= <参数2>");
          BufferedReader in = new BufferedReader(
                                    new InputStreamReader(
                                    helloURL.openStream()));      // 逐行读入
          String line;
          while ((line = in.readLine()) != null) {
                    System.out.println(line);
          }
          in.close();
        } catch (IOException e) {
          e.printStackTrace();
        }
      }
    } 
    这样可以读取目标页面的out.println输出流来获得参数。
    这样是基本实现了,但是后来讨论了一下,感觉上这样做在安全上存在隐患,任何知道这个URL的人,仅仅是通过这个URL就可以直接对DB进行更新了。
    所以现在决定还要用LDAP这个东西,这个怎么用我还不太清楚,等弄清楚了,在贴出了。另外说一句,其实这个问题BearKin在9楼就已经明确的给出答案了,但是我太菜,没有领会。
    先感谢高手们的回答,但也觉得有时候高手们是不是都太忙了,给出的答案都太简略了,真心希望
    高手们回答问题时,能再略微详细一些,有些提示性的代码就更好了,哪怕两三行都行,下面的就能自己google了。
    结贴,再次感谢。