实现选择联动,例如选择中国,只出现中国的地区,选择地区后只出现该地区的城市
    domain包、util包不详细展示

    controller**

    1. package controller;
    2. import domain.Country;
    3. import service.CountryService;
    4. import util.MySpring;
    5. import javax.servlet.ServletException;
    6. import javax.servlet.annotation.WebServlet;
    7. import javax.servlet.http.HttpServlet;
    8. import javax.servlet.http.HttpServletRequest;
    9. import javax.servlet.http.HttpServletResponse;
    10. import java.io.IOException;
    11. import java.util.ArrayList;
    12. @WebServlet("/selectAllCountry")
    13. public class SelectAllCountryController extends HttpServlet {
    14. @Override
    15. protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    16. CountryService countryService= MySpring.getBean("service.CountryService");
    17. ArrayList<Country> countryArrayList= countryService.selectAllCountry();
    18. req.setAttribute("countryArrayList",countryArrayList);
    19. req.getRequestDispatcher("regist.jsp").forward(req,resp);
    20. }
    21. }
    1. package controller;
    2. import domain.Area;
    3. import service.AreaService;
    4. import util.MySpring;
    5. import javax.servlet.ServletException;
    6. import javax.servlet.annotation.WebServlet;
    7. import javax.servlet.http.HttpServlet;
    8. import javax.servlet.http.HttpServletRequest;
    9. import javax.servlet.http.HttpServletResponse;
    10. import java.io.IOException;
    11. import java.util.ArrayList;
    12. @WebServlet("/selectAreaByCid")
    13. public class SelectAreaByCidController extends HttpServlet {
    14. @Override
    15. protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    16. String cid=req.getParameter("cid");
    17. AreaService areaService= MySpring.getBean("service.AreaService");
    18. ArrayList<Area> areaArrayList=areaService.selectAreaByCid(Integer.parseInt(cid));
    19. req.setAttribute("areaArrayList",areaArrayList);
    20. //1.转发 JSP(本身就是拼接响应 内容就是响应信息)
    21. req.getRequestDispatcher("handleAreaList.jsp").forward(req,resp);
    22. //2.自己拼接响应(JSON)
    23. }
    24. }
    package controller;
    
    import domain.City;
    import service.CityService;
    import util.MySpring;
    
    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 java.io.IOException;
    import java.util.ArrayList;
    
    @WebServlet("/selectCityByAid")
    public class SelectCityByAidController extends HttpServlet {
        @Override
        protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            String aid=req.getParameter("aid");
            CityService cityService= MySpring.getBean("service.CityService");
            ArrayList<City> cityArrayList= cityService.selectCityByAid(Integer.parseInt(aid));
            req.setAttribute("cityArrayList",cityArrayList);
            req.getRequestDispatcher("handleCityList.jsp").forward(req,resp);
        }
    }
    

    dao

    package dao;
    
    import domain.Area;
    import domain.Country;
    
    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.PreparedStatement;
    import java.sql.ResultSet;
    import java.util.ArrayList;
    
    public class AreaDao {
        private String className="com.mysql.jdbc.Driver";
        private String url="jdbc:mysql://localhost:3306/cons";
        private String password="cy414ljh212,,,";
        public ArrayList<Area> selectAreaByCid(Integer cid){
            ArrayList<Area> areaArrayList=new ArrayList<>();
            Area area=null;
            try {
                Class.forName(className);
                Connection connection= DriverManager.getConnection(url,"root",password);
                String sql="SELECT AID, ANAME FROM AREA WHERE CID = ?";
                PreparedStatement preparedStatement=connection.prepareStatement(sql);
                preparedStatement.setInt(1,cid);
                ResultSet resultSet=preparedStatement.executeQuery();
                while (resultSet.next()){
                    Country country=new Country(cid,null) ;
                    area=new Area(resultSet.getInt("aid"), resultSet.getString("aname"),country);
                    areaArrayList.add(area);
                }
                resultSet.close();
                preparedStatement.close();
            }catch (Exception e){
                e.printStackTrace();
            }
            return areaArrayList;
        }
    }
    
    package dao;
    
    import domain.Area;
    import domain.City;
    
    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.PreparedStatement;
    import java.sql.ResultSet;
    import java.util.ArrayList;
    
    public class CityDao {
        private String className="com.mysql.jdbc.Driver";
        private String url="jdbc:mysql://localhost:3306/cons";
        private String password="cy414ljh212,,,";
        public ArrayList<City> selectCityByAid(Integer aid){
            ArrayList<City> cityArrayList=new ArrayList<>();
            City city=null;
            try {
                Class.forName(className);
                Connection connection= DriverManager.getConnection(url,"root",password);
                String sql="SELECT CITYID, CITYNAME, CITYSIZE FROM CITY WHERE AID = ?";
                PreparedStatement preparedStatement=connection.prepareStatement(sql);
                preparedStatement.setInt(1,aid);
                ResultSet resultSet=preparedStatement.executeQuery();
                while (resultSet.next()){
                    Area area=new Area(aid,null,null) ;
                    city=new City(resultSet.getInt("cityid"), resultSet.getString("cityname"),resultSet.getInt("citysize"),area);
                    cityArrayList.add(city);
                }
                resultSet.close();
                preparedStatement.close();
            }catch (Exception e){
                e.printStackTrace();
            }
            return cityArrayList;
        }
    }
    
    package dao;
    
    import domain.Country;
    
    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.PreparedStatement;
    import java.sql.ResultSet;
    import java.util.ArrayList;
    
    public class CountryDao {
        private String className="com.mysql.jdbc.Driver";
        private String url="jdbc:mysql://localhost:3306/cons";
        private String password="cy414ljh212,,,";
        public ArrayList<Country> selectAllCountry(){
            ArrayList<Country> countryArrayList=new ArrayList<>();
            Country country=null;
            try {
                Class.forName(className);
                Connection connection= DriverManager.getConnection(url,"root",password);
                String sql="SELECT CID, CNAME FROM COUNTRY";
                PreparedStatement preparedStatement=connection.prepareStatement(sql);
                ResultSet resultSet=preparedStatement.executeQuery();
                while (resultSet.next()){
                    country=new Country(resultSet.getInt("cid"), resultSet.getString("cname"));
                    countryArrayList.add(country);
                }
                resultSet.close();
                preparedStatement.close();
            }catch (Exception e){
                e.printStackTrace();
            }
            return countryArrayList;
        }
    }
    

    service

    package service;
    
    import dao.AreaDao;
    import domain.Area;
    import util.MySpring;
    
    import java.util.ArrayList;
    
    public class AreaService {
        private AreaDao areaDao= MySpring.getBean("dao.AreaDao");
        public ArrayList<Area> selectAreaByCid(Integer cid){
            return areaDao.selectAreaByCid(cid);
        }
    }
    
    package service;
    
    import dao.CityDao;
    import domain.City;
    import util.MySpring;
    
    import java.util.ArrayList;
    
    public class CityService {
        private CityDao cityDao= MySpring.getBean("dao.CityDao");
        public ArrayList<City> selectCityByAid(Integer aid){
            return cityDao.selectCityByAid(aid);
        }
    }
    
    package service;
    
    import dao.CountryDao;
    import domain.Country;
    import util.MySpring;
    
    import java.util.ArrayList;
    
    public class CountryService {
        private CountryDao countryDao= MySpring.getBean("dao.CountryDao");
    
        public ArrayList<Country> selectAllCountry(){
            return countryDao.selectAllCountry();
        }
    }
    

    handleAreaList.jsp

    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
    <html>
        <head>
        </head>
        <body>
            <select id="areaSelect">
                <option>==请选择==</option>
                <c:forEach var="area" items="${requestScope.areaArrayList}">
                    <option value="${area.aid}">${area.aname}</option>
                </c:forEach>
            </select>
        </body>
    </html>
    

    handleCityList.jsp

    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
    <html>
        <head>
        </head>
        <body>
            <select id="citySelect">
                <option>==请选择==</option>
                <c:forEach var="city" items="${requestScope.cityArrayList}">
                    <option value="${city.cityid}">${city.cityname}</option>
                </c:forEach>
            </select>
        </body>
    </html>
    

    index.jsp

    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <html>
        <head>
            <script type="text/javascript">
                window.onload=function () {
                    document.getElementById("regist").onclick=function () {
                        window.location.href="selectAllCountry";
                    }
                }
            </script>
        </head>
        <body>
            <form action="" method="post">
                账号:<input type="text" name="username" value=""><br>
                密码:<input type="password" name="password" value=""><br>
                <input type="submit" value="登录">
                <input id="regist" type="button" value="注册">
            </form>
        </body>
    </html>
    

    regist.jsp

    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>>
    <html>
        <head>
            <script type="text/javascript">
                window.onload=function () {
                    document.getElementById("countrySelect").onchange=function () {
                        //发送异步请求,首先创建一个对象
                        var xmlHttp=new XMLHttpRequest();
                        //打开一个管道(用来与服务器进行通信)
                        xmlHttp.open("post","selectAreaByCid?cid="+this.value,true);
                        //发送请求
                        xmlHttp.send();
                        xmlHttp.onreadystatechange=function () {
                            if(xmlHttp.readyState==4&&xmlHttp.status==200){
                                //处理信息
                                //找到地区的那个span标签
                                var areaSpanEle=document.getElementById("areaSpan");
                                //将响应信息放入标签,即handleAreaList中的内容
                                areaSpanEle.innerHTML=xmlHttp.responseText;
                                document.getElementById("areaSelect").onchange=function () {
                                    var xmlHttp1=new XMLHttpRequest();
                                    xmlHttp1.open("post","selectCityByAid?aid="+this.value,true);
                                    xmlHttp1.send();
                                    xmlHttp1.onreadystatechange=function () {
                                        if(xmlHttp1.readyState==4&&xmlHttp1.status==200){
                                            var citySpanEle=document.getElementById("citySpan");
                                            citySpanEle.innerHTML=xmlHttp1.responseText;
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            </script>
    
        </head>
        <body>
            <form action="" method="post">
                账号:<input type="text" name="name" value=""><br>
                密码:<input type="text" name="name" value=""><br>
                确认:<input type="text" name="name" value=""><br>
                性别:
                <input type="radio" name="sex" value="男">男
                <input type="radio" name="sex" value="女">女
                <br>
                国家:
                <select id="countrySelect">
                    <option>==请选择==</option>
                    <c:forEach var="country" items="${requestScope.countryArrayList}">
                        <option value="${country.cid}">${country.cname}</option>
                    </c:forEach>
                </select>
                地区:
                <span id="areaSpan">
                    <select>
                        <option>==请选择==</option>
                    </select>
                </span>
                城市:
                <span id="citySpan">
                    <select>
                        <option>==请选择==</option>
                    </select>
                </span>
                <br>
                电话:<input type="text" name="name" value=""><br>
                邮箱:<input type="text" name="name" value=""><br>
                <input type="submit" value="注册">
                <input type="reset" value="重置">
            </form>
        </body>
    </html>
    

    QQ录屏20210708103319.mp4 (6.5MB)https://github.com/klxh-max/ajax-linkage代码github链接