Le web de Dominique Guebey – Bazar informatique

Page : http://www.dg77.net/tekno/tomcat.htm


   D o m i n i q u e   G u e b e y    J u n g l e      Bazar informatique

Memento TOMCAT

Sommaire
Généralités, ressources.
Implantation et conditions de fonctionnement
Pêle-mêle installation et configuration
Détails d’installation de Tomcat sous Linux
Premiers tests
Administration

Généralités, ressources.

Web Service : application utilisable via un réseau du type Internet. Principale technique : J2EE (SUN, IBM, Apache Group). TOMCAT fournit le support pour tous les services J2EE. On utilise en particulier des JSP (Java Server Page), pages HTML qui embarquent des instructions Java ; et des servlets, programmes Java qui génèrent à la volée le code html. Au départ module conçu pour le serveur Apache, Tomcat est devenu un serveur autonome, tout en Java, développé par le projet Jakarta.

Voir : http://jakarta.apache.org et http://www.webservices.org.

Implantation et conditions de fonctionnement

Par défaut Tomcat démarre sur le port 8080 (http://localhost:8080). Pour déployer Tomcat sur un poste qui n’a que le JRE, il faudra précompiler les JSP. Voir aussi plus bas Compléments de configuraion.

/bin
Scripts de démarrage, arrêt et autres.
/common/lib
Contient les bibliotèques ("jar") utilisées par Tomcat pour toute Webapp.
/common/classes
Contient les programmes ("class") qui ne sont pas dans un "jar".
/conf
Fichiers de configuration et DTD, notamment le fichier server.xml
/logs
Fichiers journaux (accès et erreurs)
/webapps
Emplacement où mettre les applications

Sous /webapps on range les applications ; Tomcat 5 fournit une application ROOT avec une documentation et des exemples.

Administrateur : avec la version 5.5, admin n’est pas dans le package d’origine, c’est un package à récupérer à part. Installer par copie des ss-répertoires conf et server.

Pêle-mêle installation et configuration

La variable d’environnement CATALINA_HOME pointe le répertoire d’installation de Tomcat. CATALINA_BASE permet d’accéder à une instance particulière au lieu de l’application par défaut.

Servlets : pour compiler il faut ajouter dans le Classpath : CATALINA_HOME/common/lib/[servlet.jar] Voir le nom exact de servlet.jar. Dans Tomcat 5.0 on peut trouver servlet-api, vérifier dans [CATALINA_HOME]/common/lib.

Il peut être utile de copier lib/tools.jar du JDK dans common/lib.

Détails d’installation de Tomcat sous Linux

Installation supposée faite dans /opt/tomcat.

Puis ajout de nouvelles variables d’environnement :

Les variables CLASSPATH et JAVA_HOME sont supposées en place.

Correction à /opt/tomcat/bin/setclasspath.sh : ligne 57, ôter le test "if OS400 = false" (et le "fi" correspondant)

(toujours root :) $CATALINA_BASE/bin/startup.sh puis Vérifier le fonctionnement dans un navigateur : http://localhost:8080

Premiers tests

Créer une zone de test

Sous [CATALINA_HOME]/webapps, créer un répertoire nommé (par exemple) test, dans lequel on doit créer WEB-INF qui lui-même devra contenir deux répertoires class et lib.

JSP simple

Créer ce fichier "coucou.jsp" dans [CATALINA_HOME]/webapps/test :

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html><head><title>JSP de demonstration</title></head><body>
<h1>JSP Test</h1>
Time: <%= new java.util.Date() %>
</body></html>

Dans un navigateur la commande http://localhost:8080/test/Coucou.jsp doit afficher l’heure.

JSP plus corsé

L’appeler date.jsp par exemple

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr">
<head>
  <meta content="application/xhtml+xml; charset=iso-8859-1" http-equiv="Content-Type" />
  <title>JSP de test</title>
  <%@ page session="false"%>
</head>
<body bgcolor="white">
  <%@ page import="dates.*"%>
  <jsp:useBean id='clock' scope='page' class='dates.JspCalendar' />
  <p>Nous sommes le <jsp:getProperty name="clock" property="dayOfMonth"/>
/<jsp:getProperty name="clock" property="month"/>
/<jsp:getProperty name="clock" property="year"/> 
 et il est <jsp:getProperty name="clock" property="time"/>
</p>
</body></html>

Mettre ce fichier dans le même répertoire que le précédent. Condition de fonctionnement : avoir copié dans [CATALINA_HOME]/webapps/test/WEB-INF/classes le contenu de [CATALINA_HOME]/webapps/jsp-examples/WEB-INF/classes. Sinon l’import de "dates.*" et donc le jsp:useBean ne généreront que des erreurs.

Ne pas oublier de REDEMARRER le serveur après chaque modification.

SERVLET minimaliste

Créer le programme source CoucouServlet.java :

import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class CoucouServlet extends HttpServlet {
  public void doGet(HttpServletRequest request,
                    HttpServletResponse response)
      throws ServletException, IOException {
    response.setContentType("text/html");
    PrintWriter out = response.getWriter();
    String docType =
      "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0 " +
      "Transitional//EN\">\n";
    out.println(docType +
                "<html>\n" +
                "<head><title>Servlet</title></head>\n" +
                "<body>\n" +
                "<h2>Coucou !</h2>\n" +
                "</body></html>");
  }
}

Compiler et copier le CoucouServlet.class obtenu dans [CATALINA_HOME]/webapps/test/WEB-INF/classes. Dans un navigateur la commande http://localhost:8080/test/servlet/CoucouServlet doit afficher le "Coucou !" prévu. Condition : créer/adapter la variable d’environnement CATALINA_BASE (dans l’exemple : [CATALINA_HOME]/test).

Utile : copier dans [CATALINA_HOME]/webapps/test/WEB-INF/lib le contenu de [CATALINA_HOME]/common/lib.

Compilation : il faut servlet.jar, le rechercher donc, celà peut donner quelque-chose comme :  javac  -classpath  "C:\Program Files\Eclipse\plugins\org.eclipse.tomcat_4.1.30.1\servlet.jar"  CoucouServlet.java  Noter les guillemets et non pas apostrophes.

Administration

Tomcat est géré par l’intermédiaire du fichier conf/server.xml

<Server port="8005" shutdown="SHUTDOWN" debug="0">
  <!-- Global JNDI resources -->
  <GlobalNamingResources>
    <!-- Test entry for demonstration purposes -->
    <Environment name="simpleValue" type="java.lang.Integer" value="30"/>
    <!-- Editable user database that can also be used by
         UserDatabaseRealm to authenticate users -->
    <Resource name="UserDatabase" auth="Container"
              type="org.apache.catalina.UserDatabase"
       description="User database that can be updated and saved">
    </Resource>
    <ResourceParams name="UserDatabase">
      <parameter>
        <name>factory</name>
        <value>org.apache.catalina.users.MemoryUserDatabaseFactory</value>
      </parameter>
      <parameter>
        <name>pathname</name>
        <value>conf/tomcat-users.xml</value>
      </parameter>
    </ResourceParams>
  </GlobalNamingResources>

  <!-- Define the Tomcat Stand-Alone Service -->
  <Service name="Catalina">
    <Connector 
port="8080"    maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
               enableLookups="false" redirectPort="8443" acceptCount="100"
               debug="0" connectionTimeout="20000" 
               disableUploadTimeout="true" />
    <!-- Define the top level container in our container hierarchy -->
    <Engine name="Catalina" defaultHost="localhost" debug="0">
      <!-- Global logger unless overridden at lower levels -->
      <Logger className="org.apache.catalina.logger.FileLogger"
              prefix="catalina_log." suffix=".txt"
              timestamp="true"/>

      <!-- Because this Realm is here, an instance will be shared globally -->
      <!-- This Realm uses the UserDatabase configured in the global JNDI
           resources under the key "UserDatabase".  Any edits
           that are performed against this UserDatabase are immediately
           available for use by the Realm.  -->
      <Realm className="org.apache.catalina.realm.UserDatabaseRealm"
                 debug="0" resourceName="UserDatabase"/>

      <!-- Define the default virtual host
           Note: XML Schema validation will not work with Xerces 2.2.
       -->
      <Host name="localhost" debug="0" appBase="webapps"
       unpackWARs="true" autoDeploy="true"
       xmlValidation="false" xmlNamespaceAware="false">
        <!-- Logger shared by all Contexts related to this virtual host.  By
             default (when using FileLogger), log files are created in the "logs"
             directory relative to $CATALINA_HOME.  If you wish, you can specify
             a different directory with the "directory" attribute.  Specify either a
             relative (to $CATALINA_HOME) or absolute path to the desired
             directory.-->
        <Logger className="org.apache.catalina.logger.FileLogger"
                 directory="logs"  prefix="localhost_log." suffix=".txt"
            timestamp="true"/>
      </Host>
    </Engine>
  </Service>
</Server>
Elément racine Server
Attributs du serveur : port et commande pour l’arrêt. Facultatif : className (doit implémenter org.apache.catalina.Server). Le fichier contient un ou plusieurs éléments Service
Elément Service
Un ou plusieurs éléments Connector et un Engine. Attributs : le nom du service (Name) ; facultatif : className (implémentant org.apache.catalina.Service)
Elément Connector
Attributs : className implémentant org.apache.catalina.Connector