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
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: