mongodb基础系列——数据库查询数据返回前台JSP(一)
经过一段时间停顿,终于提笔来重新整理 mongodb 基础系列博客了。
同时也很抱歉,由于各种原因,没有及时整理出,今天做了一个 demo,来演示,mongodb 数据库查询的数据在 JSP 显示问题。
做了一个简单的测试,不过基本上能满足前台展示的问题,若有问题,可以及时联系我,及时沟通。
在上篇博客<<mongodb 基础系列——java 操作 mongodb 实现 CURD>>中,当时查看数据如下,无论是查看所有还有查看具体。
// 查询所有 // 其中类似 access 数据库中游标概念 DBCursor cursor=collection.find(); System.out.println("mongodb 中的 user 表结果如下:"); while(cursor.hasNext()){System.out.println(cursor.next()); }
同时网上很多篇博客,也都是如此查看。那若界面需要后台数据咋办?到底怎么传递过去啊?
想想咱们程序是如何传递过去的,查询操作,无非是传递 List、Map、具体实体对象。
OK,既然想到如此,那在你对 mongdb 一无所知时,其 API 是最好的入口处。通过 API,发现 DBCursor 类有个方法 toArray,其返回值为 List,OK,发现这个方法后,其问题已经解决了 50% 啦。
继续……
上述代码中数据结果,可以发现其实是 JSON 对。
{"_id" : { "$oid" : "52564aa6b16b9c6f728c0cf8"} , "id" : 1 , "name" : "小明" , "address" : {"city" : "beijing" , "code" : "065000"}}
那看看输出 List 结果如下:
List<DBObject> list=cursor.toArray(); System.out.println(list.toString()); return list;
其实 List 其上的数组而已。
[{"_id" : { "$oid" : "52564aa6b16b9c6f728c0cf8"} , "id" : 1 , "name" : "小明" , "address" : {"city" : "beijing" , "code" : "065000"}}]
那我们测试这个 list,JSP 就显示输出 name、复核地址中的 city、code
提示:测试 Demo 使用 Jquery 的 Ajax 做测试。
步骤:
第一:后台 Dao 的查询方法。与上篇博客基本一样,只是方法返回值不同而已。
public static List selectAll() throws Exception{ // 第一:实例化 mongo 对象,连接 mongodb 服务器 包含所有的数据库//默认构造方法,默认是连接本机,端口号,默认是27017 //相当于Mongo mongo =new Mongo("localhost",27017) Mongo mongo =new Mongo(); //第二:连接具体的数据库 //其中参数是具体数据库的名称,若服务器中不存在,会自动创建 DB db=mongo.getDB("myMongo"); //第三:操作具体的表 //在mongodb中没有表的概念,而是指集合 //其中参数是数据库中表,若不存在,会自动创建 DBCollection collection=db.getCollection("user"); //查询操作 //查询所有 //其中类似access数据库中游标概念 DBCursor cursor=collection.find(); System.out.println("mongodb中的user表结果如下:"); /* while(cursor.hasNext()){ System.out.println(cursor.next()); }*/ List<DBObject> list=cursor.toArray(); System.out.println(list.size()); System.out.println("dao.."+list.toString()); return list; }</pre>
第二:搭建 JSP 与后台的桥梁,在此使用 Servlet,没有配置 Struts【有点嫌麻烦】,写简单的 Servlet,配置 Servlet【在 web.xml 中配置,不在此给出了,后面有具体 demo】
其中 doGet 方法中,因为前台使用 Ajax,所以应该写到 response 中,使用 response 的 getWriter,当然也可以使用 Struts2Util【若使用 struts2】。
@Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { try {List list=new EntityTest().selectAll(); response.setCharacterEncoding("UTF-8");// 解决显示中文乱码问题 response.getWriter().write(list.toString()); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace();} }
第三:前端 JSP 使用 Ajax 调用,来获取 name、city、code 值。
<body> <input type="button" value="test" onclick="testajax()" /> </body>function testajax() { var _url = "http://localhost:8080/testmongodb/mongodb/"; jQuery.ajax({ url : _url, type : "get", dataType : "json", success : function(d) {alert(JSON.stringify(d)); alert(d[0].name); alert(d[0].address.code);} });}Ajax 中的成功返回的 d,是个 object 对象,准确的说是 JSON 对象,为了方便客户看,转换成字符串.JSON.stringfy(object)
为啥是用 d[0] 呢?
因为返回的 d 是个数组,[] 包围的。打印的 d 是 [], 所以以数组方式显示。
若返回的不是数组形式,比如不用 [], 结果如下:
response.getWriter().write(list.get(0).toString());{"_id" : { "$oid" : "52564aa6b16b9c6f728c0cf8"} , "id" : 1 , "name" : "小明" , "address" : {"city" : "beijing" , "code" : "065000"}}这样的话:前台 Ajax 展示如下:直接使用 d.name、d.id、d.address.city
success : function(d) {alert(JSON.stringify(d)); alert(d.name); alert(d.address.code); }通过这种方式基本可以获取其中的某值,若付给某个字段,可以通过 jquery 赋值。
比如 $("#id 值").val(d.name); // 类似这种形式赋值。
下篇博客,给出常规 table 如何显示 list 以及 ligerui 中显示查询的数据的 demo。
至于博客中项目 demo,点我下载~~