Re: [J2SE] 利用http協定傳送XML內容而不另存成檔案
※ 引述《neverfly (neverfly)》之銘言:
: 我想做的是利用DOM產生一份XML文件,
: 然後用HTTP協定傳送到自己寫的java servlet。
: 原本的做法是先將XML文件存成一個檔案,
: 然後再用post的方式將檔案傳送到java servlet。
: 但現在的問題是,
: 在實際運作的環境中,我並沒有寫入檔案的權限,
: 也就是說一切只能在記憶體中完成。
: 假設產生XML文件的部份是這樣寫:
: DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
: DocumentBuilder db = dbf.newDocumentBuilder();
: Document doc = db.newDocument();
: Element book = doc.createElement("book");
: doc.appendChild(book);
: doc是完整的XML結構,我原本是用這樣的方式將XML存在sample.xml中:
: TransformerFactory tfactory = TransformerFactory.newInstance();
: Transformer transformer = tfactory.newTransformer();
: DOMSource source = new DOMSource(doc);
: StreamResult result = new StreamResult(new File("sample.xml"));
: transformer.transform(source,result);
不是很確定你用的builder的結構 , 所以不曉得他有沒有直接取得內文的函示,
不過根據我對 java.io 抽象介面的瞭解跟參閱API後得到的消息,
StreamResult 可以接 File跟 OutputStream
所以理論上你可以送一個 ByteArrayOutputStream 給他 ,
再透過他取得他寫完之後的結果.
for example
+ ByteArrayOutputStream byteOutput = new ByteArrayOutputStream();
* StreamResult result = new StreamResult(byteOutput);
: transformer.transform(source,result);
//ps 如果需要指定編碼 則用toString(String encoding)
+ String body=byteOutput.toString();
: 然後再這樣傳送到url,也就是我寫的servlet上:
這邊就不需要對檔案操作了.
- File f = new File("sample.xml");
: URL url1 = new URL(url);
: conn = (HttpURLConnection)url1.openConnection();
: conn.setRequestMethod("POST");
: conn.setRequestProperty("Content-Type",
: "application/x-www-form-urlencoded");
: conn.setRequestProperty("Connection", "Keep-Alive");
: conn.setUseCaches(false);
: conn.setDoOutput(true);
: osw = new OutputStreamWriter(conn.getOutputStream());
- fr = new FileReader(f);
- br = new BufferedReader(fr);
- while((str = br.readLine()) != null) {
- osw.write(str);
- osw.write(c);
- }
osw.write(body);
: osw.flush() ;
: osw.close() ;
: 請問一下,應該怎麼修改我的程式,
: 才能夠直接把doc,利用HTTP協定傳送出去呢?謝謝。
當然很重要的前提是 , 記憶體要夠大 , 你可以測測看 ,
抽象介面的好處就是你可以很簡單的替換其中一個成員 ,
來達到不同目的, 不然偶爾也是會有因為結構面的妥協 ,
所以破壞抽象介面的狀況 ,不過io應該是還好 . :p
--
What do you want to have ? / What do you have?
從書本中,你可以發現我的各種興趣。
從CD中,你可以瞭解我所喜歡的偶像明星。
或許從文字你很難以瞭解一個人,但從物品可以。
My PPolis , My past. http://ppolis.tw/user/Tony
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 220.128.219.202
※ 編輯: TonyQ 來自: 220.128.219.202 (09/04 11:20)
推
09/04 23:40, , 1F
09/04 23:40, 1F
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 3 篇):