Я использую Jetty 9.4.21.v20190926 - в качестве отдельного сервера за HAProxy, а также я компилирую / запускаю свой собственный WAR-сервлет с ним:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE Configure PUBLIC "-//Jetty//Configure//EN"
"http://www.eclipse.org/jetty/configure_9_0.dtd">
<Configure class="org.eclipse.jetty.webapp.WebAppContext">
<Set name="contextPath">/mypath</Set>
<Set name="war">
<SystemProperty name="jetty.base"/>/my-servlet-0.1-SNAPSHOT.war
</Set>
</Configure>
Он обслуживает Websockets, GET, POST-запросы иработает очень хорошо за последние 2 года.
Теперь я хотел бы дополнительно сгенерировать файл PNG, используя ImageIO, и хотя приведенный ниже код работает для меня, у меня есть 2 вопроса, пожалуйста -
@Override
protected void doGet(HttpServletRequest httpReq, HttpServletResponse httpResp) throws ServletException, IOException {
if ("board1".equals(httpReq.getServletPath()) {
BufferedImage image = ImageIO.read(org.eclipse.jetty.util.Loader.getResource("game_board_1.png"));
// here some more images are loaded + text and drawing happens
httpResp.setStatus(HttpServletResponse.SC_OK);
httpResp.setContentType("image/png");
httpResp.setContentLength(12345); // question 1: should I call this or will Jetty add it automatically?
ImageIO.write(image, "png", httpResp.getOutputStream());
httpResp.getOutputStream().close(); // question 2: should I close the output stream here or not?
}
}
Вопрос 1: Должен ли я явно указать Content-Length или Jetty добавит его автоматически для меня? И если мне придется установить его самому, как справиться с измененным размером из-за на лету gzip-сжатие?
Вопрос 2: Должен ли я позвонить httpResp.getOutputStream().close()
в конце doGet () или, возможно, выходной поток все еще необходим для обслуживания других запросов из-за Keep-Alive?