解决方案:
<dependencies>
<dependency>
<groupId>dom4j</groupId>
<artifactId>dom4j</artifactId>
<version>1.6.1</version>
</dependency>
</dependencies>
<?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>
/**
* 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 已解决!