On Mon, Jan 12, 2009 at 19:58, Nathan Potter <n...@opendap.org> wrote: > > On Jan 12, 2009, at 3:34 PM, Caldarale, Charles R wrote: > >> Don't think so. Does your code happen to call response.setStatus(200) >> somewhere along the way? >> >> - Chuck > > > > > Well at first I didn't think so, but now I am wondering.... > > After adding some more instrumentation I have determined that I am > inadvertently setting the status to 200. > > > I was replicating the problem with this servlet: > > package opendap.experiments; > > import javax.servlet.http.HttpServlet; > import javax.servlet.http.HttpServletResponse; > import javax.servlet.http.HttpServletRequest; > > public class SendErrorTest extends HttpServlet { > > public void doGet(HttpServletRequest request, > HttpServletResponse response) { > try { > System.out.println("Calling HttpServletResponse.sendError(404)"); > response.sendError(HttpServletResponse.SC_NOT_FOUND); > System.out.println("HttpServletResponse.sendError(404) > returned."); > > } > catch (Exception e) { > System.out.println(e.getMessage()); > } > } > } > > > And a simple document service servlet: > > <servlet-mapping> > <servlet-name>docs</servlet-name> > <url-pattern>/docs/*</url-pattern> > </servlet-mapping> > > With this error-page: > > <error-page> > <error-code>404</error-code> > <location>/docs/error404.html</location> > </error-page> > > > I added some instrumentation and looked at the logs and saw that when the > sendError() method is called in the SendErrorTest servlet the call returns > immediately. And is followed by a the docs servlet receiving a request for > the error document, which since it is successfully returning a document sets > the HTTP status to 200. > > Is sendError() using a redirect? > > Is there a way to set the value of the <location> element in the error-page > declaration so that tomcat just grabs the file from the context directory? > > The java servlet spec (2.4) says: > > "If the sendError method is called on the response, the container consults > the > list of error page declarations for the Web application that use the > status-code > syntax and attempts a match. If there is a match, the container returns the > resource > as indicated by the location entry." > > So what does "the container returns the resource as indicated by the > location entry" mean for tomcat? > > > Is there an example of a design pattern you can point me to? > > Thanks, > > Nathan
It sounds like error404.html isn't a plain HTML file, but a page that's generated by a servlet. Is that right? If so, the servlet should not set the status to 200 for an error page - it should leave the error status alone. Maybe you need a different version of the servlet to handle error pages, or maybe your error pages should just be static HTML files. -- Len --------------------------------------------------------------------- To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org For additional commands, e-mail: users-h...@tomcat.apache.org