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. node.js搭建简单的websocket

    1.首先在官网http://www.nodejs.org/下载NODE.JS 2.打开命令行CMD,进入NODEJS\node_modules\的目录,输入npm install socket.io  ...

  2. The PHP Package 之 monolog[转]

    Monolog 发送你的日志到文件.到sockets.到邮箱.到数据库或(和)者其他网路存储服务(云).Monolog可以做到同时保存到一个或多个存储介质(后面的栈冒泡处理). 安装   $ comp ...

  3. HTML与CSS二三事

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

  4. flask + uwsgi 生产环境

    https://www.digitalocean.com/community/tutorials/how-to-deploy-flask-web-applications-using-uwsgi-be ...

  5. bash profile .bashrc

    /etc/profile:此文件为系统的每个用户设置环境信息,当用户第一次登录时,该文件被执行. 并从/etc/profile.d目录的配置文件中搜集shell的设置. /etc/bashrc:为每一 ...

  6. C语言中内存操作函数

      一.malloc/calloc 名称: Malloc/calloc 功能: 动态内存分配函数 头文件: #include <stdlib.h> 函数原形: void *malloc(s ...

  7. 第六百一十二、三、四、五天 how can I 坚持

    上火了啊..已经2017了,真快,人生只是一瞬间,到头来都是一场空. 2016年最后一天,很悲催,没赶上火车.还不能改签,哪能哪次都这么幸运,长记性了,下午到济南,看了看弟弟的房子,到挺不错,就是装修 ...

  8. nslookup命令

    nslookup命令可以从本地DNS服务器中查看所有的IP地址和域名信息(它就像一本互联网电话簿).例如,想要找到www.baidu.com的IP地址就可以使用nslookup命令. nslookup ...

  9. PHP 7 vs HHVM 比较

    PHP 是最流行的用于 web 开发的脚本语言之一.PHP 的最新版本,PHP 7 在性能上做了很大的优化.不过,PHP 还有一个竞争对手 HHVM (HipHop Virtual Machine) ...

  10. Android之sqlite的使用 (转载)

    Android中的SQLite使用 首先创建数据库类 public class DatabaseHelper extends SQLiteOpenHelper {       private stat ...