Ho un po' capito come funziona, ma ho un problema: ho scritto una classe con un metodo statico da richiamare dalla mia servlet che gestisce per il momento le richieste get alle pagine web. La classe è la seguente:
codice:
import org.apache.commons.httpclient.*;
import org.apache.commons.httpclient.methods.*;
public class PageRequest {
public static String getPage(String host){
String url=host;
String contents="";
try {
System.out.println(url);
HttpClient client = new HttpClient();
GetMethod method = new GetMethod( url );
method.setFollowRedirects( true );
// Esegue il metodo GET
int statusCode = client.executeMethod( method );
if( statusCode != -1 ) {
contents = method.getResponseBodyAsString();
method.releaseConnection();
}
}
catch( Exception e ) {
contents="Si è verificato un errore.";
}
return contents;
}
}
Il problema è che a runtime mi genera un sacco di eccezioni:
codice:
Log di tomcat
2006-04-06 14:07:28 StandardWrapperValve[GR]: Servlet.service() for servlet GR threw exception
java.lang.NoClassDefFoundError: org/apache/commons/httpclient/HttpMethod
at GestRequest.doGet(GestRequest.java:35)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:743)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:856)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:214)
at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)
at org.apache.catalina.core.StandardContextValve.invokeInternal(StandardContextValve.java:198)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:152)
at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:137)
at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:118)
at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:102)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:929)
at org.apache.coyote.tomcat5.CoyoteAdapter.service(CoyoteAdapter.java:160)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:799)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processConnection(Http11Protocol.java:705)
at org.apache.tomcat.util.net.TcpWorkerThread.runIt(PoolTcpEndpoint.java:577)
at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:684)
at java.lang.Thread.run(Thread.java:534)
Il problema è forse che non trova dove ho piazzato i jar del common-http-client e delle sue dipendenze? In effetti se faccio una classe simile a quella sopra ma con tutto dentro il main lanciandola da riga di comando devo settare con il flag -classpath il percorso di tutti i jar. Ora, quello che mi chiedo è:
a) Come faccio a far in modo che al momento di richiamare dei metodi all'interno di classi di un package compresso in jar che sta in una posizione qualsiasi del filesystem questi metodi vengano effettivamente trovati dalla servlet?
b) se a) non fosse possibile, dove piazzo all'interno del filesystem i miei jar per far sì che vengano visti al momento dell'esecuzione da parte della servlet?