作者TonyQ (沉默是金)
看板java
标题Re: [J2SE] 利用http协定传送XML内容而不另存成档案
时间Thu Sep 4 11:18:05 2008
※ 引述《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)
1F:推 neverfly:大感谢,我再试试看 09/04 23:40