Resolvido - Como medir o tráfego em um Servlet?

Pessoal,

preciso contar o número de bytes trafegados em um Servlet. Tanto no request como no response.

Alguém poderia me ajudar?

Olá, não compreendi muito bem o que deseja fazer, mas creio que você pode configurar um Filter no DD para resolver esse problema.

Se possível faça uma descrição mais detalhada do seu problema, ou dê um exemplo concreto.

Abs.

Então … eu criei um filtro que intercepta 3 servlets da aplicação.

E com esse filtro eu pretendo contar o número de bytes trafegados, pois o cliente vai pagar pelo tráfego.

Minha ideia é nesse filtro somar os bytes recebidos com os bytes enviados para o cliente. Como o servlet trata somente o método GET vou contar somente o header das requisições. E na resposta vou contar o número de bytes enviados para o cliente.

O problema é que eu não sei como contar o número de bytes do header e também não consigo pegar o número de bytes do OutputStream do objeto ServletResponse.

Resolvido. Vou postar a solução.

Pra somar os bytes do header HTTP. Código escrito no filtro:

HttpServletRequest hreq = (HttpServletRequest) req;
	String tmp = hreq.getRequestURI() + "?" + hreq.getQueryString();
	int contHeader = tmp.getBytes().length;
	Enumeration e = hreq.getHeaderNames();
	while (e.hasMoreElements()) {
		String headerName = (String) e.nextElement();
		String headerValue = hreq.getHeader(headerName);
		tmp = headerName + ": " + headerValue;
		System.out.println("TMP: " + tmp);
		contHeader += tmp.getBytes().length;
	}
        //nesse ponto contHeader tem o número de bytes do header HTTP

Para contar os bytes enviados na resposta criei uma classe chamada CustomPrintWriter que estende PrintWriter. Nessa classe sobrescrevi os métodos usados nos servlets, e quando um servlet vai escrever no PrintWriter, na verdade ele está usando o CustomPrintWriter e dessa forma consegui contabilizar todos os bytes escritos no PrintWriter.