解析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());
}
测试结果
可对比上面的文件信息
总结
花的时间比较长,感觉还是有点复杂,但用心去想办法去琢磨还是有效果的,希望能帮到屏幕的你,谢谢浏览!还不睡等秃头吧!