=====Différentes versions de Tomcat===== Pour mémoire ci-dessous, la version à prendre est fonction de la version de J2EE à exploiter. ^Version de Tomcat^J2EE/Java EE supporté^''Dynamic Web Module'' supporté^ |v3.2|1.2|2.2| |v4.0|1.2, 1.3|2.3| |v4.1|1.2, 1.3|2.3| |v5.0|1.2, 1.3, 1.4|2.4| |v5.5|1.2, 1.3, 1.4|2.4| |v6.0|1.2, 1.3, 1.4, 5, 6|2.5| |v7.0|1.2, 1.3, 1.4, 5, 6|3.0| |v8.0|1.2, 1.3, 1.4, 5, 6, 7|3.1| |v8.5|1.2, 1.3, 1.4, 5, 6, 7|3.1| |v9.0|1.2, 1.3, 1.4, 5, 6, 7, 8|4.0?| J'ai volontairement mis un 4.0? car lors de la création d'un serveur Tomcat, il n'est possible que de sélectionner la version 3.1 sous Eclipse ''Neon''. Mais si on importe la version 3.1 de ''servlet-api.jar'', il est indiqué que la classe ''GenericFilter'' est introuvable, classe qui n'existe que dans la version ''4.0''. =====Ajout d'un serveur Tomcat===== Faites ''File|New|Other…'' puis sélectionnez ''Server|Server''. Il est alors nécessaire de choisir la version de Tomcat à utiliser. De préférence utilisez la dernière version disponible si le projet le permet. La case à cocher ''Create a new local server'' indique à Eclipse que c'est à lui de gérer le serveur. Si la case n'est pas cochée, c'est à l'utilisateur qu'il incombera de lancer le serveur. Si cette n'existe pas (ancienne version), le serveur est géré par Eclipse. Sélectionnez la ''Target runtime'' ou créez en une. Le dossier de Tomcat sous Windows est le dossier ''Apache Tomcat'' de ''C:/Programmes'', sous Linux il est généralement ''/usr/share/tomcat-XXX'' et valider. Vérifiez que les librairies ''el-api.jar'', ''jsp-api.jar'' et ''servlet-api.jar'' sont dans ''CLASSPATH'' (voir paragraphe ci-dessous). Pour vérifier que la configuration du serveur est correct, lancez-le et allez dans votre navigateur Internet à l'adresse [[http://localhost:8080|localhost:8080]] {{ide:eclipse:tomcat:1.png|Ajout Tomcat 1}}{{ide:eclipse:tomcat:2.png|Ajout Tomcat 2}}{{ide:eclipse:tomcat:3.png|Ajout Tomcat 3}}{{ide:eclipse:projet:4.png|Ajout Tomcat 4}}{{ide:eclipse:tomcat:5.png|Ajout Tomcat 5}} =====Modifier la variable système CLASSPATH==== Allez dans le menu ''Run|Run Configurations…''. Sélectionnez le server Tomcat, allez dans l'onglet ''Classpath'', cliquez sur ''User Entries'' et validez ''Add External JARs…''. Ajoutez les librairies jar. {{ide:eclipse:tomcat:p1-1.png|}}{{ide:eclipse:tomcat:p1-2.png|}} =====Configuration de la locale de Tomcat===== Il suffit d'ajouter ''-Duser.language=en -Duser.country=US'' comme argument au server de ''Tomcat'' pour qu'il utilise la locale ''en_US''. Allez dans ''Run|Run configurations…'' puis sélectionnez dans l'arborescence le server ''Tomcat'' à configurer. Choisissez l'onglet ''Arguments'' et ajouter les 2 constantes dans le champ ''VM arguments:''. {{ide:eclipse:tomcat:locale1.png|Locale, étape 1}} {{ide:eclipse:tomcat:locale2.png|Locale, étape 2}} =====Problèmes===== ====java.lang.NoClassDefFoundError: javax/servlet/http/HttpServletRequest==== GRAVE: Begin event threw error java.lang.NoClassDefFoundError: javax/servlet/http/HttpServletRequest at java.lang.ClassLoader.defineClass1(Native Method) at java.lang.ClassLoader.defineClass(ClassLoader.java:763) ... XXX more Il manque ''tomcat-servlet-api'' (''el-api.jar'', ''jsp-api.jar'' et ''servlet-api.jar'') dans la variable environnement ''CLASSPATH'' du serveur Tomcat. La version de ''servlet-api'' doit correspondre avec la version du ''Dynamic Web Module'' dans le tableau du paragraphe [[#Differentes_versions_de_Tomcat|Différentes versions de Tomcat]]. ====java.lang.NoClassDefFoundError: javax/servlet/GenericFilter==== GRAVE: A child container failed during start java.util.concurrent.ExecutionException: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[localhost].StandardContext[]] at java.util.concurrent.FutureTask.report(FutureTask.java:122) at java.util.concurrent.FutureTask.get(FutureTask.java:192) at org.apache.catalina.core.ContainerBase.startInternal(Unknown Source) at org.apache.catalina.core.StandardHost.startInternal(Unknown Source) at org.apache.catalina.util.LifecycleBase.start(Unknown Source) at org.apache.catalina.core.ContainerBase$StartChild.call(Unknown Source) at org.apache.catalina.core.ContainerBase$StartChild.call(Unknown Source) at java.util.concurrent.FutureTask.run(FutureTask.java:266) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) at java.lang.Thread.run(Thread.java:745) Caused by: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[localhost].StandardContext[]] ... 7 more Caused by: java.lang.NoClassDefFoundError: javax/servlet/GenericFilter at java.lang.ClassLoader.defineClass1(Native Method) at java.lang.ClassLoader.defineClass(ClassLoader.java:763) ... XXX more ''javax.servlet.GenericFilter'' n'est disponible qu'à partir de la version ''4.0'' de ''servlet-api''. Je suppose que ''Tomcat 9.0'' a été conjugué avec ''servlet-api-3.1'' malgré l'avertissement donné au paragraphe [[#Differentes_versions_de_Tomcat|Différentes versions de Tomcat]]. ====java.lang.IllegalStateException: No Java compiler available==== GRAVE: Servlet.service() for servlet [jsp] in context with path [/NSY135test] threw exception [java.lang.IllegalStateException: No Java compiler available] with root cause java.lang.IllegalStateException: No Java compiler available at org.apache.jasper.JspCompilationContext.createCompiler(Unknown Source) at org.apache.jasper.JspCompilationContext.compile(Unknown Source) at org.apache.jasper.servlet.JspServletWrapper.service(Unknown Source) at org.apache.jasper.servlet.JspServlet.serviceJspFile(Unknown Source) at org.apache.jasper.servlet.JspServlet.service(Unknown Source) at javax.servlet.http.HttpServlet.service(Unknown Source) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(Unknown Source) at org.apache.catalina.core.ApplicationFilterChain.doFilter(Unknown Source) at org.apache.tomcat.websocket.server.WsFilter.doFilter(Unknown Source) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(Unknown Source) at org.apache.catalina.core.ApplicationFilterChain.doFilter(Unknown Source) at org.apache.catalina.core.StandardWrapperValve.invoke(Unknown Source) at org.apache.catalina.core.StandardContextValve.invoke(Unknown Source) at org.apache.catalina.authenticator.AuthenticatorBase.invoke(Unknown Source) at org.apache.catalina.core.StandardHostValve.invoke(Unknown Source) at org.apache.catalina.valves.ErrorReportValve.invoke(Unknown Source) at org.apache.catalina.valves.AbstractAccessLogValve.invoke(Unknown Source) at org.apache.catalina.core.StandardEngineValve.invoke(Unknown Source) at org.apache.catalina.connector.CoyoteAdapter.service(Unknown Source) at org.apache.coyote.http11.Http11Processor.service(Unknown Source) at org.apache.coyote.AbstractProcessorLight.process(Unknown Source) at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(Unknown Source) at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(Unknown Source) at org.apache.tomcat.util.net.SocketProcessorBase.run(Unknown Source) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(Unknown Source) at java.lang.Thread.run(Thread.java:745) Il manque ''ecj.jar'' dans la variable environnement ''CLASSPATH'' du serveur Tomcat. ====Multiple contexts have a path of "/path".==== [[https://stackoverflow.com/questions/7239613/multiple-contexts-with-the-same-path-error-running-web-service-in-eclipse-using|Multiple contexts with the same path error running web service in Eclipse using Tomcat - Stack Overflow]] {{ :ide:eclipse:tomcat:multiple_contexts_with_the_same_path_error_running_web_service_in_eclipse_using_tomcat_-_stack_overflow_2020-04-27_7_52_08_am_.html |Archive du 30/08/2011 le 27/04/2020}} Ce message peut apparaître lorsqu'on fait un copier coller dans un même workspace d'un ''Web Dynamic Project''. Allez dans le fichier ''server.xml'' et cherchez deux lignes '''' afin de ne pas avoir deux projets avec la même racine.