[英]Get POST Content from HttpServletRequest
I want to read out the data from a POST request in a Java Servlet . 我想从Java Servlet中的POST请求中读取数据。 This servlet runs on the Geoserver as service and called with the URL. 该servlet作为服务运行在Geoserver上,并使用URL进行调用。
POST Request (create with python script): POST请求(使用python脚本创建):
POST http://localhost:8080/geoserver/ows?request=upload&service=GeoTransfer&version=1.0.0 HTTP/1.1
Host: localhost:8080
User-Agent: python-requests/2.20.0
Accept-Encoding: gzip, deflate
Accept: application/xml
Connection: keep-alive
Authorization: admin:admin
fileName: transfer.xml
Content-Type: application/xml
Content-Length: 489
<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<transfer>
<enviroment>Test</enviroment>
<product>Testproduct</product>
<user>admin</user>
</transfer>
Java servlet: Java Servlet:
public void upload(HttpServletRequest request, httpServletResponse response)
throws ServletException, IOException {
System.out.println("===== Begin headers =====");
Enumeration<String> names = request.getHeaderNames();
while (names.hasMoreElements()) {
String headerName = names.nextElement();
System.out.println(headerName + " = " + request.getHeader(headerName));
}
System.out.println("===== End headers =====\n");
System.out.println("===== Begin Body =====");
if ("POST".equalsIgnoreCase(request.getMethod())) {
try {
Scanner s = new Scanner(request.getInputStream(), "UTF-8").useDelimiter("\\A");
System.out.println(s.hasNext() ? s.next() : "");
} catch (IOException e) {
e.printStackTrace();
}
}
System.out.println("===== End Body =====\n");
}
Output: 输出:
===== Begin headers =====
Authorization = admin:admin
fileName = transfer.xml
Accept = application/xml
User-Agent = python-requests/2.20.0
Connection = keep-alive
Host = localhost:8080
Accept-Encoding = gzip, deflate
Content-Length = 489
Content-Type = application/xml
===== End headers =====
===== Begin Body =====
===== End Body =====
Problem: 问题:
Why i cant read out the xml data body? 为什么我无法读出xml数据正文? Is something wrong with the request and the data dont pass to Java? 请求有问题,数据没有传递给Java吗?
EDIT1: EDIT1:
Try other Methods with Inputstream, but the body is always a empty line. 使用Inputstream尝试其他方法,但主体始终为空行。 Could be the Problem that the Server ignore the Body and use only the header if he create the request object ? 如果服务器创建请求对象,服务器会忽略主体而仅使用标头,可能是这样的问题吗?
Edit2: EDIT2:
Try Majid Khakwani answer and get empty string. 尝试Majid Khakwani答案并获取空字符串。 I print out request.getContentLength()
and it is 489
. 我打印出request.getContentLength()
,它是489
。 Did the method get this number out of the header or the real length of the content from object request? 该方法是否从对象请求的标题或内容的实际长度中获取了此数字?
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String xml = null;
try {
byte[] xmlData = new byte[request.getContentLength()];
//Start reading XML Request as a Stream of Bytes
InputStream sis = request.getInputStream();
BufferedInputStream bis = new BufferedInputStream(sis);
bis.read(xmlData, 0, xmlData.length);
if (request.getCharacterEncoding() != null) {
xml = new String(xmlData, request.getCharacterEncoding());
} else {
xml = new String(xmlData);
}
//xml and xmlData contains incomplete data
} catch (IOException ioe) {
...
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.