2013-02-27 12 views
36

Quando eseguo l'applicazione dopo aver inserito l'URL, questa eccezione sta arrivando. Sto utilizzando Eclipse e Tomcat7.0.35. Ho anche aggiunto jstl.jar e jstl1.2.jarjava.lang.ClassNotFoundException: javax.servlet.jsp.jstl.core.Config

Il mio codice è

java.lang.ClassNotFoundException: javax.servlet.jsp.jstl.core.Config 
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1714) 
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1559) 
    at org.apache.myfaces.view.jsp.JspViewDeclarationLanguage.buildView(JspViewDeclarationLanguage.java:91) 
    at org.apache.myfaces.lifecycle.RenderResponseExecutor.execute(RenderResponseExecutor.java:78) 
    at org.apache.myfaces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:241) 
    at javax.faces.webapp.FacesServlet.service(FacesServlet.java:199) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) 
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222) 
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123) 
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472) 
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171) 
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99) 
    at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:936) 
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118) 
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407) 
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1004) 
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:589) 
    at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:310) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) 
    at java.lang.Thread.run(Unknown Source) 
+0

Puoi fornire l'elenco delle librerie in classpath? sembra che ti manchi il 'jstl.jar' nel classpath – araknoid

+0

Ho aggiunto librerie jsf-myfaces, jstl, primefaces in classpath e buildpath – Sagar

+0

@Sagar È necessario assicurarsi che i jar si trovino nella directory 'WEB-INF/lib'. Vedi la mia risposta. – dan

risposta

2

Probabilmente le librerie JSTL mancano classpath/non accessibile da Tomcat.

è necessario aggiungere almeno i seguenti file jar nella directory WEB-INF/lib:

  • jsf-impl.jar
  • jsf-api.jar
  • jstl.jar
+2

... e non ** fiddle con l'impostazione * Build Path * del progetto. Non toccarlo e, se necessario, annulla le eventuali modifiche apportate. Basta lasciare il JAR in '/ WEB-INF/lib' è sufficiente. Vedi anche http://stackoverflow.com/tags/jstl/info Si noti che JSTL 1.2 è solo un file JAR, non due. Quindi se hai 'jstl.jar' e' jstl-1.2.jar', dovresti rimuovere il primo. – BalusC

+0

@BalusC Buon punto. Grazie BalusC. – dan

+0

@BalusC ThankYou – Sagar

3

Aggiungi il vaso jstl al percorso di classe dell'applicazione.

6

Per impostazione predefinita, il contenitore Tomcat non contiene alcuna libreria jstl. Per risolvere il problema, dichiara jstl.jar nel file pom.xml Maven se si sta lavorando in progetti Maven o aggiungerlo al classpath dell'applicazione

<dependency> 
    <groupId>javax.servlet</groupId> 
    <artifactId>jstl</artifactId> 
    <version>1.2</version> 
    </dependency> 
+2

non funziona per me ( – gstackoverflow

60

L'errore che si sta dicendo che non può trovare la classe perché non è disponibile nella tua applicazione.

Se si utilizza Maven, assicuratevi di avere la dipendenza per jstl artefatto:

<dependency> 
     <groupId>javax.servlet</groupId> 
     <artifactId>jstl</artifactId> 
     <version>1.2</version> 
</dependency> 

Se non lo si utilizza, basta assicurarsi di includere il JAR nel classpath. Vedere this answer per i collegamenti di download.

+0

@ RaulGogo-Non sto utilizzando Maven – Sagar

+0

L'ultimo paragrafo è per il caso in cui non si dispone di Maven. Vedere la risposta nel collegamento fornito. –

1

Solo un breve commento: a volte Maven Non copia il JSTL-.jar al Cartella WEB-INF anche se pom.xml ha la voce per esso.

Ho dovuto copiare manualmente il jar JSTL su/WEB-INF/lib sul file system. Questo ha risolto il problema. Il problema potrebbe essere correlato al plug-in Maven war packaging.

1

Aggiungi JSTL library come dipendenza dal progetto (javax.servlet.jsp.jstl.core.Config è una parte di questo pacchetto). Per esempio, se si sta utilizzando Gradle, si potrebbe scrivere in un build.gradle:

dependencies { 
    compile 'javax.servlet:jstl:1.2' 
} 
1

Ho avuto lo stesso problema. Vai a Proprietà progetto -> Distribuzione in modo imperdibile e aggiungi jar jstl