我有一个.java类来读取mongodb集合并将内容复制到.json文件中。
然后将.json文件提供给图表(使用Fusion创建,因为它只接受以json格式或xml格式编写的数据),然后在提供给图表的数据的基础上构建图表。
我的要求是从java脚本中调用一个java类,这样它就可以获取.json文件中的数据,并在此基础上创建图表。
如何做到这一点?
    public class Write {
    //@SuppressWarnings("null")
    public void connect() throws Exception{
        MongoClient mongo = new MongoClient( "localhost" , 27017 );
        DB db = mongo.getDB("Age");
        DBCollection collection = db.getCollection("agegroup");
        try{
                File file = null;
                String content = "{ "+
      "  \"chart\": { \n"+ 
          "      \"caption\" : \"Weekly Sales Summary\" ,\n"+
           "  \"xAxisName\" : \"Week\",\n" +
              "  \"yAxisName\" : \"Sales\",\n"+
             " \"numberPrefix\" : \"$\" \n"+
        "},\n"+
         "\"data\":[\n";
                // if file doesnt exists, then create it
                file = new File("C:/Users/ila/Desktop/pie.json");
                file.createNewFile();
                FileWriter fw = new FileWriter(file.getAbsoluteFile());
                BufferedWriter bw = new BufferedWriter(fw);
                bw.write(content);
                DBObject s;
                String str;
                String delimiter=",";
                DBCursor cursorDoc = collection.find();
                while (cursorDoc.hasNext()) {
                    s=cursorDoc.next();
                     str=s.toString();
                     String[] str1= str.split(delimiter);
                            bw.write("{\n");
                            bw.write(str1[1]+", \n");
                            bw.write(str1[2]+"\n");
                            if(cursorDoc.hasNext())
                            bw.write(",");
                            System.out.println(Arrays.toString(str1));
                }
                bw.write("]\n");
                bw.write("}\n");
                bw.close();
                System.out.println("Done");
          }catch(Exception e){
             e.printStackTrace();
          }
    }
}.html代码
    <!DOCTYPE html>
<html>
<head>
<title>Pie chart</title>
<script type="text/javascript" src="fusioncharts/fusioncharts.js"></script>
<script type="text/javascript" src="fusioncharts/fusioncharts.charts.js"></script>
<script type="text/javascript" src="fusioncharts/themes/fusioncharts.theme.zune.js"></script>
<script type="text/javascript">
FusionCharts.ready(function(){
    var revenueChart = new FusionCharts({
     //type: "pie2d",
     type: "pie2d",
      renderAt: "chart-container",
      width: "430",
      height: "450",
      dataFormat: "json",
   events: {
       'slicingStart': function(evtObj, argObj){
           var label = argObj.data.categoryLabel;
          //  alert(label);
            var n= label.localeCompare("Teenage")
            if(n==0)
                {
                   alert("An alert Msg!!!Teenage");
                 //  document.getElementById('iframe1').contentWindow.location.reload();
                 parent.frames['iframe2'].location.href = parent.frames['iframe2'].location.href
                }
          //  document.getElementById("iframe_a").contentDocument.location.reload(true);
          var m= label.localeCompare("Child")
             if(m==0)
                {
                   alert("An alert Msg!!!Child");
 parent.frames['iframe2'].location.href = parent.frames['iframe2'].location.href
                }
          var l= label.localeCompare("Adult")
             if(l==0)
            {
               alert("An alert Msg!!!Adult");
parent.frames['iframe2'].location.href = parent.frames['iframe2'].location.href
            }
          var p= label.localeCompare("Senior")
             if(p==0)
            {
               alert("An alert Msg!!!Senior");
parent.frames['iframe2'].location.href = parent.frames['iframe2'].location.href
            }
       }
       }
  });
  revenueChart.setJSONUrl("pie.json");
 //  revenueChart.setJSONData("C:/data/db/Age.json");
     revenueChart.render("chart-container");
   }
);
</script>
</head>
<body>
<div id="chart-container"  > </div>
</body>
</html>发布于 2015-04-22 06:09:15
将Java类转换为Servlet,并使用Ajax访问servlet并完成所需的任务。查看这个链接作为启动程序。
发布于 2015-04-22 06:17:19
您可以使用像猫猫这样的servet,编写一个为您的JSON文档服务的servlet,或者使用JRE中的com.sun.net.httpserver.*类。
发布于 2015-04-22 06:21:32
在这里,您可以使用REST客户端和ajax调用,以便在不刷新页面的情况下连接java类。
例如,让它成为您的ajax调用。
$.ajax(
    {   url: 'in/your_class_name/path_name',
        type : 'POST',
        dataType: 'json',
        success : function (data) {
          //your script code
        },
        error:function(data,status,er) {
        alert("Error Loading Section Data: "+data);
    }
});然后,您需要按照以下方式配置web.xml文件
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
  <display-name>Application Name</display-name>
      <context-param>
            <param-name>resteasy.servlet.mapping.prefix</param-name>
            <param-value>/in/</param-value>
      </context-param>
      <context-param>
            <param-name>resteasy.scan</param-name>
            <param-value>true</param-value>
      </context-param>
      <listener>
            <listener-class>org.jboss.resteasy.plugins.server.servlet.ResteasyBootstrap</listener-class>
      </listener>
      <filter>
            <filter-name>Resteasy</filter-name>
            <filter-class>org.jboss.resteasy.plugins.server.servlet.FilterDispatcher</filter-class>
      </filter>
      <filter-mapping>
            <filter-name>Resteasy</filter-name>
            <url-pattern>/in/*</url-pattern>
      </filter-mapping>
      <welcome-file-list>
        <welcome-file>index.html</welcome-file>    
      </welcome-file-list>
</web-app>这是用于apache类似的jboss服务器的,您可以很容易地使用这个配置。
下一步是设置类。在java类中,操作和类选择由注释控制,请参见下面的示例。
import java.io.IOException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.Context;
import org.apache.commons.beanutils.BeanUtils;
@Path("/your_class_name")
public class Write {
    @Context
    HttpServletResponse res;
    @SuppressWarnings("unchecked")
    @POST
    @Produces("application/json")
    @Path("/path_name")
    public String your_function(@Context HttpServletRequest request )throws IOException{
        //your code
        return "succcess";
    }
}在这里,your_class_name和path_name是您为访问指定的其他名称。
最后,您需要从from链接下载jar文件并添加到库中。
http://www.java2s.com/Code/Jar/c/Downloadcommonsbeanutils183jar.htm
https://stackoverflow.com/questions/29788889
复制相似问题