У меня действительно странная проблема, и я не могу найти решение.
У меня есть простой тестовый сервлет, который передает в ответ небольшой файл PDF:
public class TestPdf extends HttpServlet implements Servlet {
private static final long serialVersionUID = 1L;
public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {
File file = new File(getServletContext().getRealPath("/lorem.pdf"));
response.setContentType("application/pdf");
ServletOutputStream out = response.getOutputStream();
InputStream in = new FileInputStream(file);
byte[] bytes = new byte[10000];
int count = -1;
while ((count = in.read(bytes)) != -1) {
out.write(bytes, 0, count);
}
in.close();
out.flush();
out.close();
}
}
Если я вызываю URL-адрес сервлета с помощью браузера, curl, wget, все в порядке, но когда я вызываю его с помощью простого сценария TCL, например:
#!/usr/bin/tclsh8.5
package require http;
set testUrl "http://localhost:8080/test/pdf"
set httpResponse [http::geturl "$testUrl" -channel stdout]
в начале файла есть строка «2000», которая искажает pdf.
Проблема не связана с версией Tomcat или JDK, поскольку я могу воспроизвести ее в своей среде разработки (Ubuntu 16.04) как с JDK 1.5.0_22 Tomcat 5.5.36, так и с JDK 1.8.0_74 и Tomcat 8.5.15.