Don't use response.reset() in your example.
In your example error conditions ...
if (requestedImage == null) {
sendErrorAndDefaultPNG(response);
}
Just return from the doGet() and not worry about the reset.
if (requestedImage == null) {
sendErrorAndDefaultPNG(response);
return;
}
--
Joakim Erdfelt <[email protected]>
webtide.com <http://www.webtide.com/> - intalio.com/jetty
Expert advice, services and support from from the Jetty & CometD experts
eclipse.org/jetty - cometd.org
On Wed, Jan 28, 2015 at 3:48 PM, Steve Sobol - Lobos Studios <
[email protected]> wrote:
> There has to be a simple answer to this... I have a servlet that serves a
> PNG file if it exists, and if it doesn't, throws an HTTP 404 error and
> serves a default image. In the second case, I get the default image but I
> see this in the logs. I checked and couldn't find an obvious way to set the
> HTTP status code without committing the response...
>
> 2015-01-28
> 14:35:06.318:WARN:oejs.ServletHandler:/featured-event-image/event1-1.png
> java.lang.IllegalStateException: Committed
> at org.eclipse.jetty.server.Response.resetBuffer(Response.java:1090)
> at org.eclipse.jetty.server.Response.reset(Response.java:1034)
> at
> com.mymitzvahdate.servlet.FeaturedEventImage.doGet(FeaturedEventImage.java:53)
>
> This is the servlet:
>
> package com.mymitzvahdate.servlet;
>
> import java.io.File;
> import java.io.IOException;
> import java.net.URLDecoder;
> import java.nio.file.Files;
>
> import javax.servlet.ServletException;
> import javax.servlet.http.HttpServlet;
> import javax.servlet.http.HttpServletRequest;
> import javax.servlet.http.HttpServletResponse;
>
> import com.mymitzvahdate.Constants;
> import com.mymitzvahdate.persistence.Globals;
>
>
> public class FeaturedEventImage extends HttpServlet {
>
> public static final long serialVersionUID = 1L;
>
> // Properties
> ---------------------------------------------------------------------------------
>
> private String imagePath, defaultImagePath;
>
> // Actions
> ------------------------------------------------------------------------------------
>
> protected void doGet(HttpServletRequest request, HttpServletResponse
> response) throws ServletException, IOException {
>
> imagePath = Globals.get(Constants.GLOBAL_FEATURED_IMAGE_DIR);
> defaultImagePath =
> Globals.get(Constants.GLOBAL_DEFAULT_FEATURED_IMAGE);
>
> // Get requested image by path info.
> String requestedImage = request.getPathInfo();
>
> // Check if file name is actually supplied to the request URI.
> if (requestedImage == null) {
> sendErrorAndDefaultPNG(response);
> }
>
> // Decode the file name
> String imageFilename = URLDecoder.decode(requestedImage, "UTF-8");
>
> // chop off the extension if one exists
> if (imageFilename.lastIndexOf(".")> -1) imageFilename =
> imageFilename.substring(0,imageFilename.lastIndexOf("."));
>
> File image = new File(imagePath, imageFilename + ".jpg");
>
> // Check if file actually exists in filesystem.
> if (!image.exists()) {
> sendErrorAndDefaultPNG(response);
> }
>
> response.reset();
> sendImage(response, image);
>
> }
>
> private void sendImage(HttpServletResponse response, File image) {
> response.setContentType("image/png");
> response.setHeader("Content-Length",
> String.valueOf(image.length()));
> try {
> Files.copy(image.toPath(), response.getOutputStream());
> } catch(IOException exc) {
> }
> }
>
>
> private void sendErrorAndDefaultPNG(HttpServletResponse response) {
> response.reset();
> response.setStatus(HttpServletResponse.SC_NOT_FOUND); // 404.
> File errorImage = new File(imagePath, defaultImagePath);
> sendImage(response, errorImage);
>
> return;
> }
>
>
> }
>
>
> Thanks for whatever help you can offer
>
>
>
> --
> Lobos Studios - Website and Mobile App Design & Development; IT Support;
> Computer Maintenance
> Toll Free 877.919.4WEB - Apple Valley 760.684.8859 - Los Angeles
> 310.945.2410
> www.LobosStudios.com * www.facebook.com/LobosStudios * @LobosStudios
>
>
> _______________________________________________
> jetty-users mailing list
> [email protected]
> To change your delivery options, retrieve your password, or unsubscribe
> from this list, visit
> https://dev.eclipse.org/mailman/listinfo/jetty-users
>
_______________________________________________
jetty-users mailing list
[email protected]
To change your delivery options, retrieve your password, or unsubscribe from
this list, visit
https://dev.eclipse.org/mailman/listinfo/jetty-users