You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@tomcat.apache.org by Anthony Brew <at...@gmail.com> on 2010/07/26 06:26:39 UTC
Re: CGIServlet followed by a Filter that modifies the response
> I had hoped to use a CGIServlet to do some stuff for me and then modify the
> response on the fly on the way back with a
>
> like this:
>
> <filter>
> <filter-name>mod</filter-name>
> <filter-class>com.util.web.PageFilter</filter-class>
> </filter>
>
> <filter-mapping>
> <filter-name>mod</filter-name>
> <servlet-name>cgi</servlet-name>
> </filter-mapping>
> <servlet>
> <servlet-name>cgi</servlet-name>
>
> <servlet-class>org.apache.catalina.servlets.CGIServlet</servlet-class>
> <init-param>
> <param-name>debug</param-name>
> <param-value>0</param-value>
> </init-param>
> <init-param>
> <param-name>cgiPathPrefix</param-name>
> <param-value>WEB-INF/cgi</param-value>
> </init-param>
> <load-on-startup>5</load-on-startup>
> </servlet>
>
> <servlet-mapping>
> <servlet-name>cgi</servlet-name>
> <url-pattern>/cgi-bin/*</url-pattern>
> </servlet-mapping>
>
>
> Unfortunately I am coming across the following:
>
> java.lang.IllegalStateException: getWriter() has already been called for this response
> org.apache.catalina.connector.Response.getOutputStream(Response.java:579)
> org.apache.catalina.connector.ResponseFacade.getOutputStream(ResponseFacade.java:183)
> javax.servlet.ServletResponseWrapper.getOutputStream(ServletResponseWrapper.java:102)
> org.apache.catalina.servlets.CGIServlet$CGIRunner.run(CGIServlet.java:1754)
> org.apache.catalina.servlets.CGIServlet.doGet(CGIServlet.java:587)
> javax.servlet.http.HttpServlet.service(HttpServlet.java:690)
> javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
> com.util.web.PageFilter.doFilter(PriceHideFilter.java:31)
>
>
> the page filter method look like
>
> public void doFilter(ServletRequest request, ServletResponse response,
> FilterChain chain) throws ServletException, IOException {
> System.out.println("Entering the price hide filter");
> PrintWriter out = response.getWriter();
> CharResponseWrapper wrapper = new CharResponseWrapper(
> (HttpServletResponse)response);
>
> chain.doFilter(request, wrapper);
> if(wrapper.getContentType().equals("text/html")) {
> CharArrayWriter caw = new CharArrayWriter();
>
> caw.write(
> filterText(wrapper.toString()));
> response.setContentLength(caw.toString().length());
> out.write(caw.toString());
> } else
> out.write(wrapper.toString());
> out.close();
> }
>
> where CharResponseWrapper is just a grab of
> http://java.sun.com/j2ee/tutorial/1_3-fcs/examples/src/web/bookstore1/filters/CharResponseWrapper.java
>
> Any help would be very greatly appreciated, I am losing my hair.
>
> *Oh yes and my tomcat specs are *
> *Server version: Apache Tomcat/6.0.16*
> *Server built: Jan 28 2008 11:35:29*
> *Server number: 6.0.16.0*
> *OS Name: Linux*
> *OS Version: 2.6.24-27-generic*
> *Architecture: amd64*
> *JVM Version: 1.6.0_20-b02*
> *JVM Vendor: Sun Microsystems Inc.*
>
>
> All the Best,
> Brew
>
>
> Phone: 087 - 9179799
> Quidquid latine dictum sit, altum sonatur
>
RE: CGIServlet followed by a Filter that modifies the response
Posted by "Caldarale, Charles R" <Ch...@unisys.com>.
> From: Anthony Brew [mailto:atbrew@gmail.com]
> Subject: Re: CGIServlet followed by a Filter that modifies the response
>
> > Unfortunately I am coming across the following:
> >
> > java.lang.IllegalStateException: getWriter() has already
> > been called for this response
Since the CGI servlet uses Response.getOutputStream(), your filter will have to do the same to avoid the exception. A given response can only use one or the other during its lifetime, as documented in the servlet spec.
- Chuck
THIS COMMUNICATION MAY CONTAIN CONFIDENTIAL AND/OR OTHERWISE PROPRIETARY MATERIAL and is thus for use only by the intended recipient. If you received this in error, please contact the sender and delete the e-mail and its attachments from all computers.