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>).
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 );
}
}
}