你好,欢迎来到电脑编程技巧与维护杂志社! 杂志社简介广告服务读者反馈编程社区  
合订本订阅
 
 
您的位置:技术专栏 / Java专栏
Java学习笔记(2)----Web项目中解析XML文件
 
       据说Java中解析xml文件有3种方式,可惜本人一种也不会。在网上查询了大量的资料,但大多数都是在Java Project下进行的,本人也解析成功了。但是用eclipse或MyEclipse创建的Java Web工程与Java Project工程有那么一些区别。其中一点就是Java Project工程下没有WebRoot根目录,而Java Web工程下有WebRoot根目录,Java编译后的class文件被默认放在WEB-INF/classes下,这就让我不知道在普通类中咋获得服务器根路径,要知道服务器下是没有“WebRoot”这一路径的,为这个我郁闷了好久。不过在松哥的指点下,还是解决了这个问题,在此表示感谢。

       好了,言归正传,先看一个xml文件mailConfig.xml:

[html]
<?xml version="1.0"encoding="UTF-8"?> 
<content> 
    <mail> 
       <mailServerHost>smtp.163.com</mailServerHost> 
       <mailServerPort>25</mailServerPort> 
       <validate>true</validate> 
       <userName>lindf123of@163.com</userName> 
       <password>*********</password> 
       <fromAddress>lindf123of@163.com</fromAddress> 
    </mail> 
</content> 


     所在的路径如下所示:

 

      开始解析xml文件,新建一个Java类XMLUtil.java,代码如下所示:
 
[java] 
package com.ldfsoft.util; 
 
import java.io.File; 
import java.io.IOException; 
 
import javax.xml.parsers.DocumentBuilder; 
import javax.xml.parsers.DocumentBuilderFactory; 
import javax.xml.parsers.ParserConfigurationException; 
 
import org.w3c.dom.Document; 
import org.w3c.dom.Element; 
import org.w3c.dom.NodeList; 
import org.xml.sax.SAXException; 
import com.ldfsoft.dto.MailSenderDto; 
 
public class XMLUtil { 
    private MailSenderDto mailSenderInfoDto; 
    public  MailSenderDto getMailMess(String nodeName,String fileName){ 
        DocumentBuilderFactory documentBuilderFactory=DocumentBuilderFactory.newInstance(); 
        String path = this.getClass().getClassLoader().getResource("xml").getPath();  //获得存放mailConfig.xml文件的xml目录 
        mailSenderInfoDto=new MailSenderDto(); 
        try { 
            DocumentBuilder documentBuilder=documentBuilderFactory.newDocumentBuilder(); 
            Document document=documentBuilder.parse(path+File.separator+fileName); 
            NodeList nodeList=document.getElementsByTagName(nodeName); 
            if(nodeList.getLength()>0){ 
                Element element=(Element) nodeList.item(0); 
                mailSenderInfoDto.setMailServerHost(element.getElementsByTagName("mailServerHost").item(0).getFirstChild().getNodeValue()); 
                mailSenderInfoDto.setMailServerPort(element.getElementsByTagName("mailServerPort").item(0).getFirstChild().getNodeValue()); 
                mailSenderInfoDto.setValidate(Boolean.valueOf(element.getElementsByTagName("validate").item(0).getFirstChild().getNodeValue()));    //注意String类型转boolean类型的方法 
 
                mailSenderInfoDto.setUserName((element.getElementsByTagName("userName").item(0).getFirstChild().getNodeValue())); 
                mailSenderInfoDto.setPassword(element.getElementsByTagName("password").item(0).getFirstChild().getNodeValue()); 
                mailSenderInfoDto.setFromAddress(element.getElementsByTagName("fromAddress").item(0).getFirstChild().getNodeValue());    
            }    
        } catch (ParserConfigurationException e) { 
            // TODO Auto-generated catch block 
            e.printStackTrace(); 
        } catch (SAXException e) { 
            // TODO Auto-generated catch block 
            e.printStackTrace(); 
        } catch (IOException e) { 
            // TODO Auto-generated catch block 
            e.printStackTrace(); 
        } 
        return mailSenderInfoDto; 
    } 
 

        MailSenderDto为上一篇文章( Java学习笔记(1)----Java中发送邮件)的dto,在本文中省略。这个类中的getMailMess(StringnodeName,String fileName)有两个参数,其中nodeName为节点名,fileName为这个xml文件的文件名,将获取的数据封装到MailSenderDto的一个实例中并返回。
 
          我们接着在JavaUtil.java类中用如下形式代替上篇文章这个类的此方法,部分代码如下所示:
 
   
[java] 
/**
     * 发送激活账户邮件
     */ 
    
    public void sendEmail(String email) { 
       mailSenderDto=xmlUtil.getMailMess("mail", "mailConfig.xml"); 
       try{ 
             String mailTitle="【我的网盘】账号激活邮件"; 
             StringmailContent="<br><br>亲爱的【我的网盘】用户:<br><br>"+ 
                            "    您好!感谢您注册【我的网盘】帐号,点击下面的链接即可完成注册:<br><br>"+ 
                            "    <ahref=\"http://localhost:9080/mydisk/swf/activateEmail.html#email="+email+"\">http://localhost:9080/mydisk/swf/activateEmail.html#email="+email+"</a><br><br>"+ 
                            "    (如果链接无法点击,请将它复制并粘贴到浏览器的地址栏中访问)<br><br>"+ 
                            "    您的Email:"+email+"<br><br>"+ 
                            "    Email可以作为您的帐号来登录【我的网盘】。<br><br>"+ 
                            "    本邮件是系统自动发送的,请勿直接回复!感谢您的访问,祝您使用愉快!<br><br>"; 
           
             mailSenderDto.setToAddress(email);      //收件人邮箱地址 
             mailSenderDto.setSubject(mailTitle);    //邮件标题 
             mailSenderDto.setContent(mailContent);  //邮件内容 
             //这个类主要用来发送邮件   
             MailSender ms = new MailSender();   
             ms.sendHtmlMail(mailSenderDto);//发送html格式   
             System.out.println("---------------发送成功!"); 
       }catch(Exception e){ 
           System.out.println("失败了!"); 
       } 
    }   

    经过测试,是一样的效果。只是这样大大减少了发送mail属性与代码的耦合性,方便管理。

  推荐精品文章

·2024年12月目录 
·2024年11月目录 
·2024年10月目录 
·2024年9月目录 
·2024年8月目录 
·2024年7月目录 
·2024年6月目录 
·2024年5月目录 
·2024年4月目录 
·2024年3月目录 
·2024年2月目录 
·2024年1月目录
·2023年12月目录
·2023年11月目录

  联系方式
TEL:010-82561037
Fax: 010-82561614
QQ: 100164630
Mail:gaojian@comprg.com.cn

  友情链接
 
Copyright 2001-2010, www.comprg.com.cn, All Rights Reserved
京ICP备14022230号-1,电话/传真:010-82561037 82561614 ,Mail:gaojian@comprg.com.cn
地址:北京市海淀区远大路20号宝蓝大厦E座704,邮编:100089