1. 程式人生 > >Ajax+servlet+ json+ mysql+jsp 實現省市聯動

Ajax+servlet+ json+ mysql+jsp 實現省市聯動

CityServlet

package com.suse.servlet;

import java.io.IOException;
import java.util.List;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.suse.dao.CityDao;
import com.suse.dao.impl.CityDaoImpl;
import com.suse.entity.City;

import net.sf.json.JSONArray;

/**
 * Servlet implementation class CityServlet
 */
@WebServlet("/citylist")
public class CityServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse
	 *      response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		// TODO Auto-generated method stub

		try {
			//獲取引數
			int pid = Integer.parseInt(request.getParameter("pid"));
			//找出所有城市資料
			CityDao cityDao = new CityDaoImpl();
			List<City> list = cityDao.findCity(pid);
			System.out.println(list.get(0).getCname());
			
			
			//返回資料把list--->json資料
			JSONArray jsonArray=JSONArray.fromObject(list);
			String json=jsonArray.toString();
			System.out.println("json="+json);
			response.setContentType("text/html;charset=utf-8");
			response.getWriter().write(json);
			
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse
	 *      response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		// TODO Auto-generated method stub
		doGet(request, response);
		
	}

}

 CityDao

package com.suse.dao;



import java.util.List;

import com.suse.entity.City;

public interface CityDao {
	//返回的是一個城市集合
      List<City> findCity(int pid) throws Exception ;
	

}

CityDaoImpl

package com.suse.dao.impl;

import java.sql.Connection;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;

import com.mysql.jdbc.PreparedStatement;

import com.suse.dao.CityDao;
import com.suse.entity.City;
import com.suse.util.DbHelper;

public class CityDaoImpl implements CityDao {

	@Override
	public List<City> findCity(int pid) throws Exception {
		// TODO Auto-generated method stub
		List<City> list = new ArrayList<City>();
		//City city = new City();物件不應再次建立,而是每次查詢出來要在迴圈裡建立物件
		Connection conn = DbHelper.getConn();
		String sql = "select * from city where pid = ?";
		PreparedStatement pstmt = (PreparedStatement) conn.prepareStatement(sql);
		pstmt.setInt(1, pid);

		ResultSet rs = pstmt.executeQuery();
		while (rs.next()) {
			City city = new City();
			city.setId(rs.getInt("id"));
			city.setCname(rs.getString("cname"));
			city.setPid(rs.getInt("pid"));
			System.out.println(rs.getInt("id"));
			list.add(city);

		}

		
		return list;
	}
	
}

json.js

$(function() {
	// 1.找到省份元素
	$("#province").change(function() {
		// 2.一旦裡面的值發生可改變,那麼就去請求的該省份的元素
		// $.post(url,引數,回撥函式);
		var pid = $(this).val();
		$.post("citylist", {
			pid : pid
		}, function(data, status) {
			// alert("huidiao"+data);
			/*
			 * [{ "cname": "成都", "id": 5, "pid": 2 }, { "cname": "綿陽", "id": 6,
			 * "pid": 2 }, { "cname": "宜賓", "id": 7, "pid": 2 }, { "cname":
			 * "廣安", "id": 8, "pid": 2 }]
			 */
			// 先清空
			$("#city").html("<option value=''>-請選擇-");
			// 在遍歷
			$(data).each(function(index, c) {
				// alert(c.cname);
				$("#city").append("<option value='" + c.id + "'>" + c.cname);
			});

		}, "json");

	});

});

city.jsp

<%@ page language="java" contentType="text/html; charset=utf-8" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<%
	String path = request.getContextPath();
	out.print(path);
%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>
<script src="<%=path%>/js/jquery-3.2.1.js"></script>
<script src="js/json.js"></script>
</head>
<body>




省份:<select  name="province"   id="province">
		<option  value="">-請選擇-
		<option  value="1">廣東
		<option  value="2">四川
		<option  value="3">重慶
		<option  value="4">湖南
		
		</select>
		
	城市:
	<select  name="city"  id="city">
		<option  value="">-請選擇-
		
		</select>
		
	
</body>
</html>

DbHelper

package com.suse.util;

import java.sql.Connection;
import java.sql.DriverManager;

public class DbHelper {

	private static String URL = "jdbc:mysql://127.0.0.1:3306/ajax?useUnicode=true&characterEncoding=utf-8";
	private static String Driver = "com.mysql.jdbc.Driver";
	private static String user = "root";
	private static String password = "";

	public static Connection getConn() throws Exception {
		Class.forName(Driver);
		Connection conn = DriverManager.getConnection(URL, user, password);
		
		return conn;
	}

}

City.java

package com.suse.entity;

public class City {
	private int id;
	private String cname;
	private int  pid;
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public String getCname() {
		return cname;
	}
	public void setCname(String cname) {
		this.cname = cname;
	}
	public int getPid() {
		return pid;
	}
	public void setPid(int pid) {
		this.pid = pid;
	}
	

}