Я пытался
@WebServlet("/imgTest")
public class ImgTestServlet extends HttpServlet {
@Override
public void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
serveRequest(req,resp);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
serveRequest(req, resp);
}
private void serveRequest(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
req.getRequestDispatcher("/imgs/banner.png").include(req,resp);
}
}
И это похоже на работу.
Однако, если я изменю метод serveRequest
на, скажем,
private void serveRequest(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
resp.getWriter().println("Here, have an image:");
req.getRequestDispatcher("/imgs/banner.png").include(req,resp);
}
Я получаю
java.lang.IllegalStateException: getWriter() has already been called for this response
org.apache.catalina.connector.Response.getOutputStream(Response.java:604)
org.apache.catalina.connector.ResponseFacade.getOutputStream(ResponseFacade.java:197)
javax.servlet.ServletResponseWrapper.getOutputStream(ServletResponseWrapper.java:96)
org.apache.catalina.servlets.DefaultServlet.serveResource(DefaultServlet.java:877)
org.apache.catalina.servlets.DefaultServlet.doGet(DefaultServlet.java:411)
javax.servlet.http.HttpServlet.service(HttpServlet.java:621)
javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
[...].webapp.servlets.ImgTestServlet.serveRequest(ImgTestServlet.java:24)
[...].webapp.servlets.ImgTestServlet.doGet(ImgTestServlet.java:14)
javax.servlet.http.HttpServlet.service(HttpServlet.java:621)
javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51)
Я не совсем уверен, почему это не удается. Я полагаю, что диспетчер запросов пытается отобразить клиенту изображение only , что не соответствует тому факту, что оно фактически встроено в более крупный ответ.
Так что - это , есть ли способ заставить это работать, или у меня есть , чтобы написать это как
private void serveRequest(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
resp.setContentType("text/html");
resp.getWriter().println("Here, have an image:<br>");
resp.getWriter().println("<img src='/webapp/imgs/banner.png'><br>");
}