由于安全问题,公司不允许C++客户端直接和DB交互,而是经由JAVA WEB服务,
我自己的思路是把java的webserver端做成RESTfull的服务,
先是C++ Client通过HTTP GET http://localhost/GetList或者HTTP POST http://localhost/UpdateList
这样的HTTP协议调用JAVA端的Method,参数放在HTTP Head里面,
然后Java和DB交互,最后把结果通过JSON的数据返回到C++客户端,C++自己把数据解析还原成需要的数据结构。
请问这样做合理吗?有没有更好的方法呢?
java有什么比较好的RESTfull的框架吗?(能够返回JSON格式数据的)
最后还想问一下,传输的时候JSON数据是不是二进制流的数据呢?
期待各位高手的解惑,多谢了

解决方案 »

  1.   

    答:
    1)你的C++ client程序其实就是一个HTTP协议的客户端程序而已。你的C++ client程序使用支持HTTP的组件向WEB SERVER发送HTTP请求(无论GET还是POST,看你的需要)就行了。
    2)WEB SERVER端,你使用的是JAVA WEB技术,则可用JAVA WEB技术中任何一种都可以来进行数据库访问或业务逻辑处理
    3)JAVA服务器端使用任何一种JSON的JAVA类库包(很多,看你的需求见:http://www.json.org/),来将数据处理成JSON形式。
    4)JSON数据是文本数据(面向人容易读,同时机器也方便处理的一种文本数据的格式而已。没有什么奥秘的。)
    以上仅供你参考
      

  2.   


    多谢你的回复,
    那么有什么具体的方案吗?
    比如用Restlet搭建REST服务器,能否返回给C++端JSON数据呢?
      

  3.   

    用Restlet搭建REST服务器,能否返回给C++端JSON数据呢?
    答:当然可以。但要用到http://www.json.org中提供的org.restlet的JSON扩展包org.restlet.ext.json中类:
    org.restlet.ext.json.JsonRepresentation,可以不妨将Restlet放在某一个WEB 容器中运行,比单独作REST服务器似乎好些。
      

  4.   


    恩,我是打算和WEB站点放在一起,
    还有一点想问一下,如果用restlet的话,
    C++端get方法的时候,参数传递给restlet比较好?
    post方法是,是否可以传个文件(application/octet-stream)给restlet?
      

  5.   

    还有一点想问一下,如果用restlet的话, 
    C++端get方法的时候,参数传递给restlet比较好? 
    post方法是,是否可以传个文件(application/octet-stream)给restlet?
    答:1)C++端get或post都可以。看你参数的数据量大小或你的restlet的是GET或POST方式处理的
    2)可以。可以自己从流直接读,或者借助于接收文件上传的JAVA类库。
      

  6.   

    c++怎么传文件给reslet 求详细解释