所以我试图运行一个Web应用程序,它从HTML表单获取用户输入,并使用Java Servlets将其附加到服务器上的XML文档。
以下是我获取XML文件并进行修改的方法。
@Override
public void doGet(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException
{
try {
String urlpath = "http://192.168.11.9:8080/Chat-sort-of/Messages.xml";
DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder docBuilder = docFactory.newDocumentBuilder();
URL url = new URL(urlpath);
HttpURLConnection urlc = (HttpURLConnection) url.openConnection();
urlc.setDoInput(true);
urlc.setDoOutput(true);
urlc.setUseCaches(false);
urlc.setRequestMethod("GET");
urlc.setRequestProperty("Content-Type", "application / xml");
Document doc = docBuilder.parse(urlc.getInputStream());
Node m = doc.getElementsByTagName("messages").item(0);
Element messageNode = doc.createElement("message");
testMessage = request.getParameter("message-box");
if(testMessage == null) {response.sendRedirect("http://192.168.11.9:8080/Chat-sort-of/index.html");}
messageNode.appendChild(doc.createTextNode(testMessage));
m.appendChild(messageNode);
以下是我写入XML文件的方式:
if(urlc.getResponseCode() == 200) {
urlc = (HttpURLConnection) url.openConnection();
urlc.setDoOutput(true);
urlc.setUseCaches(false);
urlc.setRequestMethod("POST");
urlc.setRequestProperty("Content-Type", "application / xml");
TransformerFactory transformerFactory = TransformerFactory.newInstance();
transformerFactory.setAttribute("indent-number", 2);
Transformer transformer = transformerFactory.newTransformer();
DOMSource source = new DOMSource(doc);
StreamResult result = new StreamResult(urlc.getOutputStream());
transformer.setOutputProperty(OutputKeys.INDENT, "yes");
transformer.setOutputProperty(OutputKeys.DOCTYPE_SYSTEM,"");
transformer.setOutputProperty(OutputKeys.METHOD, "xml");
transformer.transform(source, result);
}
}catch (ParserConfigurationException pce) {
pce.printStackTrace();
} catch (TransformerException tfe) {
tfe.printStackTrace();
} catch (IOException ioe) {
ioe.printStackTrace();
} catch (SAXException sae) {
sae.printStackTrace();
}
response.sendRedirect("http://192.168.11.9:8080/Chat-sort-of/index.html");
}
编译期间没有错误。
如果我在transformer.transform函数中用System.out替换变量“result”,程序会正确打印XML文件并进行修改,这意味着源不为空。
我知道这不是最好的方法,但我现在不会采取任何其他方式。
有什么想法吗?