xml建模解析

xml建模:

1.封装代码,提高复用性
2、提高性能
xml解析的过程只会有一次
需要解析的文件

<?xml version="1.0" encoding="UTF-8"?>
<web-app>
  <servlet>
  	<servlet-name>jrebelServlet</servlet-name>
  	<servlet-class>com.zking.xml.JrebelServlet</servlet-class>
  </servlet>
  
  <servlet-mapping>
  	<servlet-name>jrebelServlet</servlet-name>
  	<url-pattern>/jrebelServlet</url-pattern>
  </servlet-mapping>
  
  <servlet>
  	<servlet-name>jrebelServlet2</servlet-name>
  	<servlet-class>com.zking.xml.JrebelServlet2</servlet-class>
  </servlet>
  
  <servlet-mapping>
  	<servlet-name>jrebelServlet2</servlet-name>
  	<url-pattern>/jrebelServlet2</url-pattern>
  	<url-pattern>/jrebelServlet3</url-pattern>
  </servlet-mapping>
</web-app>

给每个标签写一个实体类
servlet-name

package com.liubiao.zymodel;

public class ServletNameModel {
	
	private String value;

	public String getValue() {
		return value;
	}

	public void setValue(String value) {
		this.value = value;
	}
	
}

servlet-class

package com.liubiao.zymodel;

public class ServletClassModel {
	
	private String value;

	public String getValue() {
		return value;
	}

	public void setValue(String value) {
		this.value = value;
	}
	
}

url-pattern

package com.liubiao.zymodel;

public class UrlPatternModel {
	
	private String value;

	public String getValue() {
		return value;
	}

	public void setValue(String value) {
		this.value = value;
	}
	
}

servlet

package com.liubiao.zymodel;

import java.util.HashMap;
import java.util.Map;

import com.liubiao.model.ForwardModel;

public class ServletModel {
	
	private ServletNameModel servletNameModel;
	private ServletClassModel servletClassModel;
	
	public ServletNameModel getServletNameModel() {
		return servletNameModel;
	}
	public void setServletNameModel(ServletNameModel servletNameModel) {
		this.servletNameModel = servletNameModel;
	}
	public ServletClassModel getServletClassModel() {
		return servletClassModel;
	}
	public void setServletClassModel(ServletClassModel servletClassModel) {
		this.servletClassModel = servletClassModel;
	}
	
}

servlet-mapping

package com.liubiao.zymodel;

import java.util.HashMap;
import java.util.Map;

import com.liubiao.model.ForwardModel;

public class ServletMappingModel {
	
	private ServletNameModel servletNameModel;
	private Map<String, UrlPatternModel> upMap=new HashMap<String, UrlPatternModel>();
	
	public ServletNameModel getServletNameModel() {
		return servletNameModel;
	}
	public void setServletNameModel(ServletNameModel servletNameModel) {
		this.servletNameModel = servletNameModel;
	}
	
	public void push(ServletNameModel servletNameModel,UrlPatternModel urlPatternModel) {
		upMap.put(servletNameModel.getValue(), urlPatternModel);
	}
	
	/**
	 *  获取到url-pattern标签中的值
	 * @param value url-pattern标签中的值
	 * @return
	 */
	public UrlPatternModel pop(String value) {
		UrlPatternModel urlPatternModel=upMap.get(value);
		return urlPatternModel;
	}
	
}

web-app

package com.liubiao.zymodel;

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

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

import com.liubiao.model.ActionModel;
import com.liubiao.model.ConfigModel;

public class WebappModel {
	
	private Map<String, ServletModel> servletModel=new HashMap<String, ServletModel>();
	private Map<String, ServletMappingModel> servletMappingModel=new HashMap<String, ServletMappingModel>();
	
	public ServletModel getServletModel(String name) {
		return servletModel.get(name);
	}

	public ServletMappingModel getServletMappingModel(String name) {
		return servletMappingModel.get(name);
	}

	public void build(ServletModel sm) {
		servletModel.put(sm.getServletNameModel().getValue(), sm);
	}
	
	public void builds(ServletMappingModel smm) {
		servletMappingModel.put(smm.getServletNameModel().getValue(), smm);
	}
	
}

通过资源文件构建对应的模型对象

package com.liubiao.zymodel;

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

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

import com.liubiao.model.ActionModel;
import com.liubiao.model.ConfigModel;

public class WebappModelFactory {
	
	public static WebappModel build(String path) throws Exception {
		//加载资源文件 path==/文件名称
		InputStream in = WebappModelFactory.class.getResourceAsStream(path);
		SAXReader reader=new SAXReader();
		//将文件存放到doc中
		Document doc = reader.read(in);
		//获取类对象
		WebappModel webappModel=new WebappModel();
		ServletModel servletModel=null;
		ServletMappingModel servletMappingModel=null;
		//查出web.xml文件中的servlet标签存放到servletEles中
		List<Element> servletEles = doc.selectNodes("/web-app/servlet");
		//遍历servletEles
		for (Element servletEle : servletEles) {
			servletModel=new ServletModel();
			ServletNameModel servletNameModel=new ServletNameModel();
			ServletClassModel servletClassModel=new ServletClassModel();
			//查询出servlet-name标签中的值
			Element servletName=(Element)servletEle.selectSingleNode("servlet-name");
			//查询出servlet-class标签中的值
			Element servletClass=(Element)servletEle.selectSingleNode("servlet-class");
			//将servlet-name中的值存放到ServletNameModel实体类中
			servletNameModel.setValue(servletName.getText());
			//将servlet-class中的值存放到ServletClassModel实体类中
			servletClassModel.setValue(servletClass.getText());
			//将ServletNameModel、ServletClassModel实体类中的值加载到ServletModel实体类中
			servletModel.setServletNameModel(servletNameModel);
			servletModel.setServletClassModel(servletClassModel);
			//将ServletModel实体类中的值存放到webappModel实体类中
			webappModel.build(servletModel);
		}
		//获取servlet-mapping标签下的值
		List<Element> mappingEles=doc.selectNodes("/web-app/servlet-mapping");
		for (Element mappingEle : mappingEles) {
			servletMappingModel=new ServletMappingModel();
			ServletNameModel servletNameModel=new ServletNameModel();
			//获取servlet-name标签中的值
			Element nameElement=(Element)mappingEle.selectSingleNode("servlet-name");
			//将servlet-name中的值存放到ServletNameModel实体类中
			servletNameModel.setValue(nameElement.getText());
			//将ServletNameModel实体类中的值存放到ServletMappingModel实体类中
			servletMappingModel.setServletNameModel(servletNameModel);
			//url-pattern标签有多个值用集合装起来
			List<Element> urlEles = mappingEle.selectNodes("url-pattern");
			for (Element urlEle : urlEles) {
				UrlPatternModel urlPatternModel=new UrlPatternModel();
				//将url-pattern标签中的值加载到UrlPatternModel实体类中
				urlPatternModel.setValue(urlEle.getText());
				//可以通过servletNameModel(键)获取到urlPatternModel(值)
				servletMappingModel.push(servletNameModel, urlPatternModel);
			}
			//将ServletMappingModel实体类中的值存放到webappModel实体类中
			webappModel.builds(servletMappingModel);
		}
		return webappModel;
	}
	
	public static WebappModel build() throws Exception {
		return WebappModelFactory.build("/web.xml");
	}
	
	public static void main(String[] args) throws Exception {
		
		//调用方法
		WebappModel wm = WebappModelFactory.build();
		//获取servlet-name为jrebelServlet的servlet标签和servlet-mapping标签的值
		ServletModel servletModel=wm.getServletModel("jrebelServlet");
		ServletMappingModel servletMappingModel=wm.getServletMappingModel("jrebelServlet2");
		//获取到url-pattern中的值
		UrlPatternModel urlPatternModel=servletMappingModel.pop(servletMappingModel.getServletNameModel().getValue());
		System.out.println("servlet:");
		System.out.println("       servlet-name:"+servletModel.getServletNameModel().getValue());
		System.out.println("servlet-mapping:");
		System.out.println("       servlet-name:"+servletMappingModel.getServletNameModel().getValue());
		System.out.println("       url-pattern:"+urlPatternModel.getValue());
		
	}
	
}

代码不多解释看注释
结果

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值