9.问题:如何利用dom4j技术解析XML文档?

解决方案:

第一步:在pom.xml配置文件中添加dom4j的依赖

<dependencies>
   <dependency>
        <groupId>dom4j</groupId>
        <artifactId>dom4j</artifactId>
        <version>1.6.1</version>
   </dependency>
</dependencies>

第二步:创建目标xml文档--servlets.xml

<?xml version="1.0" encoding="UTF-8"?>
<servlets>
   <servlet id="1">
        <url>/myweb/reg</url>
        <className>com.webserver.servlet.RegServlet</className>
   </servlet>
   <servlet id="2">
        <url>/myweb/login</url>
        <className>com.webserver.servlet.LoginServlet</className>
   </servlet>
   <servlet id="3">
        <url>/myweb/update</url>
        <className>com.webserver.servlet.UpdateServlet</className>
   </servlet>
</servlets>

第三步:解析servlets.xml(共8步)

/**
 * servlet对应关系 key:请求路径 value:对应的Servlet类的完全限定名
 */
private static final Map<String, String> SERVLET_MAPPING = new HashMap<>();

static {
    initServletMapping();
}
/**
 * 初始化请求与对应的Servlet名字
 */
private static void initServletMapping() {
    /**
     * 解析conf/servlets.xml文档中的元素并保存到Map集合中(将来再添一个业务,则只需要在servlets.xml文档中新增标签即可)
     * 将根元素<servlets>下的所有<servlet>元素取出
     * 并将每个<servlet>元素中的属性(url的值作为key,className的值作为value)
     * 保存到SERVLET_MAPPING这个Map中完成初始化
     */
    try {
        SAXReader sax = new SAXReader();// 1.创建SAXReader
        Document doc = sax.read(new File("./conf/servlets.xml"));// 2.使用SAXReader读取conf目录下的servlets.xml文件
        Element root = doc.getRootElement();// 3.获取servlets.xml文件的根标签
        List<Element> mimeList = root.elements("servlet");// 4.获取根标签下所有名为<servlet>的子元素
        for (Element mimeEle : mimeList) {// 5.遍历每个<servlet>元素
            String key = mimeEle.elementTextTrim("url");// 6.获取url(即<url>中间的文本作为key)
            String value = mimeEle.elementTextTrim("className");// 7.获取url对应的className(即<className>中间的文本作为value)
            SERVLET_MAPPING.put(key, value);// 8.保存到Map集合SERVLET_MAPPING中
        }
    } catch (DocumentException e) {
        e.printStackTrace();
    }
}
/**
 * 根据请求路径获取对应的业务处理类的类名
 * 
 * @param url
 * @return className
 */
public static String getServletName(String url) {
    return SERVLET_MAPPING.get(url);
}

2019/1/29 16:06:16 已解决!