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());
}
}
代码不多解释看注释
结果