jdbc+servlet+ajax开发省市区三级联动

技术点:jdbc操作数据库,ajax提交,字符拦截器,三级联动

特点:局部刷新达到省市区三级联动,举一反三可以做商品分类等

宗旨:从实战中学习

博客讲解是按照两级联动,但下载的资源是三级联动含sql文件。

效果图:

首页核心代码:

  1. <%
  2. List<HashMap<String,Object>> maps = ConnectionUtil.findProvinces();
  3. pageContext.setAttribute("provinces", maps);
  4. %>
  5. <fieldset>
  6. <legend>省市区三级联动</legend>
  7. 省份:
  8. <select id="province" onchange="select_citys(this)">
  9. <option value="">-请选择-</option>
  10. <!-- 循环显示所有省份 -->
  11. <c:forEach var="pv" items="${provinces}">
  12. <option value="${pv.id}">${pv.name}</option>
  13. </c:forEach>
  14. </select>
  15. 城市:
  16. <select id="city" onchange="select_areas(this)">
  17. <option value="">-请选择-</option>
  18. </select>
  19. 区域:
  20. <select id="area">
  21. <option value="">-请选择-</option>
  22. </select>
  23. </fieldset>

ajax代码:

  1. function select_citys(obj){
  2. var provinceId = $(obj).val();
  3. if(!provinceId)return; // 声明变量就要判断是否为null
  4. $.ajax({
  5. type:"post",//请求方式get/post
  6. url:"${ctx}/CityServlet",//请求对应的地址
  7. data:{"provinceId":provinceId},//往服务器传递的参数,
  8. success:function(data){//服务器交互成功调用的回调函数,data就是服务器端传递出来的数据
  9. var jdata = data.trim(); // 去前后空格
  10. if(jdata=="fail"){
  11. alert("查询失败!");
  12. }else{
  13. var jsonData = eval(jdata);//将字符串的json对象转换成json
  14. $("#area").html("<option>-请选择-</option>");
  15. append_template(jsonData,"city");
  16. }
  17. }
  18. });
  19. };
  20. 后台处理核心代码:

    1. protected void doPost(HttpServletRequest request,
    2. HttpServletResponse response) throws ServletException, IOException {
    3. PrintWriter out=response.getWriter();
    4. // 获取ajax请求发送过来的省份id参数
    5. String pid = request.getParameter("provinceId");
    6. if (pid != null && !pid.equals("")) {// 有变量就要进行空判断
    7. int provinceId = Integer.parseInt(pid);// 因为前端都是传String;所以要转换
    8. List<HashMap<String, Object>> citys = ConnectionUtil
    9. .findCitys(provinceId);
    10. try {
    11. // 将集合对象转换成json格式---List---JsonArr字符串[{},{},{}]
    12. out.print(JSONUtil.serialize(citys));
    13. } catch (JSONException e) {
    14. e.printStackTrace();
    15. }
    16. } else {
    17. // 查询失败
    18. out.print("fail");
    19. }
    20. }
    21. 数据库操作:

      1. package com.ajax.connection;
      2. import java.sql.Connection;
      3. import java.sql.DriverManager;
      4. import java.sql.PreparedStatement;
      5. import java.sql.ResultSet;
      6. import java.sql.SQLException;
      7. import java.sql.Statement;
      8. import java.util.ArrayList;
      9. import java.util.HashMap;
      10. import java.util.List;
      11. /**
      12. * 数据库链接,查询类
      13. * 对jdbc操作数据库不懂的可以参考:http://blog.csdn.net/qq_19558705/article/details/49947317
      14. * 以下内容就不做过多的注释了
      15. * 实际业务会采用连接池的方式,这只做学习使用
      16. * @author Administrator
      17. *
      18. */
      19. public class ConnectionUtil {
      20. private static String url = "jdbc:mysql:///test";
      21. private static String username = "root";
      22. private static String password = "root";
      23. public static Connection getConnection(){
      24. Connection connection = null;
      25. try{
      26. Class.forName("com.mysql.jdbc.Driver");
      27. connection = DriverManager.getConnection(url,username,password);
      28. return connection;
      29. }catch(Exception ex){
      30. return null;
      31. }
      32. }
      33. public static List<HashMap<String, Object>> findProvinces(){
      34. Connection connection = null;
      35. Statement statement = null;
      36. ResultSet rs = null;
      37. List<HashMap<String, Object>> maps = null;
      38. try{
      39. String sql = "SELECT id,name FROM tm_province order by sort asc";
      40. connection = getConnection();
      41. statement = connection.createStatement();
      42. rs = statement.executeQuery(sql);
      43. maps = new ArrayList<HashMap<String,Object>>();
      44. HashMap<String, Object> map = null;
      45. while(rs.next()){
      46. map = new HashMap<String, Object>();
      47. map.put("id", rs.getInt("id"));
      48. map.put("name", rs.getString("name"));
      49. maps.add(map);
      50. }
      51. return maps;
      52. }catch(SQLException sql){
      53. sql.printStackTrace();
      54. return null;
      55. }finally{
      56. try{
      57. if(rs!=null)rs.close();
      58. if(statement!=null)statement.close();
      59. if(connection!=null)connection.close();
      60. }catch(SQLException sql){
      61. sql.printStackTrace();
      62. }
      63. }
      64. }
      65. //后面内容省略,可以免费下载资源
      66. }

      字符拦截器:

      1. package com.ajax.filter;
      2. import java.io.IOException;
      3. import javax.servlet.Filter;
      4. import javax.servlet.FilterChain;
      5. import javax.servlet.FilterConfig;
      6. import javax.servlet.ServletException;
      7. import javax.servlet.ServletRequest;
      8. import javax.servlet.ServletResponse;
      9. import javax.servlet.http.HttpServletRequest;
      10. import javax.servlet.http.HttpServletResponse;
      11. /**
      12. * 如果不清楚字符拦截器可以参考:http://blog.csdn.net/qq_19558705/article/details/49962153
      13. * @author Administrator
      14. *
      15. */
      16. public class CharacterFilter implements Filter {
      17. private FilterConfig config;
      18. public void doFilter(ServletRequest req, ServletResponse resp,
      19. FilterChain chain) throws IOException, ServletException {
      20. HttpServletRequest request = (HttpServletRequest) req;
      21. HttpServletResponse response = (HttpServletResponse) resp;
      22. // 从web.xml文件中获取encoding对应的init-param中的param-value
      23. String encoding = config.getInitParameter("encoding");
      24. // 只要定义了变量;就要判断是否为空;不然会报空指针异常
      25. if (encoding != null) {
      26. // 指明内容请求格式的字符编码集
      27. response.setContentType("text/html ;charset=" + encoding);
      28. // 请求时规范字符编码格式
      29. request.setCharacterEncoding(encoding);
      30. // 指明输出的格式字符编码集
      31. response.setCharacterEncoding(encoding);
      32. }
      33. // 进入下一个拦截器
      34. chain.doFilter(request, response);
      35. }
      36. // FilterConfig 是拦截器的全局变量
      37. public void init(FilterConfig config) throws ServletException {
      38. this.config = config;
      39. }
      40. public void destroy() {
      41. }
      42. }

ajax省市区三级联动的更多相关文章

  1. JQ与AJAX 省市区三级联动下拉框

    用于初学者学习基本的联动下拉框,废话不多说,见代码 首先看控制器里的3个下拉框对应代码: public ActionResult GetProvinceList() { ProvinceReposit ...

  2. 基于ThinkPHP+AJAX的省市区三级联动

    练习,就当练习. 省市区三级联动,样式如下图所示: 1,导入两个js文件并且导入数据库文件. 两个js文件分别是jquery-2.1.4.min.js和jquery-1.js,数据库文件,见附件. 2 ...

  3. Ajax来实现下拉框省市区三级联动效果(服务端基于express)

    //服务端JS代码: //提供服务端的处理 const express = require('express'); const fs = require('fs'); const app = expr ...

  4. 使用PHP+MySql+Ajax+jQuery实现省市区三级联动功能

    使用PHP+MySql+Ajax+jQuery实现省市区三级联动功能 要求:写一个省市区(或者年月日)的三级联动,实现地区或时间的下拉选择. 实现技术:php ajax 实现:省级下拉变化时市下拉区下 ...

  5. 基于thinkphp和ajax的省市区三级联动

    练习,就当练习. 省市区三级联动,样式如下图所示: 1,导入两个js文件并且导入数据库文件. 两个js文件分别是jquery-2.1.4.min.js和jquery-1.js,数据库文件,见附件. 2 ...

  6. 第117天:Ajax实现省市区三级联动

    Ajax实现省市区三级联动 思路: (1)首先获取省份信息 (2)发起Ajax请求,注意dataType中的T大写 (3)封装回调函数,回调函数success中用$.each循环每一条数据,动态创建o ...

  7. JS省市区三级联动

    不需要访问后台服务器端,不使用Ajax,无刷新,纯JS实现的省市区三级联动. 当省市区数据变动是只需调正js即可. 使用方法: <!DOCTYPE html><html>< ...

  8. 省市区三级联动(二)JS部分简单版

    通过对上一篇<省市区三级联动>的学习发现JScript部分省市区的填充代码几乎相同,所以可以写成一个函数. 注意:html部分和chuli.php部分不变 1.下拉列表填充可以写成带参数的 ...

  9. ajax 实现三级联动

    ajax 实现三级联动,相当于写了一个小插件,用的时候直接拿过来用就可以了,这里我用了数据库中的chinastates表, 数据库内容很多,三级联动里的地区名称都在里面,采用的是代号副代号的方式 比如 ...

随机推荐

  1. ZAM 3D 制作3D动画字幕 用于Xaml导出

    原地址-> http://www.cnblogs.com/yk250/p/5662788.html 介绍:对经常使用Blend做动画的人来说,ZAM 3D 也很好上手,专业制作3D素材的XAML ...

  2. 剑指Offer:面试题31——连续子数组的最大和(java实现)

    问题描述 : 输入一个整数数组,数组里面有正数也有负数.数组中一个或连续几个整数组成一个子数组.求所有子数组的和的最大值.要求时间复杂度为O(n) 思路1:常规解法,不知道怎么描述了.. 代码: bo ...

  3. 关于计算机的ID和用户ID之间的关系

    关于计算机的ID和用户ID之间的关系 计算机安装完系统后就会生成计算机ID,然后系统会以计算机ID为前缀附加数字创建Administrator(500)和Guest(501)用户ID,其他用户的ID将 ...

  4. 《疯狂Java讲义》(四)---- 面向对象&基于对象

    "基于对象"也使用了对象,但是无法利用现有的对象模板产生新的对象类型,继而产生新的对象,也就是说,"基于对象"没有继承的特点,而多态更需要继承,所以" ...

  5. jquery文件上传控件 Uploadify

    (转自 http://www.cnblogs.com/mofish/archive/2012/11/30/2796698.html) 基于jquery的文件上传控件,支持ajax无刷新上传,多个文件同 ...

  6. Makefile 使用总结

    参考: [1]. Makefile 使用总结. http://www.cnblogs.com/wang_yb/p/3990952.html

  7. JS正则大全

    验证数字:^[0-9]*$ 验证n位的数字:^\d{n}$ 验证至少n位数字:^\d{n,}$ 验证m-n位的数字:^\d{m,n}$ 验证零和非零开头的数字:^(0|[1-9][0-9]*)$ 验证 ...

  8. 15,SFDC 管理员篇 - 变更和部署

    Setup | Deploy | Sandbox 通过在Production上建立Dev .Test 两套环境来   Sandbox 有四种类型 Developer Sandbox & Dev ...

  9. BufferedReader 中的 readLine()

    BufferedReader中的readLine()方法,API解释如下: Reads a line of text. A line is considered to be terminated by ...

  10. UIImage类扩展返回一个带边框的圆形图片

    /** * 将image转换为圆型带边框的图片(最好写一个UIImage的类扩展) * * @param name 图片的名字 * @param borderWidth 外层边框的宽度 * @para ...