non ho letto tutto il codice, però una cosa mi pare evidente: lo StringBuffer buf è in comune a tutta la classe, ergo, ogni append che fai aggiunge qualcosa e ad ogni toString l'intero stringbuffer viene spedito in output. Crea lo stringbuffer come variabile locale del metodo in cui lo usi/aggiorni, oppure svuotalo quando arrivi alla pagina di responso.