Outils pour utilisateurs

Outils du site


ide:eclipse:tomcat

Différentes versions de Tomcat

Pour mémoire ci-dessous, la version à prendre est fonction de la version de J2EE à exploiter.

Version de TomcatJ2EE/Java EE supportéDynamic Web Module supporté
v3.21.22.2
v4.01.2, 1.32.3
v4.11.2, 1.32.3
v5.01.2, 1.3, 1.42.4
v5.51.2, 1.3, 1.42.4
v6.01.2, 1.3, 1.4, 5, 62.5
v7.01.2, 1.3, 1.4, 5, 63.0
v8.01.2, 1.3, 1.4, 5, 6, 73.1
v8.51.2, 1.3, 1.4, 5, 6, 73.1
v9.01.2, 1.3, 1.4, 5, 6, 7, 84.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

Ajout Tomcat 1Ajout Tomcat 2Ajout Tomcat 3Ajout Tomcat 4Ajout 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.

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:.

Locale, étape 1 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 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.

ide/eclipse/tomcat.txt · Dernière modification : 2020/05/11 00:02 de root