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. Latex感想

    看人家,一个小女生,被导师逼着,首先对电脑方面理解不多,3天时间,latex已经把Paper框架建立起来,我可以说我自愧不如吗?德鲁克<卓有成效的管理者>说的一次干一件事情,<冬吴相 ...

  2. showModalDialog 的重要提示

    模态对话框,没有opener,不能用window.opener.location.reload();或window.parent.location.reload();要通过返回值来判断关闭后刷新. f ...

  3. 一致性 hash 算法( consistent hashing )a

    一致性 hash 算法( consistent hashing ) 张亮 consistent hashing 算法早在 1997 年就在论文 Consistent hashing and rando ...

  4. C#TreeView控件遍历文件夹下所有子文件夹以及文件

    一直对递归的理解不深刻,有时候觉得很简单,可是用起来总会出错.这里需要在TreeView控件里显示一个文件夹下的所有目录以及文件,毫无意外的需要用到递归. 一开始,想到用递归写一个生成每一个节点(Tr ...

  5. linux VI search command 搜索 加入行号

    VI COMMAND:set number :set nonumber VI COMMAND/keywork   //search

  6. HTML与CSS二三事

    概述 HTML是英文Hyper Text Mark-up Language(超文本标记语言)的缩写,他是一种制作万维网页面标准语言(标记).相当于定义统一的一套规则,大家都来遵守他,这样就可以让浏览器 ...

  7. 2016-08-16: 检测函数是否存在的C++模板

    #include <iostream> struct Hello { ; } }; struct Generic {}; // SFINAE test template <typen ...

  8. 简单的 Promise 实现

    参考 http://www.tuicool.com/articles/RzQRV3 var PENDING = undefined, FULLFILLED = 1, REJECTED = 2; var ...

  9. window 10 用composer安装 基于 Laravel 5.3 的 Coaster CMS Curl错误77解决

    安装教程来自 http://laravelacademy.org/post/6547.html 1.系统环境windows 10 nodejs3.9.2 composer1.2.4(国内镜像) Cmd ...

  10. cs107

    基本类型:bool,char,short,int,long,float,double 对于char,short,int,long: 多字节类型赋值给少字节类型,对低字节的细节感兴趣,位模式拷贝. 少字 ...