解析web.xml文件

web.xml文件信息

在这里插入图片描述

解析过程

建模

建模要从最下层建起,我下面按顺序来的,可以看上面的xml文件截图。
由于最下层的servlet-name在每个父节点下都是只有一个的而且没有属性节点,所以就不用建了直接放父节点的模中当一个属性了,也方便WebModel中给map集合加值时设置键(key)

url-pattern的模——UrlModel

可以看到上面的xml文件里是有多个urlurl-pattern的父节点是同一个所以不能像servlet-name一样不建了
在这里插入图片描述

servlet-mapping的模——MappingModel

里面的Upush方法是用来给集合Map添加数据的,后面带push的也是
Upop是来查找该类Map集合数据的,后面带pop的也是
在这里插入图片描述

servlet的模——ServletModel

在这里插入图片描述

web-app的模——WebModel

在这里插入图片描述

解析(工厂)

需要的jar包

在这里插入图片描述

所导的包

有很多同名的包不要导错了

import java.io.InputStream;
import java.util.List;

import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;

解析代码

下面那个同名的无参方法是我用来测试的

//参数放文件路径
public static WebModel build(String path) throws Exception {
		InputStream in=WebModelFactory.class.getResourceAsStream(path);
		SAXReader reader=new SAXReader();
		Document doc=reader.read(in);
		//把建的模准备好
		WebModel webModel=new WebModel();
		ServletModel servletModel=null;
		MappingModel mappingModel=null;
		UrlModel urlModel=null;
		//解析servlet节点
		List<Element> servEles=doc.selectNodes("/web-app/servlet");
		for (Element servEle : servEles) {
			servletModel=new ServletModel();
			List<Element> nameEles=servEle.selectNodes("servlet-name");
			for (Element nameEle: nameEles) {
				servletModel.setNametext(nameEle.getText());
			}
			List<Element> classEles=servEle.selectNodes("servlet-class");
			for (Element classEle: classEles) {
				servletModel.setClasstext(classEle.getText());
			}
			//把ServletModel加到WebModel的servletmap集合里去
			webModel.Spush(servletModel);
		}
		//解析servlet-mapping节点
		List<Element> mappingEles=doc.selectNodes("/web-app/servlet-mapping");
		for (Element mapEle: mappingEles) {
			mappingModel=new MappingModel();
			List<Element> nameEles=mapEle.selectNodes("servlet-name");
			for (Element nameEle: nameEles) {
				mappingModel.setNametext(nameEle.getText());
			}
			//解析url-pattern节点
			List<Element> urlEles=mapEle.selectNodes("url-pattern");
			for (Element urlEle : urlEles) {
				urlModel=new UrlModel();
				urlModel.setUrltext(urlEle.getText());
				//把urlModel加到MappingModel的urlmap集合里去
				mappingModel.Upush(urlModel);
			}
			//把MappingModel加到WebModel的mappingmap集合里去
			webModel.Mpush(mappingModel);
		}
		return webModel;
	}
	
	public static WebModel build() throws Exception {
		return build("/web.xml");
	}

测试

测试代码

	public static void main(String[] args) throws Exception {
		WebModel model=WebModelFactory.build();
		ServletModel servModel=model.Spop("jrebelServlet2");
		System.out.println(servModel.getClasstext());
	}

测试结果

可对比上面的文件信息
在这里插入图片描述

总结

花的时间比较长,感觉还是有点复杂,但用心去想办法去琢磨还是有效果的,希望能帮到屏幕的你,谢谢浏览!还不睡等秃头吧!

展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 数字20 设计师: CSDN官方博客
应支付0元
点击重新获取
扫码支付

支付成功即可阅读