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&lt;DBObject&gt; 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,稍后会上传 ~~