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 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>).
1 Kommentare
bobndrew ·
Mein Ansatz: ```java 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 ); } } } ```
Die bisherigen Kommentare wurden aus WordPress übernommen. Neue Kommentare sind derzeit geschlossen.