java web中关于修改xml后读取值的问题

10-11-21 tianhandigeng
java web项目中我用xml文件来存储菜单,菜单如下:

<?xml version="1.0" encoding="gbk"?> 
<menus> 
   <frontmenus> 
      <menu id="1">
            <name>首页</name> 
            <href>index.jsp</href> 
            <display>1</display> 
     </menu> 
  </frontmenus> 
</menus>
<p>

修改xml中的display值使其可以动态显示

读取xml的类如下:

   1. public class Front {  
   2.     public Map<String, String> readXML() {  
   3.         Map<String, String> menus = new LinkedHashMap<String, String>();  
   4.         SAXBuilder builder = new SAXBuilder();  
   5.         InputStream in=null;  
   6.         try {  
   7. //第一种方式 Resource resource=new ClassPathResource("menus.xml");  
   8. //          in=resource.getInputStream();  
   9. //          Document doc=builder.build(in);  
  10.               
  11. //第二种方式 Document doc = builder.build(Front.class.getClassLoader()  
  12. //                  .getResourceAsStream("menus.xml"));  
  13.               
  14.             File file=new File("E:\\my\\menus.xml");  
  15.             in=new FileInputStream(file);  
  16.             Document doc=builder.build(in);  
  17.               
  18.             Element element = doc.getRootElement();  
  19.             List l = element.getChildren("frontmenus");  
  20.             for (int i = 0; i < l.size(); i++) {  
  21.                 Element e1 = (Element) l.get(i);  
  22.                 List menuList = e1.getChildren("menu");  
  23.                 for (int j = 0; j < menuList.size(); j++) {  
  24.                     Element e2 = (Element) menuList.get(j);  
  25.                     String name = e2.getChildText("name");  
  26.                     String href = e2.getChildText("href");  
  27.                     String display = e2.getChildText("display");  
  28.                     if ("1".equals(display)) {  
  29.                         menus.put(href, name);  
  30.                     }  
  31.                 }  
  32.             }  
  33.         } catch (Exception e) {  
  34.             System.err.println("Error create XML parser");  
  35.         }  
  36.         return menus;  
  37.     }  
  38. }  
<p>

因为我刚开始做的时候是把xml文件发在类路径下,所以我选择了第一种方式或第二种方式读取

这是测试代码:

1. Front front=new Front();
2. Map<String,String> frontMenus=front.readXML(); 
3. 
4. Iterator it=frontMenus.entrySet().iterator(); 
5. while(it.hasNext())
  { 
6.   System.out.println(it.next()); 
7. }


<p>

但是使用第一种方式和第二种方式读取的时候,当xml文件中的内容改变了以后,再去读取如果不重新启动的话,读取的值还是以前读取的,也就是说没改变,但是用debug测试的时候,显示修改后再去读取是重新执行了读取方法的,无赖之下,用第三种方式测试了一下,这次没把xml放到类路径下,而是直接放到了项目文件夹下,使用了绝对路径的方式,这次却可行,修改后可以读出修改后的值,为什么会出现这种情况,百思不得期解,无赖之下请教各位大侠

猜你喜欢