• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

OpenLayers学习笔记八——使用servlet从mysql获取数据并标注_mysql

mysql 搞代码 7年前 (2018-06-08) 156次浏览 已收录 0个评论
文章目录[隐藏]

OpenLayers学习笔记8——使用servlet从mysql获取数据并标注

这两天在图书馆边看jsp边查边写代码,改完了老板交给的任务,也顺带实现了查询的效果,先来看下最终实现的效果图:

OpenLayers学习笔记八——使用servlet从mysql获取数据并标注

整个实现思路是:服务器端采用servlet+mysql模糊查询,servlet返回json数据,客户端解析json数据以表格形式显示并根据经纬度在地图上进行标注。

1、服务器端Servlet代码:

package edu.whu.vge.servlet;  import java.io.IOException; import java.io.PrintWriter; import java.sql.ResultSet; import java.sql.SQLException;  import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse;  import net.sf.json.JSONArray; import net.sf.json.JSONObject;  import edu.whu.vge.dbUtil.PoiDBBean;  public class SchoolQueryServlet extends HttpServlet {   private static final long serialVersionUID = 1L;   /*   * (non-Javadoc)   *    * @see   * javax.servlet.http.HttpServlet#doPost(javax.servlet.http.HttpServletRequest   * , javax.servlet.http.HttpServletResponse)   */  @Override  protected void doPost(HttpServletRequest request,    HttpServletResponse response) throws ServletException, IOException {   // 设置输出内容格式和编码   response.setContentType("text/html;charset=utf-8");   PrintWriter out = response.getWriter();   // 设置接收参数编码格式   response.setCharacterEncoding("utf-8");   String schoolID = request.getParameter("schoolID");   String schoolName = request.getParameter("schoolName");   String schoolAddress = request.getParameter("schoolAddress");   String sql = "select * from school where ID like " + "/'" + "%"     + schoolID + "%" + "/'" + " and name like " + "/'" + "%"     + schoolName + "%" + "/'" + " and address like " + "/'" + "%"     + schoolAddress + "%" + "/'";   PoiDBBean poiDBBean = new PoiDBBean();    //   JSONArray array = new JSONArray();   try {    ResultSet resultSet = poiDBBean.query(sql);    while (resultSet.next()) {     JSONObject object = new JSONObject()       .element("schoolName", resultSet.getString(4))       .element("schoolAddress", resultSet.getString(5))       .element("schoolTel", resultSet.getString(6))       .element("schoolKind", resultSet.getString(7))       .element("schoolLat", resultSet.getDouble(3))       .element("schoolLon", resultSet.getDouble(2));     array.add(object);     }    out.println(array.toString());    System.out.println(array.toString());    } catch (SQLException e) {    // TODO Auto-generated catch block    e.printStackTrace();   } catch (ClassNotFoundException e) {    // TODO Auto-generated catch block    e.printStackTrace();   } finally {    try {     poiDBBean.close();    } catch (SQLException e) {     // TODO Auto-generated catch block     e.printStackTrace();    }   }   }   public void destroy() {   super.destroy(); // Just puts "destroy" string in log   // Put your code here  }   /**   * Initialization of the servlet. <br>   *    * @throws ServletException   *             if an error occurs   */  public void init() throws ServletException {   // Put your code here  }  } 

这里看一下servlet的知识就可以了。

2、客户端请求代码:

这里采用jquery  ajax方法异步请求服务器端servlet,jquery及ajax见:w3cschool。代码如下:
  $.ajax({                      url: "http://127.0.0.1:8080/taxGIS/servlet/SchoolQueryServlet",             type: 'post',             dataType: 'json',             data: {                 schoolID: $("#schoolID").val(),                 schoolName: $("#schoolName").val(),                 schoolAddress: $("#schoolAddress").val()             },             success: function(jsonData){                 //查询返回数据后标注在地图上并启用查询结果显示对话框                 patchAddMarker(jsonData);                 showQueryRes(jsonData);             }                      });

3、解析json并标注在地图上:

以一次查询为例,得到的json数据如下:
[     {         "schoolName": "城阳区第二实验中学",          "schoolAddress": "山东省青岛市城阳区礼阳路107号",          "schoolTel": "0532-81156666",          "schoolKind": "教育学校:中学",          "schoolLat": 36.28491,          "schoolLon": 120.40238     },      {         "schoolName": "小寨子幼儿园",          "schoolAddress": "山东省青岛市城阳区 ",          "schoolTel": " ",          "schoolKind": "教育学校:幼儿园",          "schoolLat": 36.29791,          "schoolLon": 120.39172     },      {         "schoolName": "新太阳托管中心",          "schoolAddress": "山东省青岛市市北区嘉兴路11-2",          "schoolTel": " ",          "schoolKind": "教育学校:幼儿园",          "schoolLat": 36.10921,          "schoolLon": 120.35659     },      {         "schoolName": "金苹果幼儿园(香江医院西)",          "schoolAddress": "山东省青岛市黄岛区香江路311号(香江医院西)",          "schoolTel": " ",          "schoolKind": "教育学校:幼儿园",          "schoolLat": 35.97422,          "schoolLon": 120.16204     },      {         "schoolName": "锦桥社区托辅中心",          "schoolAddress": "山东省青岛市黄岛区王家石桥村锦桥社区",          "schoolTel": " ",          "schoolKind": "教育学校:幼儿园",          "schoolLat": 35.87418,          "schoolLon": 120.00619     },      {         "schoolName": "艺星幼儿园",          "schoolAddress": "山东省青岛市城阳区岙东北路541",          "schoolTel": " ",          "schoolKind": "教育学校:幼儿园",          "schoolLat": 36.33419,          "schoolLon": 120.2701     },      {         "schoolName": "隐珠街道办事处中心幼儿园",          "schoolAddress": "山东省青岛市胶南市灵海路126号",          "schoolTel": " ",          "schoolKind": "教育学校:幼儿园",          "schoolLat": 35.89869,          "schoolLon": 120.0444     },      {         "schoolName": "慧诺托管家园",          "schoolAddress": "山东省青岛市黄岛区虹桥大街83-5",          "schoolTel": " ",          "schoolKind": "教育学校:幼儿园",          "schoolLat": 35.87653,          "schoolLon": 120.00338     },      {         "schoolName": "四方区尚志幼儿园",          "schoolAddress": "山东省青岛市市北区尚志路4",          "schoolTel": " ",          "schoolKind": "教育学校:幼儿园",          "schoolLat": 36.11456,          "schoolLon": 120.35691     },      {         "schoolName": "宝贝之家亲子园",          "schoolAddress": "山东省青岛市崂山区松岭路58-1",          "schoolTel": "(0532)88891918,(0532)88893227",          "schoolKind": "教育学校:幼儿园",          "schoolLat": 36.10406,          "schoolLon": 120.47963     },      {         "schoolName": "天真幼儿园(灵山卫街道办事处人大工作办公室北)",          "schoolAddress": "山东省青岛市黄岛区329省道(灵山卫街道办事处人大工作办公室北)",          "schoolTel": " ",          "schoolKind": "教育学校:幼儿园",          "schoolLat": 35.93806,          "schoolLon": 120.15021     },      {         "schoolName": "城阳区城阳街道皂户幼儿园",          "schoolAddress": "山东省青岛市城阳区正阳中路",          "schoolTel": " ",          "schoolKind": "教育学校:幼儿园",          "schoolLat": 36.30772,          "schoolLon": 120.35847     },      {         "schoolName": "胶南市王台镇石梁小学",          "schoolAddress": "山东省青岛市黄岛区 ",          "schoolTel": "0532-83116752",          "schoolKind": "教育学校:小学",          "schoolLat": 36.07053,          "schoolLon": 120.03613     } ]

json解析可以采用json2.js也可以使用js的eval函数。这里采用后者,代码如下,很简单就不做解释了。

function patchAddMarker(jsonData){     var jsonArray = eval(jsonData);     for (var i = 0; i < jsonArray.length; i++) {         var schoolName = jsonArray[i].schoolName;         var schoolAddress = jsonArray[i].schoolAddress;         var schoolTel = jsonArray[i].schoolTel;         var schoolKind = jsonArray[i].schoolKind;         var schoolLat = jsonArray[i].schoolLat;         var schoolLon = jsonArray[i].schoolLon;                  var lonlat = corTransform(schoolLon, schoolLat);         var lonLatStr = lonlat.toShortString();         var lonLatArr = lonLatStr.split(",");         var lon = lonLatArr[0];         var lat = lonLatArr[1];                  var att = {             名称: schoolName,             地址: schoolAddress,             电话: schoolTel,             类别: schoolKind                  };         addMarke(lon, lat, att);     } }

4、表格显示:

这里采用jquery easyui的datagrid控件来实现,其表格控件的使用网上有很多博客,参考就可以实现了,这里不再展开了。

5、总结

1、遇到跨域问题,客户端请求不到访问结果。解决办法:访问地址为:http://127.0.0.1:8080/taxGIS/index.jsp;而不是http://localhost:8080/taxGIS/index.jsp
2、jquery-ui和jquery easyui冲突问题。这两个都是基于jquery,有些方法和属性名称都是相同的,导致冲突,就看引入其js的先后顺序,后引入的覆盖先引入的。我这里主要用到jquery-ui的对话框和按钮以及折叠栏,而jquery easyui只用到了datagrid,所以我的引用是这样的:jquery—>jquery-ui—>jquery easyui
 <script src="lib/jquery/js/jquery-1.10.2.js"></script>         <script src="lib/jquery-easyui-1.4.2/jquery.easyui.min.js"></script>         <script src="lib/jquery/js/jquery-ui-1.10.4.custom.js"></script>

3、前端开发用到的知识比较多而且杂,不像C#、java开发那般只用一种语言。刚开始可能会觉得手足无措,但是只要用心,入了门后面就会轻松些了。

4、注重开发部署的便宜性、用户体验度,不能做出来的东西部署非常复杂而又不实用。

欢迎大家阅读《OpenLayers学习笔记八——使用servlet从mysql获取数据并标注_mysql》,跪求各位点评,by 搞代码


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:OpenLayers学习笔记八——使用servlet从mysql获取数据并标注_mysql
喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址