據說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:
<?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,代碼如下所示:
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 blocke.printStackTrace();} catch (SAXException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}return mailSenderInfoDto;}}
MailSenderDto為上一篇文章( Java學習筆記(1)----Java中發送郵件)的dto,在本文中省略。這個類中的getMailMess(StringnodeName,String fileName)有兩個參數,其中nodeName為節點名,fileName為這個xml檔案的檔案名稱,將擷取的資料封裝到MailSenderDto的一個執行個體中並返回。
我們接著在JavaUtil.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屬性與代碼的耦合性,方便管理。其實更主要的是讓我學到了怎麼解析xml檔案。
這是本人學習的結果,允許轉載,歡迎交流,但轉載務必給出本文章的連結地址:http://blog.csdn.net/youqishini/article/details/7906571,謝謝~