首页 > 代码库 > 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(); } }}
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。