Bom dia!
Sou iniciante no Java e estou com um probleminha… Criei uma classe java para capturar, via http, o HTML de um outro site.
Utilizei a API do httpClient. Essa parte funcionou sem problemas, a questão é que a performance do servidor caiu muitoooooooo…
Para corrigir este problema, estou tentando utilizar um pool de conexões! Só que não está funcionando…
Alguém pode dar um dica do que posso fazer!?
O código da classe é o seguinte:
[code]
import java.io.IOException;
import org.apache.commons.httpclient.DefaultHttpMethodRetryHandler;
import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.HttpException;
import org.apache.commons.httpclient.HttpMethodBase;
import org.apache.commons.httpclient.HttpStatus;
import org.apache.commons.httpclient.methods.GetMethod;
import org.apache.commons.httpclient.params.HttpMethodParams;
import java.sql.;
import javax.servlet.;
import javax.servlet.http.;
import javax.sql.;
import javax.naming.*;
public class Delorme extends HttpServlet{
private DataSource pool = null;
public void init(ServletConfig config) throws ServletException
{ try
{
Context ambiente = (Context) new InitialContext().lookup("java:comp/env");
pool = (DataSource) ambiente.lookup("jdbc/contas");
if (pool == null)
{ throw new ServletException ("jdbc/contas é um DataSource desconhecido");
}
}
catch(NamingException e)
{ throw new ServletException(e);
}
}
private static Object gerenciadorTentativas;
public static void main(String[] args) {
// Obtém uma conexão do pool.
Connection conn = pool.getConnection();
String url = "http://www.vesper.com.br/www/libs/cobertura/verifica_cobertura.asp?CEP1=20511&CEP2=320&num=147";
HttpClient client = new HttpClient();
HttpMethodBase getMethod = new GetMethod(url);
client.getParams().setParameter("http.connection.timeout", new Integer(5000));
DefaultHttpMethodRetryHandler gerenciadorTentativas = new DefaultHttpMethodRetryHandler
(1,true);
client.getParams().setParameter(HttpMethodParams.RETRY_HANDLER,gerenciadorTentativas);
try{
int status = client.executeMethod(getMethod);
String cobertura = null;
if (status == HttpStatus.SC_OK){
String htmlResposta = getMethod.getResponseBodyAsString();
if (htmlResposta.indexOf("publicidade") > 0){
cobertura = "s";
}
else if (htmlResposta.indexOf("Obrigado pela consulta") > 0){
cobertura = "n";
}
else{
System.out.println("Servidor fora do ar");
}
if (cobertura.equals("s")){
System.out.println("Teste OK");
} else if (cobertura.equals("n")){
System.out.println("Tente mais tarde");
}
}
else {
System.out.println("Erro: " + status + " - " + HttpStatus.getStatusText(status));
}
}catch(HttpException e){
//do something
}catch(IOException e){
System.err.println ("Erro de I/O: " + e.getMessage());
}finally{
try
{ if (conn != null)
{ conn.close(); }
}
catch(SQLException e)
{ }
getMethod.releaseConnection();
}
}
}[/code]
Fiz as alterações no código dos arquivos web.xml, server.xml, context.xml
Desde já agradeço…
[color=darkred]Editado pelo moderador para incluir as tags Code pois sem elas era difícil entender o código[/color]