当前位置: 代码迷 >> J2EE >> java怎么生成json被前端调用
  详细解决方案

java怎么生成json被前端调用

热度:70   发布时间:2016-04-17 23:09:02.0
java如何生成json被前端调用
小妹前端一枚,CSDN新人,分不多,请见谅。

现在在自学前后台交互。

现在采用的是ajax调用的方法,json文件是自己写的假数据。

$.ajax({ 
url:"json/mood.json", 
dataType:"json", 
type:"get" ,
success:function (data){
。。。。。


但是我想自己尝试下搭个数据库,自己调用数据,数据已经写好,并且用java完成了生成json字符串。

package jdbcTest;

import java.sql.*;

import org.json.JSONArray;   

import org.json.JSONObject;  


public class JDBCtest {

public static void main(String[] args){

           // 驱动程序名
           String driver = "com.mysql.jdbc.Driver";

           // URL指向要访问的数据库名scutcs
           String url = "jdbc:mysql://127.0.0.1:3306/mysql";

           // MySQL配置时的用户名
           String user = "root"; 

           // MySQL配置时的密码
           String password = "989531";

           JSONObject jsonObj = new JSONObject();//创建json格式的数据  

           JSONArray jsonArr = new JSONArray();//json格式的数组  

           JSONObject jsonObjArr = new JSONObject();  

           try { 
            // 加载驱动程序
            Class.forName(driver);

            // 连续数据库
            Connection conn = DriverManager.getConnection(url, user, password);



            // statement用来执行SQL语句
            Statement statement = conn.createStatement();

            // 要执行的SQL语句
            String sql = "select * from tb2";

            // 结果集
            ResultSet rs = statement.executeQuery(sql);




            String name = null;

            while(rs.next()) {

             // 选择sname这列数据
             name = rs.getString("age");

             // 首先使用ISO-8859-1字符集将name解码为字节序列并将结果存储新的字节数组中。
             // 然后使用GB2312字符集解码指定的字节数组
             name = new String(name.getBytes("ISO-8859-1"),"GB2312");

             jsonObjArr.put("name",rs.getString("username"));  
             jsonObjArr.put("age",name);  
           jsonArr.put(jsonObjArr);//将json格式的数据放到json格式的数组里  
           jsonObj.put("data", jsonArr);//再将这个json格式的的数组放到最终的json对象中。  

            }
            System.out.println(jsonObj.toString()); 


            rs.close();
            conn.close();

           } catch(ClassNotFoundException e) {


            System.out.println("Sorry,can`t find the Driver!"); 
            e.printStackTrace();


           } catch(SQLException e) {


            e.printStackTrace();


           } catch(Exception e) {


            e.printStackTrace();


           } 
}
}



打印出来是

{"data":[{"age":"21","name":"kitty"},{"age":"21","name":"kitty"},{"age":"21","name":"kitty"}]}


,但是下一步我就不会做了,这个java类包我要怎么用呢?怎么生成前端解析的json呢?网上查了很多资料,有说用map的,有说直接就可以get解析的。但是查了很多我很迷糊呀,因为java我只会一点点,另外我看用ajax的时候,路径都写成相对的,但是现在我的html文件包是放在d://web文件夹里的,而我的这个java程序是放在d://eclipse里面的,要怎么调用呢?网上还有人说后台通过servlet把数据抛到服务器,然后前端来获取。是这样吗?急求大神解答!!感激不尽~

------解决思路----------------------
$.ajax({
   type: "get",
   url: 你生成的json文件的路径,使用相对路径,
   dataType:json,
   success: function(msg){
    
   }
});这种方式是让你的html直接加载静态资源文件,但是如果你想用java 程序输出到页面的,这时候你需要让你的页面与java后台程序产生一个请求与响应的过程,需要建立web应用程序并发布到web服务器上才可以完成的
------解决思路----------------------
你前端有请求,后台却不给这个请求对应的响应方法,你的后台数据怎么传输到前端去?
------解决思路----------------------
通常情况下,你前端事调用后台的实现。基本上在java后台有个xxxAction的类,假设有个方法parseJson
public void parseJson(HttpServletRequest request, HttpServletResponse response) throws IOException {
       //你生成的json的代码
      ...     
     response.setCharacterEncoding("UTF-8");
     out = response.getWriter();
     out.write(jsonObj);
     out.flush();
}
这样就可以把数据刷到前台页面
------解决思路----------------------
你先写一个类继承httpservlet ,然后重写里面的doGet,和doPost方法,你的ajax中type是get,就实现get方法,是post就实现post方法,在方法里组装你的json数据,然后调用这两个方法参数的后面一个参数(httpresponse)的getWrite方法,获得write对象,然后调用write方法,将你的数据写入进去。在浏览器的success中就可以处理这些数据了
  相关解决方案