JavaSE02_Day05(上)-WebServer项目(八、九、十):解析web.xml文件、重构setEntity方法、完成注册业务
一、版本八:解析web.xml文件
在http包下新建一个类:HttpContext,使用这个类定义相关Http协议的内容。由于不同的文件对应的Content-Type值不同,那么在HttpContext类中定义一个Map。 使用Tomcat安装目录的下的conf/web.xml文件,将里面配置的所有媒介(介质)类型都解析出来,并初始化HttpContext中mimeMapping的这个Map,使得我们的WebServer也能支持所有的媒介(介质)类型。
步骤1:在项目的pom.xml文件添加dom4j的依赖
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>cn.tedu</groupId>
<artifactId>webserver01</artifactId>
<version>0.0.1-SNAPSHOT</version>
<dependencies>
<!-- https://mvnrepository.com/artifact/dom4j/dom4j -->
<dependency>
<groupId>dom4j</groupId>
<artifactId>dom4j</artifactId>
<version>1.6.1</version>
</dependency>
</dependencies>
</project>
步骤2:在项目目录下创建一个目录,名字为conf,将群文件中上传的web.xml复制进来
步骤3:编写HttpContext类,通过解析web.xml文件初始化mimeMapping
package cn.tedu.http;
import java.io.File;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
/**
* 解析web.xml文件,使用其中的媒介类型
* @author cjn
*
*/
public class HttpContext {
//定义用于存储媒介类型的Map属性
private static Map<String, String> mimeMapping = new HashMap<String, String>();
//类加载时自动加载静态块,进行初始化mimeMapping操作
static {
initMime();
}
/**
* 静态方法,用于解析web.xml文件中的媒介类型
* @param args
*/
public static void initMime() {
/*
* 解析web.xml文件中的媒介类型,
* 然后添加到Map属性中
*/
try {
SAXReader reader = new SAXReader();
Document document = reader.read(new File("conf/web.xml"));
//获取根节点<web-app></web-app>
Element root = document.getRootElement();
//获取根节点中字节点名字是mime-mapping的节点元素
List<Element> elements = root.elements("mime-mapping");
//获取mime-mapping节点中子节点对应的内容: extension、mime-type
for (Element e : elements) {
String key = e.elementText("extension");
String value = e.elementText("mime-type");
//将获取到的元素数据存储到属性Map中
mimeMapping.put(key, value);
}