최근에 Jetty 9.1.0을 사용하여 응용 프로그램을 개발하기 시작했습니다. Tomcat 7을 사용하여 동일한 응용 프로그램을 실행합니다. POST 요청은 우리가 사용하는 요청 본문 읽기 발생할 때마다 : 톰캣에서Jetty 요청 본문 읽기가 IndexOutOfBoundsException이됩니다.
private static String readRequestData(HttpServletRequest request) throws IOException
{
BufferedReader r = request.getReader();
if (request.getContentLength() > 0)
{
int len = request.getContentLength();
char[] buf = new char[len];
int read = 0;
int readTo = 0;
while (read > -1)
{
read = r.read(buf, readTo, 1000);
readTo += read;
}
return new String(buf);
}
return "";
}
을의 BufferedReader 객체는 org.apache.catalina.connector.CoyoteReader과 데이터가 올바르게 읽혀진다. Jetty 아래의 독자는 org.eclipse.jetty.server.Request이며, 두 번째로 루프를 통해 java.lang.IndexOutOfBoundsException이 발생합니다. 두 번째 시간을 읽으려고하면 예외가 throw됩니다. 루프를 통해 두 번째로 읽을 수는 없지만 혼란 스럽습니다.
우리가 잘못하고있는 것에 대한 지침을 제공하는 사람은 누구입니까?
감사합니다. 위의 코드에서
보다해야한다는 확인할 수 있습니다 두번째 반복에서 발생합니다. 이 코드는 Tomcat에서 작동하므로 BufferedReader 구현의 차이점이 있음을 기억하십시오. http://docs.oracle.com/javase/7/docs/api/java/io/BufferedReader.html#read (char [], int, int) –
@ToddChapman 예 편집했습니다. – Kick
당신이 제안한 것은 효과가있었습니다. CoyoteReader가 buf가 끝날 때 멈추지 만 Jetty 구현에서는 멈추지 않는 것이 궁금합니다. –