比较两个web.xml

import java.io.File;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.Map.Entry;
import org.jdom.Document;
import org.jdom.Element;
import org.jdom.input.SAXBuilder;

 

 

public class WebXmlConfigImpl {
 /**listenerList存放web.xml中的listener节点*/
 private List listenerList = new ArrayList();
 /**filterList存放web.xml中的filter节点*/
 private List filterList = new ArrayList();
 /**servletMap存放web.xml中的servlet节点*/
 private Map servletMap = new HashMap();
 /**MimeMap存放web.xml中的mime-mapping节点*/
 private Map mimeMap = new HashMap();
 /**tldMap存放web.xml中的taglab节点*/
 private Map tldMap = new HashMap();
 /**sc存放web.xml中的session-config节点*/
 private SessionConfig sc = new SessionConfig();
 /**源文件中没有的配置项个数*/
 public static int srcWebNumber=0;
 /**目标文件中没有的配置项个数*/
 public static int newWebNumber=0;
 /**值不同的配置项个数*/
 public static int differentWebNumber=0;
 /**存放WebXmlConfigImpl类运行后的输出结果*/
 public static StringBuffer sbWeb=new StringBuffer();
 

 
 /**
  * 根据文件路径构建Doc对象
  * @param file web.xml文件路径
  * @throws Exception
  */
 public WebXmlConfigImpl(String filePath) throws Exception{
  File webXml=new File(filePath);
  SAXBuilder saxBuilder = new SAXBuilder();  
  Document doc = saxBuilder.build(webXml);
  parseDoc(doc);
 }
 
 /**
  * 解析Doc
  * @param doc 文档对象
  */
 private void parseDoc(Document doc){
  if(doc!=null){
   Element webapps = doc.getRootElement();
   parseListener(webapps);
   parseFilter(webapps);
   parseServlet(webapps);
   parseMimeMap(webapps);
   parseTagLib(webapps);
   parseSession(webapps);
  }else{
   System.exit(0);
  }
 }
 
 /**
  * 获取所有listener
  * @param webapps 根节点
  */
 private void parseListener(Element webapps){
  List liss = webapps.getChildren("listener");
  int count = liss.size();
  for(int i=0;i<count;i++){
   Listener listener = new Listener();
   Element ele = (Element)liss.get(i);
   listener.setClassName(ele.getChildTextTrim("listener-class"));
   this.listenerList.add(listener);
  }
 }
 
 /**
  * 获取所有Filter
  * @param webapps 根节点
  */
 private void parseFilter(Element webapps){
  List filters = webapps.getChildren("filter");
  List mappings = webapps.getChildren("filter-mapping");
  int count = filters.size();
  int mcount = mappings.size();
  for(int i=0;i<count;i++){
   Filter_temp filter=new Filter_temp();
   Element fele =(Element) filters.get(i);
   filter.setName(fele.getChildTextTrim("filter-name"));
   filter.setClassname(fele.getChildTextTrim("filter-class"));
   List params = fele.getChildren("init-param");
   int pcount = params.size();
   List fps = new ArrayList();
   for(int j =0;j<pcount;j++){
    Element pe = (Element)params.get(j);
    Param param = new Param();
    param.setName(pe.getChildTextTrim("param-name"));
    param.setValue(pe.getChildTextTrim("param-value"));
    fps.add(param);
   }
   filter.setParams(fps);
   
   
   List mapArr = new ArrayList();
   for(int k=0;k<mcount;k++){
    Element mapItem = (Element)mappings.get(k);
    String mapName = mapItem.getChildTextTrim("filter-name");
    if(mapName.equals(filter.getName())){
     Element mappingurls = mapItem.getChild("url-pattern");
     if(mappingurls==null){
      Element cls = mapItem.getChild("servlet-name");
      filter.getMappingClass().add(cls.getText());
     }else{
      mapArr.add(mappingurls.getText());
     }
    }
   }
   filter.setMapping(mapArr);
   this.filterList.add(filter);
  }
 }
 
 /**
  * 获取所有Sevlet
  * @param webapps 根节点
  */
 private void parseServlet(Element webapps){
  List ss = webapps.getChildren("servlet");
  List sms = webapps.getChildren("servlet-mapping");
  int scount = ss.size();
  for(int i=0;i<scount;i++){
   Servlet servlet = new Servlet();
   Element se = (Element)ss.get(i);
   servlet.setName(se.getChildTextTrim("servlet-name"));
   servlet.setClassname(se.getChildTextTrim("servlet-class"));
   List params = new ArrayList();
   List elesp = se.getChildren("init-param");
   for(Iterator iter = elesp.iterator();iter.hasNext();){
    Element ele = (Element)iter.next();
    Param param = new Param();
    param.setName(ele.getChildTextTrim("param-name"));
    param.setValue(ele.getChildTextTrim("param-value"));
    params.add(param);
   }
   servlet.setParams(params);
   String loadOn = se.getChildTextTrim("load-on-startup");
   if(loadOn!=null&&!"".equals(loadOn)){
    servlet.setStartSeq(loadOn);
   }
   
   for(Iterator iter = sms.iterator();iter.hasNext();){
    Element mapping = (Element)iter.next();
    String mname = mapping.getChildTextTrim("servlet-name");
    if(mname.equals(servlet.getName())){
     servlet.setMapping(mapping.getChildTextTrim("url-pattern"));
     break;
    }
   }
   
   this.servletMap.put(servlet.getName(),servlet);
  }
 }
 /**
  * 获取所有Mime
  * @param webapps 根节点
  */
 private void parseMimeMap(Element webapps){
  List ms = webapps.getChildren("mime-mapping");
  int mimeCount = ms.size();
  for(int i=0;i<mimeCount;i++){
   Element m = (Element)ms.get(i);
   MimeType mt = new MimeType();
   String ext = m.getChildTextTrim("extension");
   mt.setExtension(ext);
   mt.setMimetype(m.getChildTextTrim("mime-type"));
   this.mimeMap.put(ext,mt);
  }
 }
 
 /**
  * 获取所有TagLib
  * @param webapps 根节点
  */
 private void parseTagLib(Element webapps){
  List ms = webapps.getChildren("taglib");
  int mimeCount = ms.size();
  for(int i=0;i<mimeCount;i++){
   Element m = (Element)ms.get(i);
   Tld tld = new Tld();
   String uri = m.getChildTextTrim("taglib-uri");
   String lac = m.getChildTextTrim("taglib-location");
   tld.setTldLocation(lac);
   tld.setTlduri(uri);
   this.tldMap.put(uri,tld);
  }
 }
 /**
  * 获取session-config
  * @param webapps 根节点
  */
 private void parseSession(Element webapps){
  Element element=webapps.getChild("session-config");
  String timeout=element.getChildTextTrim("session-timeout");
  sc.setTimeout(timeout);
 }
 
 /**
  * 配置文件比较方法
  * @param newWebXml 目标web.xml配置文件
  */
 public void Compare(WebXmlConfigImpl newWebXml){
  compareListener(newWebXml);
  compareFilter(newWebXml);
  compareServlet(newWebXml);
  compareTagLib(newWebXml);
  compareMimeMap(newWebXml);
  compareSession(newWebXml);
 }
 /**
  * 比较listener
  * @param newWebXml 目标web.xml配置文件
  */
 public void compareListener(WebXmlConfigImpl newWebXml){
  List srcList = this.listenerList;
  List newList = newWebXml.listenerList;
  int srcCount = srcList.size();
  int newCount = newList.size();
  for(int i=0;i<srcCount;i++){
   Listener lis = (Listener)srcList.get(i);
   String srcName = lis.getClassName();
   boolean isExists=false;
   Listener lis_p=null;
   for(int j=0;j<newCount;j++){
    lis_p = (Listener)newList.get(j);
    String newName = lis_p.getClassName();
    if(newName.equals(srcName)){
     isExists=true;     
    }
   }
   if(!isExists){
    System.out.println("<Listener>:"+srcName+"不存在目标文件中");
    sbWeb.append("<Listener>:").append(srcName).append("不存在目标文件中").append("\r\n");
    newWebNumber++;    
   }
  }
  for(int m=0;m<newCount;m++){
   Listener lis_p=(Listener)newList.get(m);
   String newName=lis_p.getClassName();
   boolean isExists=false;
   Listener lis=null;
   for(int n=0;n<srcCount;n++){
    lis=(Listener)srcList.get(n);
    String srcName=lis.getClassName();
    if(srcName.equals(newName)){
     isExists=true;
    }
   }
   if(!isExists){
    System.out.println("<Listener>:"+newName+"不存在源文件中");
    sbWeb.append("<Listener>:").append(newName).append("不存在源文件中").append("\r\n");
    srcWebNumber++;
   }
  }
  
 }
 /**
  * 比较filter
  * @param newWebXml 目标web.xml配置文件
  */
 public void compareFilter(WebXmlConfigImpl newWebXml){
  List frList = this.filterList;
  List frList_p = newWebXml.filterList;
  int count_p = frList_p.size();
  int count = frList.size();
  for(int i=0;i<count;i++){
   Filter_temp filter = (Filter_temp)frList.get(i);
   String filterName = filter.getName();
   Filter_temp filter_p=null;
   boolean isExists = false;
   for(int j=0;j<count_p;j++){
    filter_p = (Filter_temp)frList_p.get(j);
    String filterName_p = filter_p.getName();
    if(filterName_p.equals(filterName)){
     isExists = true;
     compareFilter(filter,filter_p);
    }
   }
   if(!isExists){
    System.out.println("<Filter>:"+filterName+"不存在目标文件中");
    sbWeb.append("<Filter>:").append(filterName).append("不存在目标文件中").append("\r\n");
    newWebNumber++;
   }
  }
  for(int m=0;m<count_p;m++){
   Filter_temp filter_p = (Filter_temp)frList_p.get(m);
   String filter_pName = filter_p.getName();
   Filter_temp filter = null;
   boolean isExists = false;
   for(int n=0;n<count;n++){
    filter = (Filter_temp)frList.get(n);
    String filterName=filter.getName();
    if(filterName.equals(filter_pName)){
     isExists = true;
    }
   }
   if(!isExists){
    System.out.println("<Filter>:"+filter_pName+"不存在源文件中");
    sbWeb.append("<Filter>:").append(filter_pName).append("不存在源文件中").append("\r\n");
    srcWebNumber++;
   }
  }
  
 }
 /**
  * 比较servlet
  * @param newWebXml 目标web.xml配置文件
  */
 public void compareServlet(WebXmlConfigImpl newWebXml){
  Map smap = this.servletMap;
  Map smap_p = newWebXml.servletMap;
  Set srcEntrys = smap.entrySet();
  Set newEntrys = smap_p.entrySet();
  for(Iterator iter = srcEntrys.iterator();iter.hasNext();){
   Entry entry = (Entry)iter.next();
   String servletName =(String)entry.getKey();
   //Servlet servlet_h=(Servlet)entry.getValue();
   Servlet servlet_p = (Servlet)smap_p.get(servletName);
   Servlet servlet = (Servlet)smap.get(servletName);
   if(servlet_p==null){//如果目标文件中不存在该servlet标签则输出
    System.out.println("<Servlet>:"+servletName+"不存在目标文件中");
    sbWeb.append("<Servlet>:").append(servletName).append("不存在目标文件中").append("\r\n");
    newWebNumber++;
   }else{//如果目标文件存在该servlet标签则判断是否相同
    compareServlet(servlet,servlet_p);
   }
  }
  for(Iterator iter = newEntrys.iterator();iter.hasNext();){
   Entry entry = (Entry)iter.next();
   String servletName =(String)entry.getKey();
   //Servlet servlet_h=(Servlet)entry.getValue();
   Servlet servlet_p = (Servlet)smap.get(servletName);
   if(servlet_p==null){//如果目标文件中不存在该servlet标签则输出
    System.out.println("<Servlet>:"+servletName+"不存在源文件中");
    sbWeb.append("<Servlet>:").append(servletName).append("不存在源文件中").append("\r\n");
    srcWebNumber++;
   }
  }
  
 }
 /**
  * 比较taglib
  * @param newWebXml 目标web.xml配置文件
  */
 public void compareTagLib(WebXmlConfigImpl newWebXml){
  Map smap = this.tldMap;
  Map smap_p = newWebXml.tldMap;
  Set srcEntrys = smap.entrySet();
  Set newEntrys =smap_p.entrySet();
  for(Iterator iter = srcEntrys.iterator();iter.hasNext();){
   Entry entry =(Entry)iter.next();
   String tldName = (String)entry.getKey();   
   Tld tld_p = (Tld)smap_p.get(tldName);
   Tld tld = (Tld)smap.get(tldName);
   if(tld_p==null){
    System.out.println("<TagLib>:"+tldName+"不存在目标文件中");
    sbWeb.append("<TagLib>:").append(tldName).append("不存在目标文件中").append("\r\n");
    newWebNumber++;
   }else if(!tld_p.getTlduri().equals(tld.getTlduri())||!tld_p.getTldLocation().equals(tld.getTldLocation())){
    System.out.println("<TagLib>"+tldName+"值不同");
    sbWeb.append("<TagLib>:").append(tldName).append("值不同").append("\r\n");
    differentWebNumber++;
   }
  }
  for(Iterator iter=newEntrys.iterator();iter.hasNext();){
   Entry entry=(Entry)iter.next();
   String tld_pName =(String)entry.getKey();
   Tld tld =(Tld)smap.get(tld_pName);
   if(tld==null){
    System.out.println("<TagLib>:"+tld_pName+"不存在源文件中");
    sbWeb.append("<TagLib>:").append(tld_pName).append("不存在源文件中").append("\r\n");
    srcWebNumber++;
   }
  }
 
 }
 /**
  * 比较mime-mapping
  * @param newWebXml 目标web.xml配置文件
  */
 public void compareMimeMap(WebXmlConfigImpl newWebXml){
  Map smap = this.mimeMap;
  Map smap_p = newWebXml.mimeMap;
  Set srcEntrys = smap.entrySet();
  Set newEntrys = smap_p.entrySet();
  for(Iterator iter = srcEntrys.iterator();iter.hasNext();){
   Entry entry = (Entry)iter.next();
   String mmname = (String)entry.getKey();   
   MimeType mm_p = (MimeType)smap_p.get(mmname);
   MimeType mm = (MimeType)smap.get(mmname);
   if(mm_p==null){
    System.out.println("<Mime-mapping>:"+mmname+"不存在目标文件中");
    sbWeb.append("<Mime-mapping>:").append(mmname).append("不存在目标文件中").append("\r\n");
    newWebNumber++;
   }else if(!mm_p.getExtension().equals(mm.getExtension())||!mm_p.getMimetype().equals(mm.getMimetype())){
    System.out.println("<Mime-mapping>:"+mmname+"值不同");
    sbWeb.append("<Mime-mapping>:").append(mmname).append("值不同").append("\r\n");
    differentWebNumber++;
   }
  }
  for(Iterator iter = newEntrys.iterator();iter.hasNext();){
   Entry entry = (Entry)iter.next();
   String mm_pname = (String)entry.getKey();   
   MimeType mm = (MimeType)smap.get(mm_pname);
   if(mm==null){
    System.out.println("<Mime-mapping>:"+mm_pname+"不存在源文件中");
    sbWeb.append("<Mime-mapping>:").append(mm_pname).append("不存在源文件中").append("\r\n");
    srcWebNumber++;
   }
  }
 
 }
 /**
  * 比较session-config
  * @param newWebXml 目标web.xml配置文件
  */
 public void compareSession(WebXmlConfigImpl newWebXml){
  String srcSession=this.sc.getTimeout();
  String newSession=newWebXml.sc.getTimeout();
  if(!srcSession.equals(newSession)){
   System.out.print("<session-config>值不同");
   sbWeb.append("<session-config>值不同").append("\r\n");
   differentWebNumber++;
  }
  
  
  
 }
 /**
  * 详细比较每个servlet
  * @param servlet 源servlet
  * @param servlet_p 目标servlet
  */
 public void compareServlet(Servlet servlet,Servlet servlet_p){
  List srcList=servlet.getParams();
  List newList=servlet_p.getParams();
  String srcName=servlet.getName();
  String newName=servlet_p.getName();
  String srcClassName=servlet.getClassname();
  String newClassName=servlet_p.getClassname();
  String srcMapping=servlet.getMapping();
  String newMapping=servlet_p.getMapping();
  String srcStartSeq=servlet.getStartSeq();
  String newStartSeq=servlet_p.getStartSeq();
  if(!srcName.equals(newName)){
   System.out.println("<Servlet>:"+servlet.getName()+"的属性<servlet-name>值不同");
   sbWeb.append("<Servlet>:").append(servlet.getName()).append("的属性<servlet-name>值不同").append("\r\n");
   differentWebNumber++;
  }
  if(!srcClassName.equals(newClassName)){
   System.out.println("<Servlet>:"+servlet.getName()+"的属性<servlet-class>值不同");
   sbWeb.append("<Servlet>:").append(servlet.getName()).append("的属性<servlet-class>值不同").append("\r\n");
   differentWebNumber++;
  }
  if(null!=srcStartSeq&&null!=newStartSeq){
   if(!srcStartSeq.equals(newStartSeq)){
    System.out.println("<Servlet>:"+servlet.getName()+"的属性<load-on-startup>值不同");
    sbWeb.append("<Servlet>:").append(servlet.getName()).append("的属性<load-on-startup>值不同").append("\r\n");
    differentWebNumber++;
   }
  }
  if(!srcMapping.equals(newMapping)){
   System.out.println("<Servlet>:"+servlet.getName()+"的属性<url-pattern>值不同");
   sbWeb.append("<Servlet>:").append(servlet.getName()).append("的属性<url-pattern>值不同").append("\r\n");
   differentWebNumber++;
  }
  if(srcList.size()==newList.size()){
   for(int i=0;i<srcList.size();i++){
    Param srcParam=(Param)srcList.get(i);
    String srcParamName=srcParam.getName();
    String srcParamValue=srcParam.getValue();
    Param newParam=(Param)newList.get(i);
    String newParamName=newParam.getName();
    String newParamValue=newParam.getValue();
    if(!srcParamName.equals(newParamName)||!srcParamValue.equals(newParamValue)){
     System.out.println("<Servlet>:"+servlet.getName()+"的属性<init-param>值不同");
     sbWeb.append("<Servlet>:").append(servlet.getName()).append("的属性<init-param>值不同").append("\r\n");
     differentWebNumber++;
    }
   }
 }else{
  System.out.println("<Servlet>:"+servlet.getName()+"的属性<init-param>值不同");
  sbWeb.append("<Servlet>:").append(servlet.getName()).append("的属性<init-param>值不同").append("\r\n");
  differentWebNumber++;
 }
  
 }
 /**
  * 详细比较每个filter
  * @param filter 源filter
  * @param filter_p 目标filter
  */
 public void compareFilter(Filter_temp filter,Filter_temp filter_p){
  List srcParamsList=filter.getParams();
  List newParamsList=filter_p.getParams();
  List srcMappingList=filter.getMapping();
  List newMappingList=filter_p.getMapping();
  List srcMappingClassList=filter.getMappingClass();
  List newMappingClassList=filter_p.getMappingClass();
  String srcFilterName=filter.getName();
  String newFilterName=filter_p.getName();
  String srcFilterClassName=filter.getClassname();
  String newFilterClassName=filter_p.getClassname();
  if(!srcFilterName.equals(newFilterName)){
   System.out.println("<Filter>:"+filter.getName()+"的属性<filter-name>值不同");
   sbWeb.append("<Filter>:").append(filter.getName()).append("的属性<filter-name>值不同").append("\r\n");
   differentWebNumber++;
  }
  if(!srcFilterClassName.equals(newFilterClassName)){
   System.out.println("<Filter>:"+filter.getName()+"的属性<filter-class>值不同");
   sbWeb.append("<Filter>:").append(filter.getName()).append("的属性<filter-class>值不同").append("\r\n");
   differentWebNumber++;
  }
  if(srcParamsList.size()==newParamsList.size()){
   for(int i=0;i<srcParamsList.size();i++){
    Param srcParam=(Param)srcParamsList.get(i);
    String srcParamName=srcParam.getName();
    String srcParamValue=srcParam.getValue();
    Param newParam=(Param)newParamsList.get(i);
    String newParamName=newParam.getName();
    String newParamValue=newParam.getValue();
    if(!srcParamName.equals(newParamName)||!srcParamValue.equals(newParamValue)){
     System.out.println("<Filter>:"+filter.getName()+"的属性<init-param>值不同");
     sbWeb.append("<Filter>:").append(filter.getName()).append("的属性<init-param>值不同").append("\r\n");
     differentWebNumber++;
    }
   }
  }else{
   System.out.println("<Filter>:"+filter.getName()+"的属性<init-param>值不同");
   sbWeb.append("<Filter>:").append(filter.getName()).append("的属性<init-param>值不同").append("\r\n");
   differentWebNumber++;
  }
  
  
  
  if(srcMappingList.size()==newMappingList.size()){
   for(int i=0;i<srcMappingList.size();i++){
    String srcUrl=(String)srcMappingList.get(i);
    String newUrl=(String)newMappingList.get(i);
    if(!srcUrl.equals(newUrl)){
     System.out.println("<Filter>:"+filter.getName()+"的属性<url-pattern>值不同");
     sbWeb.append("<Filter>:").append(filter.getName()).append("的属性<url-pattern>值不同").append("\r\n");
     differentWebNumber++;
    }
   }
  }else{
   System.out.println("<Filter>:"+filter.getName()+"的属性<url-pattern>值不同");
   sbWeb.append("<Filter>:").append(filter.getName()).append("的属性<url-pattern>值不同").append("\r\n");
   differentWebNumber++;
  }
  if(srcMappingClassList.size()==newMappingClassList.size()){
   for(int i=0;i<srcMappingClassList.size();i++){
    String srcServlet=(String)srcMappingClassList.get(i);
    String newServlet=(String)newMappingClassList.get(i);
    if(!srcServlet.equals(newServlet)){
     System.out.println("<Filter>:"+filter.getName()+"的属性<servlet-name>值不同");
     sbWeb.append("<Filter>:").append(filter.getName()).append("的属性<servlet-name>值不同").append("\r\n");
     differentWebNumber++;
    }
   }

  }else{
   System.out.println("<Filter>:"+filter.getName()+"的属性<servlet-name>值不同");
   sbWeb.append("<Filter>:").append(filter.getName()).append("的属性<servlet-name>值不同").append("\r\n");
   differentWebNumber++;
  }  
 }

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值