Tempo de resposta para requisição

Olá a todos,

Preciso saber se alguém já desenvolveu algo que calcule o tempo de resposta para uma requisição feita para um servlet por exemplo.

agradeço a atenção,

Marcelo

Opa,

crie um filtro, ai voce usa os metodos dofilter para iniciar a contagem de tempo e o destroy para finalizar a contagem e calcular o tempo.

:okok:

fala marcos,

eu estou realmente criando um flitro, o problema é que eu não consigo atualizar o atributo que guarda o tempo das requisições no método destroy, porque ele é chamado só qdo o container vai matar a instância do filtro.

estou mandando o código pra ver se ajuda.

valeu

[code]import java.net.;
import java.util.
;
import java.io.;
import javax.servlet.
;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class FiltroRequest implements Filter{

private FilterConfig fc;
private ServletContext sc;
private static int contaRequest;
private String dirFile;
private String urlInicio;
long inicio;
long fim;
long tempoResposta;

String contextPath;
String servletPath;
String pathInfo;
String pathServlet;
int contaReq;    

Map tempo;

public void init(FilterConfig config) throws ServletException{

	this.fc   = config;
	this.sc   = fc.getServletContext();
	dirFile   = sc.getInitParameter("dirLog");
	urlInicio = sc.getInitParameter("url_inicio");
	
}

public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain)
throws ServletException, IOException{
	
  inicio = System.currentTimeMillis(); 	
  tempo  = (HashMap) sc.getAttribute("tempoResp");		

 HttpServletRequest request   = (HttpServletRequest) req;
  HttpServletResponse response = (HttpServletResponse) resp;
  Map contador                 = (HashMap) sc.getAttribute("contaReq");
  
  contextPath = request.getContextPath();
  servletPath = request.getServletPath();
  pathInfo    = request.getPathInfo();
  pathServlet = resgataServlet(pathInfo);
  contaReq       = 0;
  
if (contador.containsKey(pathServlet)){contaReq = Integer.parseInt    ((String) contador.get (pathServlet)) + 1;

   contador.put(pathServlet, ""+contaReq);

	}else{
		    contador.put(pathServlet, "1");
	     }
	     
  sc.setAttribute("contaReq", contador);

  fim = System.currentTimeMillis();

  tempoResposta = fim - inicio;
  tempo.put(""+inicio+"-"+contextPath+servletPath+pathInfo, fim);
  sc.setAttribute("tempoResp", tempo);

  chain.doFilter(request,resp);
	
}

public void destroy(){

}

/**
 *usado para extrair somente o nome do servlet do pathInfo
 */
public String resgataServlet(String pPathInfo){
	
  String servlet = "";
  
  for(int i=0; i < pPathInfo.length(); i++){
		
    if (pPathInfo.charAt(i) == '?'){break;}
    else{servlet = servlet + pPathInfo.charAt(i);}

  }
  
  return servlet;		
	
}

}[/code]

[size=“11”][color=“red”]* Editado: Lembre-se de utilizar BBCode em seus códigos - marcossousa[/color][/size] :joia:

Opa,

Me expressei mal, bem você irá fazer é isto aqui:

[code] public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain)
throws ServletException, IOException{

  // inicia contagem aqui

  chain.doFilter(request,resp);
  
 // finaliza aqui e faz os cálculos

} [/code]

Sugiro utilizar outros métodos para que o doFilter não fique tão extenso.

:okok: