解析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());
	}

测试结果

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

总结

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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值