• 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;
         }


         第二:搭建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,稍后会上传~~

  • 相关阅读:
    🍖流程控制之if判断
    🍖Python开发入门之变量
    🍖Python入门之基本数据类型
    sql事务和存储过程 【转】
    《设计模式基于C#的工程化实现及扩展》 Security Design Pattern 系列 4 角色模式(Role Pattern) 【转】
    C#中ToString格式大全 【转】
    事务日志 (SQL Server)【转】
    批处理启动、停止SQL服务 【转】
    关于HttpContext.Current.Request获取值 【转】
    C#中HashTable的用法 【转】
  • 原文地址:https://www.cnblogs.com/riskyer/p/3362169.html
Copyright © 2020-2023  润新知