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. Gesture Recognizers与触摸事件分发[转]

    一.Gesture Recognizers Gesture Recognizers是在iOS3.2引入的,可以用来识别手势.简化定制视图事件处理的对象.Gesture Recognizers的基类为U ...

  2. MongoDB常用操作

    (备注: 对于 window, 不需要sudo) 验证成功与否: * 启动服务器: $sudo mongod --dbpath C:\data\db (需要 指明数据库存放的目录) * 打开shell ...

  3. 两系统用asp.net forms 身份验证方式实现跨域登录信息共享

    1.两个系统的 web.config 都配置为 forms 验证方式( system.web —> authentication 节点) 2.在两个系统的Web.config里配置相同的 sys ...

  4. MYSQL中UNIX时间戳与日期的转换

    select FROM_UNIXTIME(1464973385.641,'%Y-%m-%d %H:%i:%s'); select UNIX_TIMESTAMP('2016-06-04 01:03:05 ...

  5. 单例设计模式全局缓存accessToken

    使用微信JS-SDK开发的小伙伴们,看文档经常会看到这样一句话:(下面是微信开发文档的一部分原话截图) 这句话就是:开发者必须在自己的服务全局缓存access_token,jsapi_ticket 下 ...

  6. iPad 控件 UIPopoverPresentationController 使用 iPhone可用

    UIPopoverController 在iOS9之后被废弃了,,, iOS8 新控件UIPopoverPresentationController可运用在iphone和iPad上,使用基本同 UIP ...

  7. HTTP状态码大全

    完整的 HTTP 1.1规范说明书来自于RFC 2616,你可以在http://www.talentdigger.cn/home/link.php?url=d3d3LnJmYy1lZGl0b3Iub3 ...

  8. 小知识:Python函数传递变长

    先来实践一把: def f1(*args): print(args) f1(1,2,3,4) 得出:(1, 2, 3, 4) ----- 是一个元祖 Part 1: *args可以传递任意多的数,ar ...

  9. C++:名字查找先于类型检查

    Sub-Title: Name Hiding. "In C++, there is no overloading across scopes - derived class scopes a ...

  10. Hibernate一对一外键双向关联(Annotation配置)

    如上图所示:一个学生有一个学生证号,一个学生证号对应一名学生.在Hibernate中怎么用Annotation来实现呢? 学生类,主键是id:学生证的主键也是Id: Student.java pack ...