At 11:30 AM 6/24/2004 +0200, you wrote:
Hello,

I have a Problem with ServletFilters.
I am using a CacheFilter originally from Jason Falkner.

This CacheFilter wraps ServletWrapper and writes outpustream to a ByteArrayStream and finally this bytearraystream is written to disk.
Installing has been very easy and FIlter is working.
But: every page I tested (page size from 14k to 150k) is truncated. Truncation is already in the ByteArray.

Are you flushing the writer in the wrapper? Hmm... Dont' have time to go into details. I'll just past a useful working wrapper and helper class here...


package com.acme.servlet.filter;

import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpServletResponseWrapper;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.PrintWriter;

public class GenericResponseWrapper extends HttpServletResponseWrapper {

    private ByteArrayOutputStream output;
    private PrintWriter writer;
    private int origStatus = 0;
    private int contentLength = 0;
    private String contentType;

    public GenericResponseWrapper(HttpServletResponse response) {
        super(response);
        output = new ByteArrayOutputStream();
    }

    public byte[] toByteArray() {
        if (writer != null) writer.flush();
        return output.toByteArray();
    }

    public String toString() {
        if (writer != null) writer.flush();
        return output.toString();
    }

    public ServletOutputStream getOutputStream() {
        return new FilterServletOutputStream(output);
    }

    public PrintWriter getWriter() {
        writer = new PrintWriter(getOutputStream(), true);
        return writer;
    }

    public void sendError(int sc) throws IOException {
        super.sendError(sc);
        this.origStatus = sc;
    }

    public void sendError(int sc, String message) throws IOException {
        super.sendError(sc, message);
        this.origStatus = sc;
    }

    public int getStatus() {
        return this.origStatus;
    }

    public void setContentLength(int length) {
        this.contentLength = length;
        super.setContentLength(length);
    }

    public int getContentLength() {
        return this.contentLength;
    }

    public void setContentType(String type) {
        this.contentType = type;
        super.setContentType(type);
    }

    public String getContentType() {
        return this.contentType;
    }

}


package com.acme.servlet.filter;

import javax.servlet.ServletOutputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.OutputStream;

public class FilterServletOutputStream extends ServletOutputStream {

    private DataOutputStream stream = null;

    public FilterServletOutputStream(OutputStream output) {
        stream = new DataOutputStream(output);
    }

    public void write(int b) throws IOException {
        stream.write(b);
    }

    public void write(byte[] b) throws IOException {
        stream.write(b);
    }

    public void write(byte[] b, int off, int len) throws IOException {
        stream.write(b, off, len);
    }

}


Jake



The JSP-Page originally contained include directives which I evetually removed but same result.
I am using tomcat 4.1.29 and mod_jk and Apache 2.0 (same result with Apache 1.3)


so any idea or any suggestion?

--




Mit freundlichen Grüßen

Dipl.Inform. Carsten Lex
Geschäftsführer DeepWeb GmbH

------------------------
DeepWeb GmbH
Universität, Gebäude 30
66123 Saarbrücken

Tel.:  0681 - 302 6308
Mobil: 0163 - 33 37 002



---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]


---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]



Reply via email to