将Java桌面应用程序与RubyonRails Web应用程序连接
我正在尝试使用PostgreSQL数据库构建RubyonRails web应用程序,使用Hibernate构建带有H2数据库引擎的Java应用程序 我听说过JDBC、RMI和Sockets,但我对它们一无所知 问题是,我希望使用web应用程序中的数据,使用本地数据库在其中进行一些处理,最后我希望将更改上载到数据库,或者说,我希望在web数据库中创建新表,并立即在web中显示更改 例如,我想让学生在网络上注册,将学生卷号从网络数据库带到本地数据库,输入分数,最后我想能够在网络数据库中添加分数,并在网络上立即发布个人分数将Java桌面应用程序与RubyonRails Web应用程序连接,java,ruby-on-rails,ruby,database,web,Java,Ruby On Rails,Ruby,Database,Web,我正在尝试使用PostgreSQL数据库构建RubyonRails web应用程序,使用Hibernate构建带有H2数据库引擎的Java应用程序 我听说过JDBC、RMI和Sockets,但我对它们一无所知 问题是,我希望使用web应用程序中的数据,使用本地数据库在其中进行一些处理,最后我希望将更改上载到数据库,或者说,我希望在web数据库中创建新表,并立即在web中显示更改 例如,我想让学生在网络上注册,将学生卷号从网络数据库带到本地数据库,输入分数,最后我想能够在网络数据库中添加分数,并在
如果有人能帮助我,我将不胜感激。处理此问题的最佳方法是从web应用程序提供一个API,外部应用程序可以与之交互。Rails的一个优点是它基本上支持这种开箱即用的功能 采取典型的控制器操作从web查看学生
class StudentsController < ApplicationController
def show
@student = Student.find(params[:id])
end
end
这设置了ActionController的一个称为响应器的功能。现在,当向/students/1.json
发出请求时,控制器将在学生模型上调用作为_json
,默认情况下,学生模型将获取所有模型属性并将其转换为json对象。这可以通过在学生模型中重写为_json来定制
要进行更新,您可以遵循类似的模式。您可以使用PUT请求向服务器提交/students/1.json
。请求不是JSON格式的,您使用的库可能支持设置变量,请确保它是Rails期望的格式(即student[field]
)。Rails中间件将负责其余部分
class StudentsController < ApplicationController
respond_to :html, :json
def update
@student = Student.find(params[:id])
@student.update_attributes(params[:student])
respond_with(@student)
end
end
class StudentsController
请注意,对于响应者,没有检查更新属性是否有效,而respond\u with
将为您执行此操作。如果有错误,您将得到一个HTTP 422不可处理实体作为响应代码,响应的主体将是一个带有错误的JSON对象
同样值得一提的是,如果您更喜欢xml响应体而不是json,那么在所有这些示例中都可以用
xml
替换json
。解决问题的方法是(REST)API
我建议在API/v[版本号]下为您的API创建单独的控制器/
这里有一个Ryan Bates关于如何构建REST API的非常好的例子
您可以在这里找到API的代码示例
然后可以通过HTTP请求获取数据
例如,要获取应用程序中用户的数据,您将在url中执行http请求(您将在api和版本名称空间下的routes.rb中定义)/:username
乙二醇
您将得到一个JSON响应,如
user: {
username: "ausername"
email: "ausername@amaildomain.com"
.....
如果您有任何问题,请随时问我:)
问题更新
当然,您可以通过这种方式添加数据。您只需将正确的json导出到正确的url即可
我在这个应用程序中做了一个例子
例如:
在这个应用程序中,我通过Javascript(主干)保存任务。同样的规则也适用于Java(和任何其他语言)我是否能够使用Java应用程序中的这些方法添加数据和创建新表?这是否意味着我只能编辑、更新和删除现有数据。我可以用这些方法创建一个新表吗?一个新表?不,如果这是您的意思,您可以使用现有模型创建新记录。好的。一个新的记录就可以了。谢谢
user: {
username: "ausername"
email: "ausername@amaildomain.com"
.....