Java 从doPost HttpServletRequest读取xml时出错
我正在尝试使用httpJava 从doPost HttpServletRequest读取xml时出错,java,xml,servlets,Java,Xml,Servlets,我正在尝试使用httpdoPost方法读取正在发布的XML文件。使用SAXParser进行分析时,会引发异常: Content is not allowed in prolog. doPost代码为: protected void doPost(HttpServletRequest request, HttpServletResponse response) { ServletInputStream httpIn = request.getInputStream();
doPost
方法读取正在发布的XML文件。使用SAXParser进行分析时,会引发异常:
Content is not allowed in prolog.
doPost代码为:
protected void doPost(HttpServletRequest request, HttpServletResponse response)
{
ServletInputStream httpIn = request.getInputStream();
byte[] httpInData = new byte[request.getContentLength()];
StringBuffer readBuffer = new StringBuffer();
int retVal = -1;
while ((retVal = httpIn.read(httpInData)) != -1)
{
for (int i=0; i<retVal; i++)
{
readBuffer.append(Character.toString((char)httpInData[i]));
}
}
System.out.println("XML Received" + readBuffer);
try
{
SAXParser parser = SAXParserFactory.newInstance().newSAXParser();
ByteArrayInputStream inputStream = new ByteArrayInputStream(
readBuffer.toString().getBytes("UTF-8"));
final XmlParser xmlParser = new XmlParser();
parser.parse(inputStream, xmlParser);
}
catch (Exception e)
{
System.out.println("Exception parsing the xml request" + e);
}
}
这是在SAXparser中引发异常:
我做错了什么?我是以错误的方式发送XML还是以错误的方式读取XML?您认为
httpInData[i]
是一个字符,而它是一个字节。你的内容是UTF-8,这会有很大的不同。改用读卡器
然后,对XML进行URL编码,这是无用的,因为它是一个POST数据。不要对其进行编码,只需发送数据即可
替换
urlParameters = URLEncoder.encode(buffer.toString(), "UTF-8");
借
此外,名称urlparmeter选择不当,因为这是一个单独的帖子正文,不在url中,也不是一个真正的参数。
httpInData[i]
是一个字符,而它是一个字节。你的内容是UTF-8,这会有很大的不同。改用读卡器
然后,对XML进行URL编码,这是无用的,因为它是一个POST数据。不要对其进行编码,只需发送数据即可
替换
urlParameters = URLEncoder.encode(buffer.toString(), "UTF-8");
借
此外,url参数名称选择不当,因为这是一个单独的帖子正文,不在url中,也不是真正的参数。您混合了几个基本概念。只有当您以
application/x-www-form-urlencoded
格式发送数据时,才需要URL编码,例如name1=value1&name2=value2&name3=value3
(就像每个HTML
一样)。因此,如果您发送类似于XML=…
的XML,那么您确实应该对值进行URL编码,但不应该使用request.getInputStream()
,而应该使用request.getParameter(“XML”)
直接将其作为字符串获取。还可以看到,您混合了几个基本概念。只有当您以application/x-www-form-urlencoded
格式发送数据时,才需要URL编码,例如name1=value1&name2=value2&name3=value3
(就像每个HTML
一样)。因此,如果您发送类似于XML=…
的XML,那么您确实应该对值进行URL编码,但不应该使用request.getInputStream()
,而应该使用request.getParameter(“XML”)
直接将其作为字符串获取。另见
urlParameters = buffer.toString();