Quoting Anthony Presley <[EMAIL PROTECTED]>: > Thank you Dirk ..... where do you live? I owe you a Pizza. > > This did, in fact, solve almost all of my problems. Subtle [to me]. > > However, I have a remaining issue, and I've narrowed it down to the > following lines of code. I'll post in the tomcat user group, but > thought someone here might have a pearl of wisdom. > > Nine times out of ten, multiple requests work perfectly. However, in > the one time out of ten that it doesn't, my code is throwing an > Exception with this: > > try { > if (rd != null) > rd.forward(req, res); > else { > log("RD is NULL, MAJOR ERROR"); > } > } catch (ServletException e) { > log("5ERROR ServletException: " + e.getMessage()); > e.printStackTrace(); > } catch (java.io.IOException e) { > log("5ERROR java.io.IOException: " + e.getMessage()); > e.printStackTrace(); > } catch (Exception e) { > log("5ERROR Exception: " + e.getMessage()); > e.printStackTrace(); > } > > Doing a reload on it, it works fine. IE, what is being sent (the URL) > does start with a "/", and rd is NOT null (neither are req or res). > > The Error is: > 5ERROR Exception: Cannot forward after response has been commit >
It means you tried to call RequestDispatcher.forward() after the current response has been committed :-). To understand what's really happening, you need to be a little bit familiar with how servlets work. When you start writing to a response page, the output you write is buffered, up to the point where the buffer size has been exceeded. Prior to that point, you can call forward() -- which, among other things, erases any buffered output so that the new resource or page can write the entre content of the response. However, if you've already written more characters than the size of the output buffer, the HTTP headers (and the first part of the response) are actually sent to the client. After that point, the response is considered to be "committed" and you can no longer do a RequestDispatcher.forward() call. So, how big is the page buffer? Ah, there's the rub ... it's not specified, so it varies by container. However, you can control it by calling response.setBufferSize() if you are writing directly from a servlet, or using the "buffer" attribute on the <%@ page %> directive if you're using JSP. You need to ensure that you haven't already written more characters than the buffer size before you execute the forward() call. Note that this kind of problem would never occur if you were using an MVC-based framework like Struts <http://jakarta.apache.org/struts>, because the business logic that processed the incoming form submit would never output anything to the response -- it would merely perform the required processing, then forward() to a servlet or JSP page to create the actual output. Craig McClanahan --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]