随笔都是学习笔记
随笔仅供参考,为避免笔记中可能出现的错误误导他人,请勿转载。

简介:

首先下面是需要用到的xml文档数据;

https://www.cnblogs.com/0099-ymsml/p/16092696.html

需要展示的功能就是两个选择栏,一个选择省份名称,第二个选择城市名称;

必然地,首先需要选择了省份名称才能选择城市名称。

首先是两个servlet.java:

第一个获取省份名称的PServlet.java(GET请求):

 

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 org.dom4j.Attribute;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.io.*;

@WebServlet("/PServlet")
public class PServlet extends HttpServlet {

    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        request.setCharacterEncoding("utf-8");
        response.setContentType("text/html;charset=utf-8");

        /**
         * 响应所有省份名称,使用逗号分割
         */
        try {
            // 创建解析器
            SAXReader reader = new SAXReader();
            // 解析xml得到doc对象
            Document doc = reader.read("D:\\SoftWare\\SoftWareFiles\\EclipsProject\\AjaxDemo\\PCProject\\src\\main\\webapp\\PCXML.xml");
            List<Attribute> ele = doc.selectNodes("//province/@name");
            System.out.print(ele.get(1).getText());

            String str = "";
            for (int x = 0; x < ele.size(); x++) {
                str += ele.get(x).getText();
                if (x != ele.size()-1) { // 如果不是最后一位就在后面加上“-”
                    str += "-";
                }
            }
            System.out.print(ele.get(0).getText());
            // 发送数据
            response.getWriter().print(str);
        } catch (
        DocumentException e) {
            e.printStackTrace();
        }
    }
}

 

然后是通过客户端点击的省份名称去获取城市名称的CServler.java(POST请求):

 

import java.io.IOException;
import java.io.InputStream;
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 org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;

@WebServlet("/CServlet")
public class CServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        request.setCharacterEncoding("utf-8");
        response.setContentType("text/xml;charset=utf-8");

        /**
         * 获取省份名称,加载省份对应的<province>元素 把元素转换为字符串发送给客户端
         */
        try {
            // 创建解析器
            SAXReader reader = new SAXReader();
            // 解析xml得到doc对象
            Document doc = reader.read("D:\\SoftWare\\SoftWareFiles\\EclipsProject\\AjaxDemo\\PCProject\\src\\main\\webapp\\PCXML.xml");
            // 得到<cities> 根节点
            Element rootElement = doc.getRootElement();
            // 省份元素列表
            List<Element> pEle = rootElement.elements("province");
            
            // 获取传过来的省份名称
            String pName = request.getParameter("pName");
            // 匹配省名称
            Element province = (Element)doc.selectSingleNode("//province[@name='" + pName + "']");
            // 将查询到的<province>标签的xml转换为字符串
            String proXML = province.asXML();
            // 发送数据
            response.getWriter().print(proXML);    // 此时为xml形式的字符串,需要修改setContentType的内容
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

 

然后就是前端代码文件:

 

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>PC</title>
<script>
    // 当页面加载完成后,向id="province"中添加省份的名称
    window.onload = function() {
        // 获取province
        var pro = document.getElementById("province");
        // 获取city
        var city = document.getElementById("city");
        // 创建异步对象
        var xp = new XMLHttpRequest();
        // 打开连接
        xp.open("GET", "/PCProject/PServlet", true);
        // 发送请求
        xp.send();
        // 监听事件:onreadystatechange:当状态发送变化时
        xp.onreadystatechange = function() {
            var option = "<option id='opt'>====== Please choose the province ======</option>";
            // 双重判断
            if (xp.readyState == 4 && xp.status == 200) {
                // 接收的响应内容
                var text = xp.responseText;
                var pName = text.split("-");
                for (var i = 0; i < pName.length; i++) {
                    option += "<option id='" + pName[i] + "'>" + pName[i]
                            + "</option>";
                }
            }
            // 插入到省名称
            pro.innerHTML = option;
        };

        pro.onchange = function() {
            // 获取province
            var pro = document.getElementById("province");
            // 创建异步对象
            var xpp = new XMLHttpRequest();
            // 打开连接
            xpp.open("POST", "/PCProject/CServlet", true);
            // 设置请求头
            xpp.setRequestHeader("Content-Type",
                    "application/x-www-form-urlencoded");
            // 发送请求:pro是<province>标签     pro.value是下拉列表的值
            xpp.send("pName=" + pro.options[pro.selectedIndex].text);
            // 设置city开头
            var optionCity = "<option>====== &emsp;Please choose the city&nbsp;&emsp;======</option>";
            xpp.onreadystatechange = function() {
                if (xpp.readyState == 4 && xpp.status == 200) {
                    // 响应的xml格式的内容
                    var doc = xpp.responseXML;
                    // 获取item下的内容 返回Element
                    var cName = doc.getElementsByTagName("item");
                    // 遍历ELement元素
                    for (var i = 0; i < cName.length; i++) {
                        optionCity += "<option id='" + cName[i].textContent + "'>"
                                + cName[i].textContent + "</option>";
                    }
                }
                // 插入文本
                city.innerHTML = optionCity;
            };
        };
        
    };
</script>
</head>
<body>
    <table border="1" style="width: 50%; height: 50px; float: left;">
        <tr>
            <th style="font-size: 50px;color:skyblue" >请选择省份</th>
            <th style="font-size: 50px;color:skyblue">请选择城市</th>
        </tr>
        <tr>
            <td><select id="province" style="font-size: 50px">
            </select>
            </td>
            <td>
            <select id="city" style="font-size: 50px">
                    <option>====== &emsp;Please choose the city&nbsp;&emsp;======</option>
            </select>
        </tr>
    </table>
</body>
</html>

 

 

 

posted on 2022-04-02 16:29  时间完全不够用啊  阅读(179)  评论(0编辑  收藏  举报