Thema der Woche: Servlet-Filter

Was Nordkorea kann, können wir auch. Lies zur Einleitung http://www.spiegel.de/netzwelt/web/html-trick-nordkorea-macht-seinen-fuehrer-groesser-a-872291.html, um eine Idee zu bekommen, was wir vorhaben.

Lege in der IDE ein Web-Projekt an. Setze eine index.jsp in das Wurzelverzeichnis mit Text, der den Namen “Kim Jong Un” enthält (alternativ “Angela Merkel”; je nachdem, wer einem sympathischer ist). Teste die Seite.

Lies http://www.oracle.com/technetwork/java/filters-137243.html und verstehe das Konzept der Filter. Der Code ist mit den Eintragungen in die web.xml nicht mehr ganz aktuell, den letzten Teil kann man daher überspringen.

Kopiere http://www.roseindia.net/java/javaee6/webFilterExample.shtml und probiere es aus. Das Beispiel nutzt die Annotationen aus der aktuellen Servlet-Spezifikation.

Ändere den Filter, so dass er den Namen unseres gewählten Staatsoberhaupts größer setzt. Wie das realisiert ist, ist im Prinzip egal, die einfachster Lösung ist Ok (etwa mit <font size=+1>name</font>).

Über Christian Ullenboom

Ich bin Christian Ullenboom und Autor der Bücher ›Java ist auch eine Insel. Einführung, Ausbildung, Praxis‹ und ›Java SE 8 Standard-Bibliothek. Das Handbuch für Java-Entwickler‹. Seit 1997 berate ich Unternehmen im Einsatz von Java. Sun ernannte mich 2005 zum ›Java-Champion‹.

Ein Gedanke zu „Thema der Woche: Servlet-Filter

  1. Mein Ansatz:

    import java.io.CharArrayWriter;
    import java.io.IOException;
    import java.io.PrintWriter;

    import javax.servlet.Filter;
    import javax.servlet.FilterChain;
    import javax.servlet.FilterConfig;
    import javax.servlet.ServletException;
    import javax.servlet.ServletRequest;
    import javax.servlet.ServletResponse;
    import javax.servlet.annotation.WebFilter;
    import javax.servlet.http.HttpServletResponse;
    import javax.servlet.http.HttpServletResponseWrapper;

    /**
    * Ein Servlet Filter der eine subtile Änderung am Erscheinungsbild des ausgelieferten HTML-Contents vornimmt.
    *
    * @author bobndrew
    */
    @WebFilter( filterName = "WahljahrFilter", urlPatterns = { "*" } )
    public final class WahljahrFilter implements Filter
    {
    private FilterConfig filterConfig = null;

    @Override
    public void init( FilterConfig filterConfig ) throws ServletException
    {
    this.filterConfig = filterConfig;
    }

    @Override
    public void destroy()
    {
    this.filterConfig = null;
    }

    @Override
    public void doFilter( ServletRequest request, ServletResponse response, FilterChain chain )
    throws IOException, ServletException
    {
    if ( filterConfig == null )
    return;

    PrintWriter out = response.getWriter();
    CharResponseWrapper wrapper = new CharResponseWrapper( (HttpServletResponse) response );
    chain.doFilter( request, wrapper );
    CharArrayWriter caw = new CharArrayWriter();
    caw.write( wrapper.toString().replace(
    "Angela Merkel",
    "Ange"
    + "la Me"
    + "rkel" ) );
    response.setContentLength( caw.toString().length() );
    out.write( caw.toString() );
    out.close();

    chain.doFilter( request, wrapper );
    }

    /**
    * 'WahljahrFilter.java' wraps the response in this CharResponseWrapper. CharResponseWrapper overrides the
    * getWriter method to return a stand-in stream into which the servlet at the end of the filter chain writes
    * its response. When chain.doFilter returns,
    *
    * 'WahljahrFilter.java' retrieves the servlet's response from PrintWriter and writes it to a buffer if it
    * is an HTML response. The filter inserts the value of the counter into the buffer, resets the content
    * length header of the response, and finally writes the contents of the buffer to the response stream.
    *
    *
    * @author sun / oracle
    */
    public class CharResponseWrapper extends HttpServletResponseWrapper
    {
    private CharArrayWriter output;
    public String toString()
    {
    return output.toString();
    }

    public CharResponseWrapper( HttpServletResponse response )
    {
    super( response );
    output = new CharArrayWriter();
    }

    public PrintWriter getWriter()
    {
    return new PrintWriter( output );
    }
    }

    }

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.