Table des matières
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 localhost:8080
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.
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:
.
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 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 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".
Multiple contexts with the same path error running web service in Eclipse using Tomcat - Stack Overflow 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 <Context docBase=“root” path=“/path” …
. Il n'est pas possible que deux Context
possèdent le même path
. Attention, Eclipse a ajouté le deuxième Context
sur la même ligne que le premier. Bien regarder toute la ligne.
Il est aussi conseillé de changer dans le nouveau projet le fichier web.xml
, l'attribut <display-name>
afin de ne pas avoir deux projets avec la même racine.