Javascript Cassandra数据库的查询结果

Javascript Cassandra数据库的查询结果,javascript,java,html,cassandra,playframework-2.0,Javascript,Java,Html,Cassandra,Playframework 2.0,我正在创建一个基于Cassandra的web应用程序:目前正在使用Play框架。我通过Java驱动程序与Cassandra连接,但如何将查询结果嵌入到前端? 详细信息:我有一个用户列族,希望在我的页面上显示所有用户。 是否有将查询结果嵌入HTML或JavaScript的选项?或者还有其他常见的方法吗 提前谢谢,干杯 典型的方法是从能够动态构建网页的服务器上为网页提供服务。java的一个例子是提供最初由服务器(例如tomcat或glassfish)处理并处理为html的jsp模板的页面 比如说:

我正在创建一个基于Cassandra的web应用程序:目前正在使用Play框架。我通过Java驱动程序与Cassandra连接,但如何将查询结果嵌入到前端? 详细信息:我有一个用户列族,希望在我的页面上显示所有用户。 是否有将查询结果嵌入HTML或JavaScript的选项?或者还有其他常见的方法吗


提前谢谢,干杯

典型的方法是从能够动态构建网页的服务器上为网页提供服务。java的一个例子是提供最初由服务器(例如tomcat或glassfish)处理并处理为html的jsp模板的页面

比如说:

backend java queries cassandra (SELECT * FROM users)
  -> passes results to jsp
    -> jsp gets processed into html by server
      -> server sends html to user.
用于演示cassandra的web应用程序就是一个使用C*构建twitter克隆的示例。演示如何使用java和cassandra为网页提供服务。

Play使用“Twirl”作为模板引擎。当然,你可以改变它使用任何你喜欢的。最简单的输出仍然是纯文本

你使用Play和Cassandra。它们都是为异步编程而创建的。所以最有效的方法就是利用这种能力

还有一点-你要打印所有用户,这意味着结果可能是巨大的。更好的方法是按块打印,比如视频流,另一种方法是,结果可能太大,以至于服务器内存不足以同时满足几个请求

为了便于理解,我编写了一个简单的“单函数”解决方案。最好在实际程序中拆分它

package controllers;

import play.*;
import play.mvc.*;

import views.html.*;

import java.io.StringWriter;
import java.io.PrintWriter;

import com.google.common.util.concurrent.FutureCallback;
import com.google.common.util.concurrent.Futures;
import com.google.common.util.concurrent.MoreExecutors;

import com.datastax.driver.core.Cluster;
import com.datastax.driver.core.Session;
import com.datastax.driver.core.ResultSet;
import com.datastax.driver.core.ResultSetFuture;

public class Application extends Controller {

  public Result users(){
    // Cassandra connection information.
    String node = "localhost";
    int port = 9042;

    // Connect to the cassandra.
    Cluster cluster = Cluster.builder()
      .addContactPoint(node)
      .withPort(port)
      .build();
    Session session = cluster.connect();

    // Prepare output.
    Chunks<String> chunks = new StringChunks() {
            public void onReady(Chunks.Out<String> out) {

        // Query data from the cassandra.
        String query = "SELECT * FROM mykeyspace.users";

        // Do asynchronious query to the cassandra.
        ResultSetFuture resultSet = session.executeAsync(query);
        Futures.addCallback(resultSet,
          new FutureCallback<ResultSet>() {
            @Override
            public void onSuccess(ResultSet set) {
              try {
                // This cycle asynchronious as well.
                // It will fetch some data, then process it, then fetch more
                // All this done by cassandra driver
                set.forEach(row -> {
                        // Just plain text. You can output JSON as well.
                        out.write(row.toString());
                        out.write("\n");
                });
              } finally {
                out.close();
              }
            }

            @Override
            public void onFailure(Throwable t) {
                StringWriter sw = new StringWriter();
                t.printStackTrace(new PrintWriter(sw));
                out.write(sw.toString());
                out.close();
            }
          }, MoreExecutors.sameThreadExecutor());

            }
        };

    return ok(chunks);
  }
}
包控制器;
输入播放*;
导入play.mvc.*;
导入视图;
导入java.io.StringWriter;
导入java.io.PrintWriter;
导入com.google.common.util.concurrent.FutureCallback;
导入com.google.common.util.concurrent.Futures;
导入com.google.common.util.concurrent.MoreExecutors;
导入com.datastax.driver.core.Cluster;
导入com.datastax.driver.core.Session;
导入com.datastax.driver.core.ResultSet;
导入com.datastax.driver.core.ResultSetFuture;
公共类应用程序扩展控制器{
公共结果用户(){
//卡桑德拉连接信息。
String node=“localhost”;
int端口=9042;
//连接到卡桑德拉。
Cluster Cluster=Cluster.builder()
.addContactPoint(节点)
.withPort(端口)
.build();
会话=cluster.connect();
//准备输出。
Chunks Chunks=新的StringChunks(){
public void onReady(Chunks.Out){
//从cassandra查询数据。
String query=“从mykeyspace.users中选择*”;
//对cassandra执行异步查询。
ResultSetFuture resultSet=session.executeAsync(查询);
Futures.addCallback(resultSet,
新未来回调(){
@凌驾
成功时公共无效(结果集){
试一试{
//这个循环也是异步的。
//它将获取一些数据,然后对其进行处理,然后获取更多数据
//所有这些都是卡桑德拉司机做的
set.forEach(行->{
//纯文本。您也可以输出JSON。
out.write(row.toString());
输出。写入(“\n”);
});
}最后{
out.close();
}
}
@凌驾
失效时的公共无效(可丢弃的t){
StringWriter sw=新的StringWriter();
t、 printStackTrace(新PrintWriter(sw));
out.write(sw.toString());
out.close();
}
},MoreExecutors.sameThreadExecutor());
}
};
返回ok(块);
}
}

谢谢您的回复。我可以直接在Play框架结构中使用这种方法吗?或者在Play中使用JSP有什么问题吗?@Messy是的,您只需向依赖项添加一个cassandra java驱动程序(我建议现在将其视为行业标准)。然后可以将查询嵌入到java代码中。