首页 > 代码库 > jsp+ajax+serverlet实现省市二级联动

jsp+ajax+serverlet实现省市二级联动

jsp界面

<%@ page language="java" contentType="text/html; charset=utf-8"    pageEncoding="utf-8"%>        <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8"><title>Insert title here</title><script type="text/javascript">function loadProvince() {    var req = new XMLHttpRequest();    req.onreadystatechange = function() {        if (req.readyState == 4) {            var data = req.responseText;                        var myObj = eval("(" + data + ")");                        //eval函数:格式化函数--将字符串转化为javascript对象的函数            for (var i = 0; i < myObj.length; i++) {                var oneProvince = myObj[i];                var opKey = oneProvince.split("-")[0];                var opValue = oneProvince.split("-")[1];                                //找到province对应的下拉框                var proSelectObj = document.getElementById("proId");                                 var newOption = document.createElement("OPTION");                 newOption.value = opKey;                 newOption.innerHTML = opValue;                                 proSelectObj.appendChild(newOption);            }                        //执行一次加载城市            loadCity();        }    };    req.open("post", "pa", true);    req.send(null);}function loadCity() {    var proSelectObj = document.getElementById("proId");        //获取到当前选中的省份,并用于数据库查询    var proIdToDB = proSelectObj[proSelectObj.selectedIndex].value;        var req = new XMLHttpRequest();    req.onreadystatechange = function() {        if (req.readyState == 4) {            var data = req.responseText;            var myObj = eval("(" + data + ")");                        var citySelectObj = document.getElementById("cityId");            //清理原来的城市信息            while (citySelectObj.childNodes.length > 0) {                citySelectObj.removeChild(citySelectObj.lastChild);            }                        for (var i = 0; i < myObj.length; i++) {                var oneCity = myObj[i];                var cityKey = oneCity.split("-")[0];                var cityValue = oneCity.split("-")[1];                                var newOption = document.createElement("OPTION");                newOption.value = cityKey;                newOption.innerHTML = cityValue;                                citySelectObj.appendChild(newOption);            }        }    };    req.open("post", "ca", true);    req.setRequestHeader("Content-type", "application/x-www-form-urlencoded");    req.send("proId=" + proIdToDB);}</script></head><body onload="loadProvince()">    <!-- 当页面加载完毕时执行 -->省:<select id="proId" onchange="loadCity()"> <!-- 选项option变更的时候触发事件 --></select>城市:<select id="cityId"></select></body></html>

serverlet 获取地市数据

package com.shxt.lesson15.servlets;import java.io.IOException;import java.io.PrintWriter;import java.sql.Connection;import java.sql.DriverManager;import java.sql.ResultSet;import java.sql.Statement;import java.util.ArrayList;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;public class ProvinceAjaxServlet extends HttpServlet {    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {        //加载省份信息        request.setCharacterEncoding("utf-8");        try {            Class.forName("com.mysql.jdbc.Driver");            Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3308/lingyun1", "root", "mysql");            Statement stmt = conn.createStatement();            ResultSet rs = stmt.executeQuery("select * from shxt_province");                        ArrayList<String> provinceList = new ArrayList<String>();            while (rs.next()) {                String key = rs.getString("PROID");                String value = rs.getString("PRONAME");                provinceList.add("\"" + key + "-" + value + "\"");            }                        response.setContentType("text/html; charset=utf-8");            PrintWriter out = response.getWriter();            System.out.println(provinceList);                        out.print(provinceList);                        out.flush();            out.close();                    } catch (Exception e) {            e.printStackTrace();        }            }}

Serverlet 根据地市代码获取城市数据

package com.shxt.lesson15.servlets;import java.io.IOException;import java.io.PrintWriter;import java.sql.Connection;import java.sql.DriverManager;import java.sql.ResultSet;import java.sql.Statement;import java.util.ArrayList;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;public class CityAjaxServlet extends HttpServlet {    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {        request.setCharacterEncoding("utf-8");        try {            String proId = request.getParameter("proId");            String sql = "select * from shxt_city where PROID = ‘" + proId + "‘";            Class.forName("com.mysql.jdbc.Driver");            Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3308/lingyun1", "root", "mysql");            Statement stmt = conn.createStatement();            ResultSet rs = stmt.executeQuery(sql);                        ArrayList<String> cityList = new ArrayList<String>();            while (rs.next()) {                String key = rs.getString("CITYID");                String value = rs.getString("CITYNAME");                cityList.add("\"" + key + "-" + value + "\"");            }                        response.setContentType("text/html; charset=utf-8");            PrintWriter out = response.getWriter();            out.print(cityList);                        out.flush();            out.close();        } catch (Exception e) {            e.printStackTrace();        }    }}

 小例子

<%@ page language="java" contentType="text/html; charset=utf-8"    pageEncoding="utf-8"%><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8"><title>Insert title here</title><!-- ajax 异步交互(javascript和xml的形式) --><script type="text/javascript">function validData() {        var value1 = document.getElementById("myText1").value;    var value2 = document.getElementById("myText2").value;        //请求对象 request    var req = new XMLHttpRequest();        //创建一个监听函数:监视ajax的各个状态:    //1、open状态:servlet(可以接收参数)    //2、send发送:发送参数、【重点】需要设置请求头部信息    //3、reciving反馈:servlet开始向页面发送反馈信息    //4、loaded载入:servlet发送的信息全部接收完毕    req.onreadystatechange = function() {        if (req.readyState == 1) {    //open:准备时间            var mySpan = document.getElementById("showPosition");            mySpan.innerHTML = "<img src=http://www.mamicode.com/‘a.jpg‘ />";            document.getElementById("myBtn").style.display = "none";        } else if (req.readyState == 4) {            var data = req.responseText;            document.getElementById("myBtn").style.display = "block";            document.getElementById("showPosition").innerHTML = data;        }    };        //(用post方式)打开myAjax服务应用(Server applet)    req.open("post", "myAjax", true);        req.setRequestHeader("Content-type", "application/x-www-form-urlencoded");    //发送    req.send("a=" + value1 + "&b=" + value2);}</script></head><body><input id="myText1" /><br /><input id="myText2" onblur="validData()" /><span id="showPosition"></span><br /><input /><input type="button" id="myBtn" value="提交" /></body></html>

serverlet

package com.shxt.lesson15.servlets;import java.io.IOException;import java.io.PrintWriter;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;public class AjaxServlet extends HttpServlet {    /**     * Input/Output    字节流(byte的流)     * Reader/Writer 字符流(char的流)     * InputStreamReader ---- 将input转为reader(byte流变char流)     * */    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {        request.setCharacterEncoding("utf-8");        try {            String txt1 = request.getParameter("a");            String txt2 = request.getParameter("b");                        System.out.println(txt1 + ", " + txt2);                        Thread.sleep(5000);                        //【重点】设置正文类型 -- 页面html            response.setContentType("text/html; charset=utf-8");                        //servlet向页面发送信息,需要一个response的响应对象            PrintWriter out = response.getWriter();    //Writer流(字符型输出流---向目标写入信息)                        out.print("返回的信息:发送成功");                        out.flush();    //刷新--流中的数据清空            out.close();    //流、关闭        } catch (Exception e) {            e.printStackTrace();        }    }}