Version : 2023.01.
Dernière mise-à-jour : 2023/12/02 15:49
Le répertoire d'installation de Tomcat est défini par la valeur de la variable $CATALINA_HOME :
[root@centos8 ~]# echo $CATALINA_HOME /usr/tomcat10
L'arborescence du répertoire $CATALINA_HOME est :
[root@centos8 ~]# cd $CATALINA_HOME [root@centos8 tomcat10]# ls bin conf lib logs README.md RUNNING.txt webapps BUILDING.txt CONTRIBUTING.md LICENSE NOTICE RELEASE-NOTES temp work [root@centos8 tomcat10]# tree | more . ├── bin │ ├── bootstrap.jar │ ├── catalina.bat │ ├── catalina.sh │ ├── catalina-tasks.xml │ ├── ciphers.bat │ ├── ciphers.sh │ ├── commons-daemon.jar │ ├── commons-daemon-native.tar.gz │ ├── configtest.bat │ ├── configtest.sh │ ├── daemon.sh │ ├── digest.bat │ ├── digest.sh │ ├── makebase.bat │ ├── makebase.sh │ ├── migrate.bat │ ├── migrate.sh │ ├── setclasspath.bat │ ├── setclasspath.sh │ ├── shutdown.bat │ ├── shutdown.sh │ ├── startup.bat │ ├── startup.sh │ ├── tomcat-juli.jar │ ├── tomcat-native.tar.gz │ ├── tool-wrapper.bat │ ├── tool-wrapper.sh │ ├── version.bat │ └── version.sh ├── BUILDING.txt ├── conf │ ├── Catalina │ │ └── localhost │ ├── catalina.policy │ ├── catalina.properties │ ├── context.xml │ ├── jaspic-providers.xml │ ├── jaspic-providers.xsd │ ├── logging.properties │ ├── server.xml │ ├── tomcat-users.xml │ ├── tomcat-users.xsd │ └── web.xml ├── CONTRIBUTING.md ├── lib │ ├── annotations-api.jar │ ├── catalina-ant.jar │ ├── catalina-ha.jar │ ├── catalina.jar --More--
Le répertoire bin contient des scripts et fichiers nécessaires au démarrage du serveur.
[root@centos8 tomcat10]# cd bin [root@centos8 bin]# tree . ├── bootstrap.jar ├── catalina.bat ├── catalina.sh ├── catalina-tasks.xml ├── ciphers.bat ├── ciphers.sh ├── commons-daemon.jar ├── commons-daemon-native.tar.gz ├── configtest.bat ├── configtest.sh ├── daemon.sh ├── digest.bat ├── digest.sh ├── makebase.bat ├── makebase.sh ├── migrate.bat ├── migrate.sh ├── setclasspath.bat ├── setclasspath.sh ├── shutdown.bat ├── shutdown.sh ├── startup.bat ├── startup.sh ├── tomcat-juli.jar ├── tomcat-native.tar.gz ├── tool-wrapper.bat ├── tool-wrapper.sh ├── version.bat └── version.sh 0 directories, 29 files
Le répertoire conf contient les quatre fichiers de configuration importants :
[root@centos8 bin]# cd ../conf [root@centos8 conf]# tree . ├── Catalina │ └── localhost ├── catalina.policy ├── catalina.properties ├── context.xml ├── jaspic-providers.xml ├── jaspic-providers.xsd ├── logging.properties ├── server.xml ├── tomcat-users.xml ├── tomcat-users.xsd └── web.xml 2 directories, 10 files
Le répertoire libs contient les bibliothèques Java (fichiers .jar) disponibles à toutes les applications ainsi qu'à Tomcat lui-même :
[root@centos8 conf]# cd ../lib [root@centos8 lib]# tree . ├── annotations-api.jar ├── catalina-ant.jar ├── catalina-ha.jar ├── catalina.jar ├── catalina-ssi.jar ├── catalina-storeconfig.jar ├── catalina-tribes.jar ├── ecj-4.20.jar ├── el-api.jar ├── jakartaee-migration-1.0.4-shaded.jar ├── jasper-el.jar ├── jasper.jar ├── jaspic-api.jar ├── jsp-api.jar ├── servlet-api.jar ├── tomcat-api.jar ├── tomcat-coyote.jar ├── tomcat-dbcp.jar ├── tomcat-i18n-cs.jar ├── tomcat-i18n-de.jar ├── tomcat-i18n-es.jar ├── tomcat-i18n-fr.jar ├── tomcat-i18n-ja.jar ├── tomcat-i18n-ko.jar ├── tomcat-i18n-pt-BR.jar ├── tomcat-i18n-ru.jar ├── tomcat-i18n-zh-CN.jar ├── tomcat-jdbc.jar ├── tomcat-jni.jar ├── tomcat-util.jar ├── tomcat-util-scan.jar ├── tomcat-websocket.jar └── websocket-api.jar 0 directories, 33 files
Le répertoire logs contient les fichiers de journalisation du serveur :
[root@centos8 lib]# cd ../logs [root@centos8 logs]# tree . ├── catalina.2023-10-03.log ├── catalina.out ├── localhost.2023-10-03.log └── localhost_access_log.2023-10-03.txt 0 directories, 4 files
Le répertoire webapps contient les deux applications pour la gestion du serveur :
[root@centos8 logs]# cd ../webapps [root@centos8 webapps]# tree . ├── docs │ ├── aio.html │ ├── annotationapi │ │ └── index.html │ ├── api │ │ └── index.html │ ├── appdev │ │ ├── build.xml.txt │ │ ├── deployment.html │ │ ├── index.html │ │ ├── installation.html │ │ ├── introduction.html │ │ ├── processes.html │ │ ├── sample │ │ │ ├── build.xml │ │ │ ├── docs │ │ │ │ └── README.txt │ │ │ ├── index.html │ │ │ ├── sample.war │ │ │ ├── src │ │ │ │ └── mypackage │ │ │ │ └── Hello.java │ │ │ └── web │ │ │ ├── hello.jsp │ │ │ ├── images │ │ │ │ └── tomcat.gif │ │ │ ├── index.html │ │ │ └── WEB-INF │ │ │ └── web.xml │ │ ├── source.html │ │ └── web.xml.txt │ ├── apr.html │ ├── architecture │ │ ├── index.html │ │ ├── overview.html │ │ ├── requestProcess │ │ │ ├── authentication-process.png │ │ │ └── request-process.png │ │ ├── requestProcess.html │ │ ├── startup │ │ │ ├── serverStartup.pdf │ │ │ └── serverStartup.txt │ │ └── startup.html │ ├── balancer-howto.html │ ├── building.html │ ├── BUILDING.txt │ ├── cdi.html │ ├── cgi-howto.html │ ├── changelog.html │ ├── class-loader-howto.html │ ├── cluster-howto.html │ ├── comments.html │ ├── config │ │ ├── ajp.html │ │ ├── automatic-deployment.html │ │ ├── cluster-channel.html │ │ ├── cluster-deployer.html │ │ ├── cluster.html │ │ ├── cluster-interceptor.html │ │ ├── cluster-listener.html │ │ ├── cluster-manager.html │ │ ├── cluster-membership.html │ │ ├── cluster-receiver.html │ │ ├── cluster-sender.html │ │ ├── cluster-valve.html │ │ ├── context.html │ │ ├── cookie-processor.html │ │ ├── credentialhandler.html │ │ ├── engine.html │ │ ├── executor.html │ │ ├── filter.html │ │ ├── globalresources.html │ │ ├── host.html │ │ ├── http2.html │ │ ├── http.html │ │ ├── index.html │ │ ├── jar-scan-filter.html │ │ ├── jar-scanner.html │ │ ├── jaspic.html │ │ ├── listeners.html │ │ ├── loader.html │ │ ├── manager.html │ │ ├── realm.html │ │ ├── resources.html │ │ ├── server.html │ │ ├── service.html │ │ ├── sessionidgenerator.html │ │ ├── systemprops.html │ │ └── valve.html │ ├── connectors.html │ ├── default-servlet.html │ ├── deployer-howto.html │ ├── developers.html │ ├── elapi │ │ └── index.html │ ├── graal.html │ ├── host-manager-howto.html │ ├── html-host-manager-howto.html │ ├── html-manager-howto.html │ ├── images │ │ ├── add.gif │ │ ├── asf-logo.svg │ │ ├── code.gif │ │ ├── cors-flowchart.png │ │ ├── design.gif │ │ ├── docs.gif │ │ ├── docs-stylesheet.css │ │ ├── fix.gif │ │ ├── fonts │ │ │ ├── fonts.css │ │ │ ├── OpenSans400italic.woff │ │ │ ├── OpenSans400.woff │ │ │ ├── OpenSans600italic.woff │ │ │ ├── OpenSans600.woff │ │ │ ├── OpenSans700italic.woff │ │ │ └── OpenSans700.woff │ │ ├── tomcat.gif │ │ ├── tomcat.png │ │ ├── update.gif │ │ └── void.gif │ ├── index.html │ ├── introduction.html │ ├── jasper-howto.html │ ├── jaspicapi │ │ └── index.html │ ├── jdbc-pool.html │ ├── jndi-datasource-examples-howto.html │ ├── jndi-resources-howto.html │ ├── jspapi │ │ └── index.html │ ├── logging.html │ ├── manager-howto.html │ ├── maven-jars.html │ ├── mbeans-descriptors.dtd │ ├── mbeans-descriptors-howto.html │ ├── monitoring.html │ ├── proxy-howto.html │ ├── realm-howto.html │ ├── RELEASE-NOTES.txt │ ├── rewrite.html │ ├── RUNNING.txt │ ├── security-howto.html │ ├── security-manager-howto.html │ ├── servletapi │ │ └── index.html │ ├── setup.html │ ├── ssi-howto.html │ ├── ssl-howto.html │ ├── tribes │ │ ├── developers.html │ │ ├── faq.html │ │ ├── interceptors.html │ │ ├── introduction.html │ │ ├── membership.html │ │ ├── setup.html │ │ ├── status.html │ │ └── transport.html │ ├── virtual-hosting-howto.html │ ├── WEB-INF │ │ └── web.xml │ ├── websocketapi │ │ └── index.html │ ├── web-socket-howto.html │ ├── windows-auth-howto.html │ └── windows-service-howto.html ├── examples │ ├── index.html │ ├── jsp │ │ ├── async │ │ │ ├── async1.jsp │ │ │ ├── async1.jsp.html │ │ │ ├── async3.jsp │ │ │ ├── async3.jsp.html │ │ │ ├── index.jsp │ │ │ └── index.jsp.html │ │ ├── cal │ │ │ ├── cal1.jsp │ │ │ ├── cal1.jsp.html │ │ │ ├── cal2.jsp │ │ │ ├── cal2.jsp.html │ │ │ ├── calendar.html │ │ │ ├── Entries.java.html │ │ │ ├── Entry.java.html │ │ │ ├── JspCalendar.java.html │ │ │ ├── login.html │ │ │ └── TableBean.java.html │ │ ├── checkbox │ │ │ ├── check.html │ │ │ ├── checkresult.jsp │ │ │ ├── checkresult.jsp.html │ │ │ ├── CheckTest.html │ │ │ └── cresult.html │ │ ├── colors │ │ │ ├── clr.html │ │ │ ├── ColorGameBean.html │ │ │ ├── colors.html │ │ │ ├── colrs.jsp │ │ │ └── colrs.jsp.html │ │ ├── dates │ │ │ ├── date.html │ │ │ ├── date.jsp │ │ │ └── date.jsp.html │ │ ├── error │ │ │ ├── er.html │ │ │ ├── err.jsp │ │ │ ├── err.jsp.html │ │ │ ├── error.html │ │ │ ├── errorpge.jsp │ │ │ └── errorpge.jsp.html │ │ ├── forward │ │ │ ├── forward.jsp │ │ │ ├── forward.jsp.html │ │ │ ├── fwd.html │ │ │ ├── one.jsp │ │ │ ├── one.jsp.html │ │ │ └── two.html │ │ ├── images │ │ │ ├── code.gif │ │ │ ├── execute.gif │ │ │ └── return.gif │ │ ├── include │ │ │ ├── foo.html │ │ │ ├── foo.jsp │ │ │ ├── foo.jsp.html │ │ │ ├── inc.html │ │ │ ├── include.jsp │ │ │ └── include.jsp.html │ │ ├── index.html │ │ ├── jsp2 │ │ │ ├── el │ │ │ │ ├── basic-arithmetic.html │ │ │ │ ├── basic-arithmetic.jsp │ │ │ │ ├── basic-arithmetic.jsp.html │ │ │ │ ├── basic-comparisons.html │ │ │ │ ├── basic-comparisons.jsp │ │ │ │ ├── basic-comparisons.jsp.html │ │ │ │ ├── composite.html │ │ │ │ ├── composite.jsp │ │ │ │ ├── composite.jsp.html │ │ │ │ ├── functions.html │ │ │ │ ├── Functions.java.html │ │ │ │ ├── functions.jsp │ │ │ │ ├── functions.jsp.html │ │ │ │ ├── implicit-objects.html │ │ │ │ ├── implicit-objects.jsp │ │ │ │ ├── implicit-objects.jsp.html │ │ │ │ ├── ValuesBean.java.html │ │ │ │ └── ValuesTag.java.html │ │ │ ├── jspattribute │ │ │ │ ├── FooBean.java.html │ │ │ │ ├── HelloWorldSimpleTag.java.html │ │ │ │ ├── jspattribute.html │ │ │ │ ├── jspattribute.jsp │ │ │ │ ├── jspattribute.jsp.html │ │ │ │ ├── shuffle.html │ │ │ │ ├── shuffle.jsp │ │ │ │ ├── shuffle.jsp.html │ │ │ │ ├── ShuffleSimpleTag.java.html │ │ │ │ └── TileSimpleTag.java.html │ │ │ ├── jspx │ │ │ │ ├── basic.html │ │ │ │ ├── basic.jspx │ │ │ │ ├── basic.jspx.html │ │ │ │ ├── svgexample.html │ │ │ │ ├── textRotate.html │ │ │ │ ├── textRotate.jpg │ │ │ │ ├── textRotate.jspx │ │ │ │ └── textRotate.jspx.html │ │ │ ├── misc │ │ │ │ ├── coda.jspf │ │ │ │ ├── coda.jspf.html │ │ │ │ ├── config.html │ │ │ │ ├── config.jsp │ │ │ │ ├── config.jsp.html │ │ │ │ ├── dynamicattrs.html │ │ │ │ ├── dynamicattrs.jsp │ │ │ │ ├── dynamicattrs.jsp.html │ │ │ │ ├── EchoAttributesTag.java.html │ │ │ │ ├── prelude.jspf │ │ │ │ └── prelude.jspf.html │ │ │ ├── simpletag │ │ │ │ ├── BookBean.java.html │ │ │ │ ├── book.html │ │ │ │ ├── book.jsp │ │ │ │ ├── book.jsp.html │ │ │ │ ├── FindBookSimpleTag.java.html │ │ │ │ ├── Functions.java.html │ │ │ │ ├── hello.html │ │ │ │ ├── hello.jsp │ │ │ │ ├── hello.jsp.html │ │ │ │ ├── HelloWorldSimpleTag.java.html │ │ │ │ ├── repeat.html │ │ │ │ ├── repeat.jsp │ │ │ │ ├── repeat.jsp.html │ │ │ │ └── RepeatSimpleTag.java.html │ │ │ └── tagfiles │ │ │ ├── displayProducts.tag.html │ │ │ ├── hello.html │ │ │ ├── hello.jsp │ │ │ ├── hello.jsp.html │ │ │ ├── helloWorld.tag.html │ │ │ ├── panel.html │ │ │ ├── panel.jsp │ │ │ ├── panel.jsp.html │ │ │ ├── panel.tag.html │ │ │ ├── products.html │ │ │ ├── products.jsp │ │ │ └── products.jsp.html │ │ ├── jsptoserv │ │ │ ├── hello.jsp │ │ │ ├── hello.jsp.html │ │ │ ├── jsptoservlet.jsp │ │ │ ├── jsptoservlet.jsp.html │ │ │ ├── jts.html │ │ │ └── ServletToJsp.java.html │ │ ├── num │ │ │ ├── numguess.html │ │ │ ├── numguess.jsp │ │ │ └── numguess.jsp.html │ │ ├── security │ │ │ └── protected │ │ │ ├── error.jsp │ │ │ ├── error.jsp.html │ │ │ ├── index.jsp │ │ │ ├── index.jsp.html │ │ │ ├── login.jsp │ │ │ └── login.jsp.html │ │ ├── sessions │ │ │ ├── carts.html │ │ │ ├── carts.jsp │ │ │ ├── carts.jsp.html │ │ │ ├── crt.html │ │ │ └── DummyCart.html │ │ ├── simpletag │ │ │ ├── foo.html │ │ │ ├── foo.jsp │ │ │ └── foo.jsp.html │ │ ├── snp │ │ │ ├── snoop.html │ │ │ ├── snoop.jsp │ │ │ └── snoop.jsp.html │ │ ├── tagplugin │ │ │ ├── choose.html │ │ │ ├── choose.jsp │ │ │ ├── choose.jsp.html │ │ │ ├── foreach.html │ │ │ ├── foreach.jsp │ │ │ ├── foreach.jsp.html │ │ │ ├── howto.html │ │ │ ├── if.html │ │ │ ├── if.jsp │ │ │ ├── if.jsp.html │ │ │ └── notes.html │ │ └── xml │ │ ├── xml.html │ │ ├── xml.jsp │ │ └── xml.jsp.html │ ├── META-INF │ │ └── context.xml │ ├── servlets │ │ ├── cookies.html │ │ ├── helloworld.html │ │ ├── images │ │ │ ├── code.gif │ │ │ ├── execute.gif │ │ │ └── return.gif │ │ ├── index.html │ │ ├── nonblocking │ │ │ └── bytecounter.html │ │ ├── reqheaders.html │ │ ├── reqinfo.html │ │ ├── reqparams.html │ │ └── sessions.html │ ├── WEB-INF │ │ ├── classes │ │ │ ├── async │ │ │ │ ├── Async0$1.class │ │ │ │ ├── Async0.class │ │ │ │ ├── Async0.java │ │ │ │ ├── Async1$1.class │ │ │ │ ├── Async1.class │ │ │ │ ├── Async1.java │ │ │ │ ├── Async2$1.class │ │ │ │ ├── Async2.class │ │ │ │ ├── Async2.java │ │ │ │ ├── Async3.class │ │ │ │ ├── Async3.java │ │ │ │ ├── AsyncStockContextListener.class │ │ │ │ ├── AsyncStockContextListener.java │ │ │ │ ├── AsyncStockServlet.class │ │ │ │ ├── AsyncStockServlet.java │ │ │ │ ├── Stockticker$Stock.class │ │ │ │ ├── Stockticker$TickListener.class │ │ │ │ ├── Stockticker.class │ │ │ │ └── Stockticker.java │ │ │ ├── cal │ │ │ │ ├── Entries.class │ │ │ │ ├── Entries.java │ │ │ │ ├── Entry.class │ │ │ │ ├── Entry.java │ │ │ │ ├── JspCalendar.class │ │ │ │ ├── JspCalendar.java │ │ │ │ ├── TableBean.class │ │ │ │ └── TableBean.java │ │ │ ├── checkbox │ │ │ │ ├── CheckTest.class │ │ │ │ └── CheckTest.java │ │ │ ├── colors │ │ │ │ ├── ColorGameBean.class │ │ │ │ └── ColorGameBean.java │ │ │ ├── compressionFilters │ │ │ │ ├── CompressionFilter.class │ │ │ │ ├── CompressionFilter.java │ │ │ │ ├── CompressionFilterTestServlet.class │ │ │ │ ├── CompressionFilterTestServlet.java │ │ │ │ ├── CompressionResponseStream.class │ │ │ │ ├── CompressionResponseStream.java │ │ │ │ ├── CompressionServletResponseWrapper.class │ │ │ │ └── CompressionServletResponseWrapper.java │ │ │ ├── CookieExample.class │ │ │ ├── CookieExample.java │ │ │ ├── dates │ │ │ │ ├── JspCalendar.class │ │ │ │ └── JspCalendar.java │ │ │ ├── error │ │ │ │ ├── Smart.class │ │ │ │ └── Smart.java │ │ │ ├── examples │ │ │ │ ├── ExampleTagBase.class │ │ │ │ ├── ExampleTagBase.java │ │ │ │ ├── FooTag.class │ │ │ │ ├── FooTagExtraInfo.class │ │ │ │ ├── FooTagExtraInfo.java │ │ │ │ ├── FooTag.java │ │ │ │ ├── LogTag.class │ │ │ │ ├── LogTag.java │ │ │ │ ├── ValuesTag.class │ │ │ │ └── ValuesTag.java │ │ │ ├── filters │ │ │ │ ├── ExampleFilter.class │ │ │ │ └── ExampleFilter.java │ │ │ ├── HelloWorldExample.class │ │ │ ├── HelloWorldExample.java │ │ │ ├── http2 │ │ │ │ ├── SimpleImagePush.class │ │ │ │ └── SimpleImagePush.java │ │ │ ├── jsp2 │ │ │ │ └── examples │ │ │ │ ├── BookBean.class │ │ │ │ ├── BookBean.java │ │ │ │ ├── el │ │ │ │ │ ├── Functions.class │ │ │ │ │ └── Functions.java │ │ │ │ ├── FooBean.class │ │ │ │ ├── FooBean.java │ │ │ │ ├── simpletag │ │ │ │ │ ├── EchoAttributesTag.class │ │ │ │ │ ├── EchoAttributesTag.java │ │ │ │ │ ├── FindBookSimpleTag.class │ │ │ │ │ ├── FindBookSimpleTag.java │ │ │ │ │ ├── HelloWorldSimpleTag.class │ │ │ │ │ ├── HelloWorldSimpleTag.java │ │ │ │ │ ├── RepeatSimpleTag.class │ │ │ │ │ ├── RepeatSimpleTag.java │ │ │ │ │ ├── ShuffleSimpleTag.class │ │ │ │ │ ├── ShuffleSimpleTag.java │ │ │ │ │ ├── TileSimpleTag.class │ │ │ │ │ └── TileSimpleTag.java │ │ │ │ ├── ValuesBean.class │ │ │ │ └── ValuesBean.java │ │ │ ├── listeners │ │ │ │ ├── ContextListener.class │ │ │ │ ├── ContextListener.java │ │ │ │ ├── SessionListener.class │ │ │ │ └── SessionListener.java │ │ │ ├── LocalStrings_cs.properties │ │ │ ├── LocalStrings_de.properties │ │ │ ├── LocalStrings_es.properties │ │ │ ├── LocalStrings_fr.properties │ │ │ ├── LocalStrings_ja.properties │ │ │ ├── LocalStrings_ko.properties │ │ │ ├── LocalStrings.properties │ │ │ ├── LocalStrings_pt_BR.properties │ │ │ ├── LocalStrings_pt.properties │ │ │ ├── LocalStrings_ru.properties │ │ │ ├── LocalStrings_zh_CN.properties │ │ │ ├── nonblocking │ │ │ │ ├── ByteCounter$1.class │ │ │ │ ├── ByteCounter$CounterListener.class │ │ │ │ ├── ByteCounter.class │ │ │ │ ├── ByteCounter.java │ │ │ │ ├── NumberWriter$1.class │ │ │ │ ├── NumberWriter$NumberWriterListener.class │ │ │ │ ├── NumberWriter.class │ │ │ │ └── NumberWriter.java │ │ │ ├── num │ │ │ │ ├── NumberGuessBean.class │ │ │ │ └── NumberGuessBean.java │ │ │ ├── RequestHeaderExample.class │ │ │ ├── RequestHeaderExample.java │ │ │ ├── RequestInfoExample.class │ │ │ ├── RequestInfoExample.java │ │ │ ├── RequestParamExample.class │ │ │ ├── RequestParamExample.java │ │ │ ├── ServletToJsp.class │ │ │ ├── ServletToJsp.java │ │ │ ├── SessionExample.class │ │ │ ├── SessionExample.java │ │ │ ├── sessions │ │ │ │ ├── DummyCart.class │ │ │ │ └── DummyCart.java │ │ │ ├── trailers │ │ │ │ ├── ResponseTrailers$1.class │ │ │ │ ├── ResponseTrailers$TrailerFieldSupplier.class │ │ │ │ ├── ResponseTrailers.class │ │ │ │ └── ResponseTrailers.java │ │ │ ├── util │ │ │ │ ├── CookieFilter.class │ │ │ │ ├── CookieFilter.java │ │ │ │ ├── HTMLFilter.class │ │ │ │ └── HTMLFilter.java │ │ │ ├── validators │ │ │ │ ├── DebugValidator.class │ │ │ │ └── DebugValidator.java │ │ │ └── websocket │ │ │ ├── chat │ │ │ │ ├── ChatAnnotation.class │ │ │ │ └── ChatAnnotation.java │ │ │ ├── drawboard │ │ │ │ ├── Client$1.class │ │ │ │ ├── Client.class │ │ │ │ ├── Client.java │ │ │ │ ├── DrawboardContextListener.class │ │ │ │ ├── DrawboardContextListener.java │ │ │ │ ├── DrawboardEndpoint$1.class │ │ │ │ ├── DrawboardEndpoint$2.class │ │ │ │ ├── DrawboardEndpoint$3$1.class │ │ │ │ ├── DrawboardEndpoint$3.class │ │ │ │ ├── DrawboardEndpoint.class │ │ │ │ ├── DrawboardEndpoint.java │ │ │ │ ├── DrawMessage$ParseException.class │ │ │ │ ├── DrawMessage.class │ │ │ │ ├── DrawMessage.java │ │ │ │ ├── Room$1$1.class │ │ │ │ ├── Room$1.class │ │ │ │ ├── Room$2.class │ │ │ │ ├── Room$MessageType.class │ │ │ │ ├── Room$Player.class │ │ │ │ ├── Room.class │ │ │ │ ├── Room.java │ │ │ │ └── wsmessages │ │ │ │ ├── AbstractWebsocketMessage.class │ │ │ │ ├── AbstractWebsocketMessage.java │ │ │ │ ├── BinaryWebsocketMessage.class │ │ │ │ ├── BinaryWebsocketMessage.java │ │ │ │ ├── CloseWebsocketMessage.class │ │ │ │ ├── CloseWebsocketMessage.java │ │ │ │ ├── StringWebsocketMessage.class │ │ │ │ └── StringWebsocketMessage.java │ │ │ ├── echo │ │ │ │ ├── EchoAnnotation.class │ │ │ │ ├── EchoAnnotation.java │ │ │ │ ├── EchoAsyncAnnotation$1.class │ │ │ │ ├── EchoAsyncAnnotation$CompletedFuture.class │ │ │ │ ├── EchoAsyncAnnotation.class │ │ │ │ ├── EchoAsyncAnnotation.java │ │ │ │ ├── EchoEndpoint$1.class │ │ │ │ ├── EchoEndpoint$EchoMessageHandlerBinary.class │ │ │ │ ├── EchoEndpoint$EchoMessageHandlerText.class │ │ │ │ ├── EchoEndpoint.class │ │ │ │ ├── EchoEndpoint.java │ │ │ │ ├── EchoStreamAnnotation.class │ │ │ │ ├── EchoStreamAnnotation.java │ │ │ │ └── servers.json │ │ │ ├── ExamplesConfig.class │ │ │ ├── ExamplesConfig.java │ │ │ └── snake │ │ │ ├── Direction.class │ │ │ ├── Direction.java │ │ │ ├── Location$1.class │ │ │ ├── Location.class │ │ │ ├── Location.java │ │ │ ├── SnakeAnnotation.class │ │ │ ├── SnakeAnnotation.java │ │ │ ├── Snake.class │ │ │ ├── Snake.java │ │ │ ├── SnakeTimer$1.class │ │ │ ├── SnakeTimer.class │ │ │ └── SnakeTimer.java │ │ ├── jsp │ │ │ ├── debug-taglib.tld │ │ │ ├── example-taglib.tld │ │ │ └── jsp2-example-taglib.tld │ │ ├── lib │ │ │ ├── taglibs-standard-impl-1.2.5-migrated-0.0.1.jar │ │ │ └── taglibs-standard-spec-1.2.5-migrated-0.0.1.jar │ │ ├── tags │ │ │ ├── displayProducts.tag │ │ │ ├── helloWorld.tag │ │ │ └── panel.tag │ │ └── web.xml │ └── websocket │ ├── chat.xhtml │ ├── drawboard.xhtml │ ├── echo.xhtml │ ├── index.xhtml │ └── snake.xhtml ├── host-manager │ ├── css │ │ └── manager.css │ ├── images │ │ ├── asf-logo.svg │ │ └── tomcat.svg │ ├── index.jsp │ ├── META-INF │ │ └── context.xml │ └── WEB-INF │ ├── jsp │ │ ├── 401.jsp │ │ ├── 403.jsp │ │ └── 404.jsp │ ├── manager.xml │ └── web.xml ├── manager │ ├── css │ │ └── manager.css │ ├── images │ │ ├── asf-logo.svg │ │ └── tomcat.svg │ ├── index.jsp │ ├── META-INF │ │ └── context.xml │ ├── status.xsd │ ├── WEB-INF │ │ ├── jsp │ │ │ ├── 401.jsp │ │ │ ├── 403.jsp │ │ │ ├── 404.jsp │ │ │ ├── connectorCerts.jsp │ │ │ ├── connectorCiphers.jsp │ │ │ ├── connectorTrustedCerts.jsp │ │ │ ├── sessionDetail.jsp │ │ │ └── sessionsList.jsp │ │ └── web.xml │ └── xform.xsl └── ROOT ├── asf-logo-wide.svg ├── bg-button.png ├── bg-middle.png ├── bg-nav.png ├── bg-upper.png ├── favicon.ico ├── index.jsp ├── RELEASE-NOTES.txt ├── tomcat.css ├── tomcat.svg └── WEB-INF └── web.xml 102 directories, 556 files
Le répertoire temp est utilisé comme répertoire temporaire par les applications :
[root@centos8 webapps]# cd ../temp [root@centos8 temp]# tree . ├── safeToDelete.tmp └── tomcat.pid 0 directories, 2 files
Le répertoire work contient de sous-répertoires pour chaque application utilisés pour la transformation des pages JSP en classes Java :
[root@centos8 temp]# cd ../work [root@centos8 work]# tree . └── Catalina └── localhost ├── docs ├── examples ├── host-manager ├── manager └── ROOT └── org └── apache └── jsp ├── index_jsp.class └── index_jsp.java 10 directories, 2 files
Les composants de Tomcat sont appelés des conteneurs. Il en existe 5 :
L'organisation est imbriquée comme montre l'exemple suivant :
Cette organisation est détaillée dans le principal fichier de configuration de Tomcat : $CATALINA_HOME/conf/server.xml.
A l'installation de Tomcat, ce fichier comporte les directives actives suivantes :
[root@centos8 work]# cat $CATALINA_HOME/conf/server.xml <?xml version="1.0" encoding="UTF-8"?> <Server port="8005" shutdown="SHUTDOWN"> <Listener className="org.apache.catalina.startup.VersionLoggerListener" /> <Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" /> <Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener" /> <Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" /> <Listener className="org.apache.catalina.core.ThreadLocalLeakPreventionListener" /> <GlobalNamingResources> <Resource name="UserDatabase" auth="Container" type="org.apache.catalina.UserDatabase" description="User database that can be updated and saved" factory="org.apache.catalina.users.MemoryUserDatabaseFactory" pathname="conf/tomcat-users.xml" /> </GlobalNamingResources> <Service name="Catalina"> <Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" /> <Connector protocol="AJP/1.3" address="127.0.0.1" port="8009" redirectPort="8443" secretRequired="false" /> <Engine name="Catalina" defaultHost="localhost"> <Realm className="org.apache.catalina.realm.LockOutRealm"> <Realm className="org.apache.catalina.realm.UserDatabaseRealm" resourceName="UserDatabase"/> </Realm> <Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true"> <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" prefix="localhost_access_log" suffix=".txt" pattern="%h %l %u %t "%r" %s %b" /> </Host> </Engine> </Service> </Server>
Dans ce fichier, les éléments obligatoires sont démontrés par l'exemple suivant :
<Server ...> <Service ...> <Connector ...> </Connector ...> <Connector ...> </Connector ...> etc <Engine ...> <Host ...> <Context ...> </Context ...> <Context ...> </Context ...> <Context ...> etc </Host ...> etc </Engine ...> </Service ...> <Service ...> <Connector ...> </Connector ...> <Connector ...> </Connector ...> etc <Engine ...> <Host ...> <Context ...> </Context ...> <Context ...> </Context ...> <Context ...> etc </Host ...> etc </Engine ...> </Service ...> etc </Server ...>
D'autres éléments peuvent aussi être employés. L'exemple suivant démontre leur positionnement dans l'organisation du fichier :
<Server ...> <Listener> </Listener> <GlobalNamingResources ...> <Environment ...> </Environment ...> <Resource ...> </Resource ...> </GlobalNamingResources...> <Service ...> <Executor...> </Executor> <Engine ...> <Logger ...> </Logger ...> <Realm ...> </Realm ...> <Valve ...> </Valve ...> <Listener ...> </Listener ...> <Host ...> <Alias> </Alias> <Logger ...> </Logger ...> <Realm ...> </Realm ...> <Valve ...> </Valve ...> <Listener ...> </Listener ...> <Context ...> <Logger ...> </Logger ...> <Realm ...> </Realm ...> <Valve ...> </Valve ...> <Loader ...> </Loader ...> <Manager ...> <Store ...> </Store ...> </Manager ...> <Resource ...> </Resource ...> <ResourceLink ...> </ResourceLink ...> </Context ...> </Host ...> </Engine ...> </Service ...> </Server ...>
Cet élément est la racine du fichier server.xml et comporte deux attributs :
Important : Attention - Afin d'éviter à ce qu'une personne malintentionnée puisse se connecter au port par défaut en utilisant telnet et envoyer la chaîne de caractères par défaut, il est impératif de modifier ses deux valeurs.
Cet élément permet d'associer des <Connector> et des <Executor> à un <Engine>. Le nom de chaque <Service> déclaré doit être unique.
L'attribut obligatoire est name :
Attribut | Description | Valeur par défaut | Valeur recommandée |
---|---|---|---|
name | Spécifie le nom du service | Catalina | A Modifier |
Cet élément permet de mettre en place le transport de requêtes clients vers le moteur de servlet défini par l'élément <Engine> dans le même élément <Service>.
Il existe deux types selon le protocole utilisé :
Les attributs les plus importants de cet élément sont :
Attribut | Description | Valeur par défaut | Valeur recommandée |
---|---|---|---|
port | Spécifie le port d'écoute | 8080/8009 | 8080/8009 |
address | Spécifie une adresse IP d'écoute | - | - |
secure | Spécifie l'utilisation de HTTPS | false | - |
redirectport | Spécifie le port vers lequel les requêtes HTTPS doivent être redirigées. L'attribut se trouve dans un Connector HTTPS. | - | - |
disableUploadTimeout | Spécifie le temps maximum pour l'envoi de fichiers | false | - |
enableLookups | Active la résolution des adresses IP en nom d'hôtes | true | false |
proxyName | Spécifie le nom du proxy éventuel derrière lequel se trouve le serveur Tomcat | - | - |
proxyPort | Spécifie le numéro du port du proxy éventuel derrière lequel se trouve le serveur Tomcat | - | - |
maxThreads | Spécifie le nombre maximum de threads qui peut être créés dans un pool | 200 | 200 |
acceptCount | Spécifie le nombre de requêtes qui sont mises en attente une fois la valeur de maxThreads ait été dépassée. | 100 | 100 |
connectionTimeout | Spécifie le nombre de millisecondes qu'une requête puisse rester dans la file d'attente | 60000 ms | 60000 ms |
executor | Spécifie le nom de l'élément <Executor> dont le <Connector> doit utiliser le pool | - | - |
Pour traiter les requêtes entrantes, les <Connectors> utilisent des threads qui sont des sous-processus dans la machine virtuelle Java. Chaque thread est dédié à une connexion. Quand la connexion est terminée, le thread peut être ré-utilisé. Tomcat utilise un pool de threads pour éviter la création et la destruction inutiles de threads. Si les threads sont inactifs pour une période trop importante, le pool détruit les threads.
Les attributs les plus importants de cet élément sont :
Attribut | Description | Valeur par défaut | Valeur recommandée |
---|---|---|---|
maxThreads | Spécifie le nombre maximum de threads qui peut être créés dans un pool | 200 | 200 |
maxSpareThreads | Spécifie le nombre maximum de threads inactifs qui peut être dans un pool | 50 | 50 |
minSpareThreads | Spécifie le nombre minimum de threads inactifs qui peut être dans un pool | 25 | 25 |
maxIdleTime | Spécifie le nombre de millisecondes du délai d'inactivité d'un thread avant sa déstruction | 60000 ms | 60000 ms |
namePrefix | Spécifie un préfixe de nommage pour chaque thread du pool | - | - |
Cet élément permet de mettre en place le transport de requêtes clients reçues des <Connector> vers les applications concernées.
Les attributs les plus importants de cet élément sont :
Attribut | Description | Valeur par défaut | Valeur recommandée |
---|---|---|---|
name | Spécifie le nom du moteur | Catalina | Catalina |
defaultHost | Spécifie le nom d'hôte par défaut spécifiés par les élements <HOST> | - | - |
jvmRoute | Spécifie les informations de l'affinité de session utilisées lors du clustering | - | - |
Cet élément permet de mettre en place un hôte unique, virtuel ou réel, dans le serveur.
Les attributs les plus importants de cet élément sont :
Attribut | Description | Valeur par défaut | Valeur recommandée |
---|---|---|---|
name | Spécifie le nom d'hôte | localhost | - |
appBase | Spécifie le répertoire de stockage par défaut des applications | $CATALINA_HOME/webapps | $CATALINA_HOME/webapps |
autoDeploy | Spécifie si les applications déposées dans $CATALINA_HOME/webapps sont à déployer automatiquement | true | false |
deployOnStartup | Spécifie si les applications sont déployées automatiquement lors du démarrage du serveur | true | true |
unpackWars | Spécifie si les archives compressées au format .war doivent être décompressées automatiquement | true | true |
deployXML | Spécifie que le déploiement des applications peut être autorisé à partir des fichiers de contexte | true | true |
workDir | Spécifie le répertoire de travail de l'application | - | - |
L'élément <Context> décrit une application déployée dans le serveur. Il existe deux types de <Context> :
Dans le premier des deux cas, la déclaration de l'élément peut se trouver soit dans :
C'est ce deuxième cas qui est le plus souvent utilisé.
Les attributs les plus importants de cet élément sont :
Attribut | Description | Valeur par défaut | Valeur recommandée |
---|---|---|---|
docBase | Spécifie le chemin absolu ou relatif du répertoire des données ou du fichier .war de l'application | - | - |
path | Spécifie le chemin de contexte de l'application | - | - |
reloadable | Active une surveillance des répertoires /WEB-INF/lib et /WEB-INF/classes. Chaque modification apportée au contenu des deux répertoires est automatiquement prise en charge par le serveur | false | false |
useNaming | Active un contexte de nommage JNDI permettant la recherche des ressources | true | true |
swallowOutput | Spécifie que la sortie standard et la sortie d'erreur doivent être consignées dans le fichier journal de l'application | false | true |
workDir | Spécifie le répertoire de travail de l'application en remplaçant la valeur de l'attribut dans l'élément <Host> | - | - |
privileged | Autorise l'application d'utiliser les servlets du moteur Catalina ( p.e. Manager ) | false | false |
cookies | Spécifie que les cookies sont utilisés pour implémenter les sessions HTTP | true | true |
override | Spécifie que les valeurs des attributs du <Context> surchargent celles du <DefaultContext> | false | false |
Le contexte par défaut <DefaultContext> se trouve dans le fichier $CATALINA_HOME/conf/context.xml :
[root@centos8 work]# cat $CATALINA_HOME/conf/context.xml <?xml version="1.0" encoding="UTF-8"?> <!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> <!-- The contents of this file will be loaded for each web application --> <Context> <!-- Default set of monitored resources. If one of these changes, the --> <!-- web application will be reloaded. --> <WatchedResource>WEB-INF/web.xml</WatchedResource> <WatchedResource>WEB-INF/tomcat-web.xml</WatchedResource> <WatchedResource>${catalina.base}/conf/web.xml</WatchedResource> <!-- Uncomment this to enable session persistence across Tomcat restarts --> <!-- <Manager pathname="SESSIONS.ser" /> --> </Context>
Cet élément permet de gérer le système d'authentification. L'élément <Realm> peut être défini dans un des éléments suivants :
A noter qu'il ne peut être défini qu'une seule fois par élément et qu'il existe un héritage de l'élément enfant à partir de l'élément parent.
L'attribut fondamental de l'élément <Realm> est className qui prend une des valeurs suivantes :
Attribut | Valeur | Description |
---|---|---|
className | org.apache.catalina.realm.UserDatabaseRealm | Authentification utilisant le fichier $CATALINA_HOME/conf/tomcat-users.xml |
className | org.apache.catalina.realm.DataSourceRealm | Authentification utilisant une base de données |
className | org.apache.catalina.realm.JNDIRealm | Authentification basée sur un annuaire LDAP |
className | org.apache.catalina.realm.JAASRealm | Authentification basée sur l'API de sécurité Java (JAAS) |
className | org.apache.catalina.realm.CombinedRealm | Authentification basée sur plusieurs Realms définis en tant qu'enfants |
Les classes Java sont chargées dans un ordre spécifique par défaut :
L'élément facultatif <Loader> permet de modifier l'ordre par défaut pour une application donnée en chargeant d'abord les classes recherchées par les chargeurs parents de Tomcat.
Les attributs les plus importants de cet élément sont :
Attribut | Description | Valeur par défaut | Valeur recommandée |
---|---|---|---|
delegate | Permet de modifier l'ordre par défaut | false | false |
reloadable | Active une surveillance des répertoires /WEB-INF/lib et /WEB-INF/classes. Chaque modification apportée au contenu des deux répertoires est automatiquement prise en charge par le serveur | Héritée de <Context> | - |
checkInterval | Intervalle de temps de la vérification de l'attribut reloadable | 15s | 15s |
Cet élément permet de configurer la gestion des sessions.
L'attribut fondamental de l'élément <Manager> est className qui prend une des valeurs suivantes :
Attribut | Valeur | Description |
---|---|---|
className | org.apache.catalina.session.StandardManager | Les sessions sont stockées dans un fichier |
className | org.apache.catalina.session.PersistentManager | Les session sont stockées dans un entrepôt persistant tel une base de données |
Les attributs communs aux deux valeurs de className sont :
Attribut | Description | Valeur par défaut | Valeur recommandée |
---|---|---|---|
maxActiveSessions | Le nombre maximum de sessions actives ( -1 équivaut pas de limite ) | -1 | -1 |
distributable | Spécifie si les attributs de session peuvent être stockés dans un fichier ou une base de données | false | false |
L'attribut spécifique à org.apache.catalina.session.StandardManager est :
Attribut | Description | Valeur par défaut | Valeur recommandée |
---|---|---|---|
pathname | Spécifie un chemin relatif ou absolu vers le fichier de stockage | SESSIONS.ser | SESSIONS.ser |
Les attributs spécifiques à org.apache.catalina.session.PersistentManager sont :
Attribut | Description | Valeur par défaut | Valeur recommandée |
---|---|---|---|
saveOnRestart | Spécifie que les sessions soient sauvegardées quand Tomcat est arrêtée | true | true |
maxIdleBackup | Spécifie l'intervalle de temps en secondes depuis le dernier accès à la session avant qu'elle soit éligible pour être persistée. La valeur de -1 désactive cette fonctionnalité | -1 | -1 |
maxIdleSwap | Spécifie l'intervalle de temps en secondes depuis le dernier accès à la session avant qu'elle soit persistée et supprimée de la mémoire. Cette valeur doit être supérieure ou égale à la valeur de maxIdleBackup. La valeur de -1 désactive cette fonctionnalité | -1 | -1 |
Cet élément est un élément enfant de <Manager>. Il doit être spécifié si la valeur de org.apache.catalina.session.PersistentManager est true.
L'attribut fondamental de l'élément <Store> est className qui prend une des valeurs suivantes :
Attribut | Valeur | Description |
---|---|---|
className | org.apache.catalina.session.FileStore | L'entrepôt persistant est un fichier |
className | org.apache.catalina.session.JDBCStore | L'entrepôt persistant est une base de données |
L'élément <Valve> est à considérer comme un filtre.
L'élément <Valve> peut être défini dans un des éléments suivants :
L'attribut fondamental de l'élément <Valve> est className qui prend une des valeurs suivantes :
Attribut | Valeur | Description |
---|---|---|
className | org.apache.catalina.valves.AccessLogValve | Génère un journal des accès au serveur dans un fichier |
className | org.apache.catalina.valves.ExtendedAccessLogValve | Génère un journal des accès au serveur dans un fichier au format Extended Log File Format du W3C |
className | org.apache.catalina.valves.JDBCAccessLogValve | Génère un journal des accès au serveur dans une base de données |
className | org.apache.catalina.valves.RemoteAddrvalve | Applique une restriction des accès en fonction de l'IP du client |
className | org.apache.catalina.valves.RemoteHostValve | Applique une restriction des accès en fonction du nom de la machine du client |
className | org.apache.catalina.valves.SingleSignOn | Permet une authentification unique entre plusieurs applications |
className | org.apache.catalina.valves.RemoteIPValve | Permet de récupérer l'adresse IP du client même si la requête est passée par un reverse proxy |
Pour clarifier l'utilisation des filtres voici deux exemples :
<Valve ClassName="org.apache.catalina.valves.RemoteAddrvalve" allow="127.0.0.1, 10.*" />
<Valve ClassName="org.apache.catalina.valves.RemoteHostValve" Deny="*.fenestros.com" />
Tomcat propose deux formats ou motifs prédéfinis pour générer des journaux :
Dans les patterns ci-dessus, les significations des chaînes de formatage sont les suivantes :
Chaîne | Description |
---|---|
%h | Le nom d'hôte distant ou l'adresse IP si resolveHosts vaut false |
%u | Le nom du compte de l'utilisateur distant s'il y a eu authentification |
%t | L'heure de la réception de la requête par le serveur |
%r | La première ligne de la requête |
%s | Le statut de la dernière requête |
%b | La taille de la réponse sans les entêtes HTTP. Le caractère - indique 0 |
%{Referer}i | Le nom du site d'où vient lé requête, contenu dans l'entête de la requête HTTP |
%{User-Agent}i | Le nom du navigateur utilisé par le client, contenu dans l'entête de la requête HTTP |
Pour mettre en place la journalisation personnalisée modifiez le fichier $CATALINA_HOME/conf/server.xml en commentant la section suivante :
... <!-- <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" prefix="localhost_access_log" suffix=".txt" pattern="%h %l %u %t "%r" %s %b" /> --> </Host> </Engine> </Service>
et ajoutez la section suivante juste après :
... <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" prefix="tomcat_access." suffix=".txt" resolveHosts="false" fileDateFormat="yyyy_MM_dd" pattern="%t - %a %H %s - %r"/> ...
Vous obtiendrez un résultat similaire au suivant :
... <!-- Access log processes all example. Documentation at: /docs/config/valve.html Note: The pattern used is equivalent to using pattern="common" --> <!--<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" prefix="localhost_access_log" suffix=".txt" pattern="%h %l %u %t "%r" %s %b" /> --> <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" prefix="tomcat_access." suffix=".txt" resolveHosts="false" fileDateFormat="yyyy_MM_dd" pattern="%t - %a %H %s - %r"/> </Host> </Engine> </Service>
Dans cet exemple, on peut noter l'utilisation de plusieurs attributs supplémentaires :
Attribut | Description | Valeur par défaut | Valeur de l'exemple |
---|---|---|---|
directory | Le chemin absolu ou relatif vers le répertoire de sauvegarde des journaux | $CATALINA_HOME/logs | logs |
prefix | Le nom du fichier suivi par un point | access_log. | tomcat_access. |
suffix | L'extension du fichier, précédée par un point | vide | .txt |
resolveHosts | Transforme les adresse IP en nom d'hôte en utilisant un serveur DNS | false | false |
fileDateFormat | Spécifie le format de date utilisé pour nommé le fichier | - | yyyy_MM_dd |
Dans ce cas, le fichier généré sera nommé tomcat_access.yyyy_MM_dd.txt.
Un dernier attribut peut également être présent. Il s'agit de l'attribut rotatable. Dans le cas où cet attribut porte la valeur vrai, les fichiers de journalisation subiront une rotation en fonction du fileDateFormat :
Format de fileDateFormat | Périodicité de la rotation |
---|---|
yyyy_MM_dd | Journalier |
yyyy_MM | Hebdomadaire |
yyyy | Annuelle |
Dernièrement les significations des chaînes de formatage supplémentaires dans l'exemple sont les suivantes :
Chaîne | Description |
---|---|
%a | L'adresse IP distante |
%H | Le protocole utilisé dans la requête |
Redémarrez maintenant le serveur Tomcat :
[root@centos8 work]# systemctl restart tomcat [root@centos8 work]# systemctl status tomcat ● tomcat.service - Apache Tomcat Web Application Container Loaded: loaded (/etc/systemd/system/tomcat.service; disabled; vendor preset: disabled) Active: active (running) since Wed 2023-10-04 08:44:35 EDT; 14s ago Process: 74803 ExecStop=/bin/kill -15 $MAINPID (code=exited, status=0/SUCCESS) Process: 74811 ExecStart=/usr/tomcat10/bin/startup.sh (code=exited, status=0/SUCCESS) Main PID: 74823 (java) Tasks: 50 (limit: 100949) Memory: 346.9M CGroup: /system.slice/tomcat.service └─74823 /usr/lib/jvm/jre-1.8.0-openjdk-1.8.0.312.b07-2.el8_5.x86_64/bin/java -Djava.util.logging.c> Oct 04 08:44:35 centos8.ittraining.loc systemd[1]: Starting Apache Tomcat Web Application Container... Oct 04 08:44:35 centos8.ittraining.loc startup.sh[74811]: Existing PID file found during start. Oct 04 08:44:35 centos8.ittraining.loc startup.sh[74811]: Removing/clearing stale PID file. Oct 04 08:44:35 centos8.ittraining.loc startup.sh[74811]: Tomcat started. Oct 04 08:44:35 centos8.ittraining.loc systemd[1]: Started Apache Tomcat Web Application Container.
Consultez la page web http://www.ittraining.loc/docs/ afin de générer des traces dans le log puis consultez le répertoire /$CATALINA_HOME/logs/ :
[root@centos8 work]# lynx --dump http://www.ittraining.loc/docs/ [1] Tomcat Home [2]The Apache Software Foundation Apache Tomcat 10 Version 10.0.27, Oct 3 2022 Links * [3]Docs Home * [4]FAQ * [5]User Comments ... [root@centos8 work]# ls /$CATALINA_HOME/logs/ catalina.2023-10-03.log localhost.2023-10-03.log tomcat_access.2023_10_04.txt catalina.2023-10-04.log localhost.2023-10-04.log catalina.out localhost_access_log.2023-10-03.txt
Important : Notez la présence d'un fichier dont le nom est au format tomcat_access.yyyy-MM-dd.txt.
Consultez le contenu du fichier tomcat_access.yyyy-MM-dd.txt. Vous obtiendrez un résultat similaire à celui-ci :
[root@centos8 work]# cat /$CATALINA_HOME/logs/tomcat_access.2023_10_04.txt [04/Oct/2023:08:18:17 -0400] - 10.0.3.45 HTTP/1.0 200 - GET /docs/ HTTP/1.0
A Faire : Vérifiez que le résultat est conforme au motif spécifié dans le fichier $CATALINA_HOME/conf/server.xml.
Pour pouvoir utiliser MariaDB pour consigner le journal de connexions, il convient d'abord de créer la base de données tomcat :
[root@centos8 work]# mysql -uroot -p Enter password: Welcome to the MariaDB monitor. Commands end with ; or \g. Your MariaDB connection id is 17 Server version: 10.3.28-MariaDB MariaDB Server Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. MariaDB [(none)]> CREATE DATABASE tomcat; Query OK, 1 row affected (0.000 sec) MariaDB [(none)]> SHOW DATABASES; +--------------------+ | Database | +--------------------+ | information_schema | | mysql | | performance_schema | | tomcat | +--------------------+ 4 rows in set (0.001 sec) MariaDB [(none)]> exit Bye
Créez ensuite le fichier tomcat.sql contenant les lignes suivantes :
USE `tomcat`; CREATE TABLE `tomcat`.`AccessLog` ( `id` INTEGER UNSIGNED NOT NULL AUTO_INCREMENT, `remoteHost` CHAR(15) NOT NULL DEFAULT '', `userName` CHAR(15), `timestamp` TIMESTAMP NOT NULL DEFAULT 0, `virtualHost` VARCHAR(64) NOT NULL DEFAULT '', `method` VARCHAR(8) NOT NULL DEFAULT '', `query` VARCHAR(255) NOT NULL DEFAULT '', `status` INTEGER UNSIGNED NOT NULL DEFAULT 0, `bytes` INTEGER UNSIGNED NOT NULL DEFAULT 0, `referer` VARCHAR(128), `userAgent` VARCHAR(128), PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARACTER SET latin1;
Par exemple :
[root@centos8 work]# vi tomcat.sql [root@centos8 work]# cat tomcat.sql USE tomcat; CREATE TABLE `tomcat`.`AccessLog` ( `id` INTEGER UNSIGNED NOT NULL AUTO_INCREMENT, `remoteHost` CHAR(15) NOT NULL DEFAULT '', `userName` CHAR(15), `timestamp` TIMESTAMP NOT NULL DEFAULT 0, `virtualHost` VARCHAR(64) NOT NULL DEFAULT '', `method` VARCHAR(8) NOT NULL DEFAULT '', `query` VARCHAR(255) NOT NULL DEFAULT '', `status` INTEGER UNSIGNED NOT NULL DEFAULT 0, `bytes` INTEGER UNSIGNED NOT NULL DEFAULT 0, `referer` VARCHAR(128), `userAgent` VARCHAR(128), PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARACTER SET latin1;
Ce fichier contient les commandes SQL nécessaires pour créer la table tomcat dans la base MariaDB tomcat qui recevra les traces. Injectez donc les commandes SQL dans MariaDB :
[root@centos8 work]# mysql -u root -p tomcat < tomcat.sql Enter password:fenestros
Vérifiez ensuite le résultat :
[root@centos8 work]# mysql -u root -p Enter password: Welcome to the MariaDB monitor. Commands end with ; or \g. Your MariaDB connection id is 19 Server version: 10.3.28-MariaDB MariaDB Server Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. MariaDB [(none)]> USE tomcat; Reading table information for completion of table and column names You can turn off this feature to get a quicker startup with -A Database changed MariaDB [tomcat]> SHOW TABLES; +------------------+ | Tables_in_tomcat | +------------------+ | AccessLog | +------------------+ 1 row in set (0.000 sec) MariaDB [tomcat]> DESCRIBE AccessLog; +-------------+------------------+------+-----+---------------------+----------------+ | Field | Type | Null | Key | Default | Extra | +-------------+------------------+------+-----+---------------------+----------------+ | id | int(10) unsigned | NO | PRI | NULL | auto_increment | | remoteHost | char(15) | NO | | | | | userName | char(15) | YES | | NULL | | | timestamp | timestamp | NO | | 0000-00-00 00:00:00 | | | virtualHost | varchar(64) | NO | | | | | method | varchar(8) | NO | | | | | query | varchar(255) | NO | | | | | status | int(10) unsigned | NO | | 0 | | | bytes | int(10) unsigned | NO | | 0 | | | referer | varchar(128) | YES | | NULL | | | userAgent | varchar(128) | YES | | NULL | | +-------------+------------------+------+-----+---------------------+----------------+ 11 rows in set (0.001 sec) MariaDB [tomcat]> exit Bye
Téléchargez maintenant le pilote JDBC pour MySQL :
[root@centos8 work]# wget https://dev.mysql.com/get/Downloads/Connector-J/mysql-connector-j-8.1.0.tar.gz --2023-10-04 08:38:34-- https://dev.mysql.com/get/Downloads/Connector-J/mysql-connector-j-8.1.0.tar.gz Resolving dev.mysql.com (dev.mysql.com)... 23.58.163.162, 2600:140a:a000:3a6::2e31, 2600:140a:a000:3a1::2e31 Connecting to dev.mysql.com (dev.mysql.com)|23.58.163.162|:443... connected. HTTP request sent, awaiting response... 302 Moved Temporarily Location: https://cdn.mysql.com//Downloads/Connector-J/mysql-connector-j-8.1.0.tar.gz [following] --2023-10-04 08:38:34-- https://cdn.mysql.com//Downloads/Connector-J/mysql-connector-j-8.1.0.tar.gz Resolving cdn.mysql.com (cdn.mysql.com)... 184.31.29.212, 2600:140a:a000:385::1d68, 2600:140a:a000:3aa::1d68 Connecting to cdn.mysql.com (cdn.mysql.com)|184.31.29.212|:443... connected. HTTP request sent, awaiting response... 200 OK Length: 4241696 (4.0M) [application/x-tar-gz] Saving to: ‘mysql-connector-j-8.1.0.tar.gz’ mysql-connector-j-8.1.0.tar 100%[=========================================>] 4.04M --.-KB/s in 0.07s 2023-10-04 08:38:34 (57.5 MB/s) - ‘mysql-connector-j-8.1.0.tar.gz’ saved [4241696/4241696]
Décompressez-le
[root@centos8 work]# tar xvf mysql-connector-j-8.1.0.tar.gz ...
Copiez le fichier mysql-connector-j-8.1.0.jar dans le répertoire $CATALINA_HOME/lib :
[root@centos8 work]# cp mysql-connector-j-8.1.0/mysql-connector-j-8.1.0.jar $CATALINA_HOME/lib
Ajoutez maintenant la section suivante au fichier $CATALINA_HOME/conf/server.xml à la place des lignes précédemment ajoutées :
[root@centos7 bin]# vi $CATALINA_HOME/conf/server.xml [root@centos7 bin]# tail -n25 $CATALINA_HOME/conf/server.xml <Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true"> <!-- SingleSignOn valve, share authentication between web applications Documentation at: /docs/config/valve.html --> <!-- <Valve className="org.apache.catalina.authenticator.SingleSignOn" /> --> <!-- Access log processes all example. Documentation at: /docs/config/valve.html Note: The pattern used is equivalent to using pattern="common" --> <!-- <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" prefix="localhost_access_log" suffix=".txt" pattern="%h %l %u %t "%r" %s %b" /> --> <Valve className="org.apache.catalina.valves.JDBCAccessLogValve" connectionURL="jdbc:mysql://localhost:3306/tomcat?user=root&password=fenestros" driverName="com.mysql.jdbc.Driver" tableName="AccessLog" resolveHosts="false" pattern="common" /> </Host> </Engine> </Service> </Server>
Redémarrez le serveur Tomcat :
[root@centos8 work]# systemctl restart tomcat [root@centos8 work]# systemctl status tomcat ● tomcat.service - Apache Tomcat Web Application Container Loaded: loaded (/etc/systemd/system/tomcat.service; disabled; vendor preset: disabled) Active: active (running) since Wed 2023-10-04 08:44:35 EDT; 14s ago Process: 74803 ExecStop=/bin/kill -15 $MAINPID (code=exited, status=0/SUCCESS) Process: 74811 ExecStart=/usr/tomcat10/bin/startup.sh (code=exited, status=0/SUCCESS) Main PID: 74823 (java) Tasks: 50 (limit: 100949) Memory: 346.9M CGroup: /system.slice/tomcat.service └─74823 /usr/lib/jvm/jre-1.8.0-openjdk-1.8.0.312.b07-2.el8_5.x86_64/bin/java -Djava.util.logging.c> Oct 04 08:44:35 centos8.ittraining.loc systemd[1]: Starting Apache Tomcat Web Application Container... Oct 04 08:44:35 centos8.ittraining.loc startup.sh[74811]: Existing PID file found during start. Oct 04 08:44:35 centos8.ittraining.loc startup.sh[74811]: Removing/clearing stale PID file. Oct 04 08:44:35 centos8.ittraining.loc startup.sh[74811]: Tomcat started. Oct 04 08:44:35 centos8.ittraining.loc systemd[1]: Started Apache Tomcat Web Application Container.
Rechargez la page http://www.ittraining.loc/docs/ :
[root@centos8 work]# lynx --dump http://www.ittraining.loc/docs/ [1] Tomcat Home [2]The Apache Software Foundation Apache Tomcat 10 Version 10.0.27, Oct 3 2022 Links * [3]Docs Home * [4]FAQ * [5]User Comments ...
Consultez ensuite le contenu de votre table AccessLog de la base de données tomcat. Vous obtiendrez un résultat similaire à l'exemple qui suit :
root@centos8 work]# mysql -u root -p Enter password: fenestros Welcome to the MariaDB monitor. Commands end with ; or \g. Your MariaDB connection id is 21 Server version: 10.3.28-MariaDB MariaDB Server Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. MariaDB [(none)]> USE tomcat; Reading table information for completion of table and column names You can turn off this feature to get a quicker startup with -A Database changed MariaDB [tomcat]> SELECT * from AccessLog; +----+------------+----------+---------------------+-------------+--------+--------+--------+-------+---------+-----------+ | id | remoteHost | userName | timestamp | virtualHost | method | query | status | bytes | referer | userAgent | +----+------------+----------+---------------------+-------------+--------+--------+--------+-------+---------+-----------+ | 1 | 10.0.3.45 | NULL | 2023-10-04 08:46:26 | | | /docs/ | 200 | 14728 | NULL | NULL | +----+------------+----------+---------------------+-------------+--------+--------+--------+-------+---------+-----------+ 1 row in set (0.000 sec) MariaDB [tomcat]> exit Bye
Cet élément permet de définir des écouteurs d’événements sur les éléments suivants :
Le seul attribut de <Listener> est className qui prend une valeur différente selon les informations à collecter.
Cinq écouteurs par défaut sont détaillés dans le fichier $CATALINA_HOME/conf/server.xml :
<Server port="8005" shutdown="SHUTDOWN"> <Listener className="org.apache.catalina.startup.VersionLoggerListener" /> <Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" /> <Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener" /> <Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" /> <Listener className="org.apache.catalina.core.ThreadLocalLeakPreventionListener" /> <GlobalNamingResources> ...
Ce fichier définit les paramètres de configuration communs à toutes les applications de Tomcat. Les directives actives de ce fichier sont :
?xml version="1.0" encoding="UTF-8"?> <web-app xmlns="https://jakarta.ee/xml/ns/jakartaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="https://jakarta.ee/xml/ns/jakartaee https://jakarta.ee/xml/ns/jakartaee/web-app_5_0.xsd" version="5.0"> <request-character-encoding>UTF-8</request-character-encoding> <response-character-encoding>UTF-8</response-character-encoding> <servlet> <servlet-name>default</servlet-name> <servlet-class>org.apache.catalina.servlets.DefaultServlet</servlet-class> <init-param> <param-name>debug</param-name> <param-value>0</param-value> </init-param> <init-param> <param-name>listings</param-name> <param-value>false</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet> <servlet-name>jsp</servlet-name> <servlet-class>org.apache.jasper.servlet.JspServlet</servlet-class> <init-param> <param-name>fork</param-name> <param-value>false</param-value> </init-param> <init-param> <param-name>xpoweredBy</param-name> <param-value>false</param-value> </init-param> <load-on-startup>3</load-on-startup> </servlet> <servlet-mapping> <servlet-name>default</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>jsp</servlet-name> <url-pattern>*.jsp</url-pattern> <url-pattern>*.jspx</url-pattern> </servlet-mapping> <session-config> <session-timeout>30</session-timeout> </session-config> <mime-mapping> <extension>123</extension> <mime-type>application/vnd.lotus-1-2-3</mime-type> </mime-mapping> <mime-mapping> <extension>3dml</extension> <mime-type>text/vnd.in3d.3dml</mime-type> </mime-mapping> <mime-mapping> <extension>3ds</extension> <mime-type>image/x-3ds</mime-type> </mime-mapping> <mime-mapping> <extension>3g2</extension> <mime-type>video/3gpp2</mime-type> </mime-mapping> <mime-mapping> <extension>3gp</extension> <mime-type>video/3gpp</mime-type> </mime-mapping> <mime-mapping> <extension>7z</extension> <mime-type>application/x-7z-compressed</mime-type> </mime-mapping> ... <mime-mapping> <extension>yin</extension> <mime-type>application/yin+xml</mime-type> </mime-mapping> <mime-mapping> <extension>z</extension> <mime-type>application/x-compress</mime-type> </mime-mapping> <mime-mapping> <extension>z1</extension> <mime-type>application/x-zmachine</mime-type> </mime-mapping> <mime-mapping> <extension>z2</extension> <mime-type>application/x-zmachine</mime-type> </mime-mapping> <mime-mapping> <extension>z3</extension> <mime-type>application/x-zmachine</mime-type> </mime-mapping> <mime-mapping> <extension>z4</extension> <mime-type>application/x-zmachine</mime-type> </mime-mapping> <mime-mapping> <extension>z5</extension> <mime-type>application/x-zmachine</mime-type> </mime-mapping> <mime-mapping> <extension>z6</extension> <mime-type>application/x-zmachine</mime-type> </mime-mapping> <mime-mapping> <extension>z7</extension> <mime-type>application/x-zmachine</mime-type> </mime-mapping> <mime-mapping> <extension>z8</extension> <mime-type>application/x-zmachine</mime-type> </mime-mapping> <mime-mapping> <extension>zaz</extension> <mime-type>application/vnd.zzazz.deck+xml</mime-type> </mime-mapping> <mime-mapping> <extension>zip</extension> <mime-type>application/zip</mime-type> </mime-mapping> <mime-mapping> <extension>zir</extension> <mime-type>application/vnd.zul</mime-type> </mime-mapping> <mime-mapping> <extension>zirz</extension> <mime-type>application/vnd.zul</mime-type> </mime-mapping> <mime-mapping> <extension>zmm</extension> <mime-type>application/vnd.handheld-entertainment+xml</mime-type> </mime-mapping> <welcome-file-list> <welcome-file>index.html</welcome-file> <welcome-file>index.htm</welcome-file> <welcome-file>index.jsp</welcome-file> </welcome-file-list> </web-app>
Dans ce fichier, on peut constater la présence de plusieurs sections :
Ce fichier est utilisé par le mécanisme d'authentification par défaut de Tomcat et contient des entrées de type nom d'utilisateur, mot de passe et rôle :
[root@centos8 work]# cat $CATALINA_HOME/conf/tomcat-users.xml <?xml version="1.0" encoding="UTF-8"?> <!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> <tomcat-users xmlns="http://tomcat.apache.org/xml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://tomcat.apache.org/xml tomcat-users.xsd" version="1.0"> <!-- By default, no user is included in the "manager-gui" role required to operate the "/manager/html" web application. If you wish to use this app, you must define such a user - the username and password are arbitrary. Built-in Tomcat manager roles: - manager-gui - allows access to the HTML GUI and the status pages - manager-script - allows access to the HTTP API and the status pages - manager-jmx - allows access to the JMX proxy and the status pages - manager-status - allows access to the status pages only The users below are wrapped in a comment and are therefore ignored. If you wish to configure one or more of these users for use with the manager web application, do not forget to remove the <!.. ..> that surrounds them. You will also need to set the passwords to something appropriate. --> <!-- <user username="admin" password="<must-be-changed>" roles="manager-gui"/> <user username="robot" password="<must-be-changed>" roles="manager-script"/> --> <!-- The sample user and role entries below are intended for use with the examples web application. They are wrapped in a comment and thus are ignored when reading this file. If you wish to configure these users for use with the examples web application, do not forget to remove the <!.. ..> that surrounds them. You will also need to set the passwords to something appropriate. --> <!-- <role rolename="tomcat"/> <role rolename="role1"/> <user username="tomcat" password="<must-be-changed>" roles="tomcat"/> <user username="both" password="<must-be-changed>" roles="tomcat,role1"/> <user username="role1" password="<must-be-changed>" roles="role1"/> --> </tomcat-users>
Depuis la version 7 de Tomcat, l'application manager a un des rôles suivants :
Afin donc de pouvoir utiliser l'application manager en mode texte, remplacez le contenu du fichier $CATALINA_HOME/conf/tomcat-users.xml avec le contenu suivant :
[root@centos8 work]# vi $CATALINA_HOME/conf/tomcat-users.xml [root@centos8 work]# cat $CATALINA_HOME/conf/tomcat-users.xml <?xml version='1.0' encoding='utf-8'?> <tomcat-users xmlns="http://tomcat.apache.org/xml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://tomcat.apache.org/xml tomcat-users.xsd" version="1.0"> <role rolename="tomcat"/> <role rolename="role1"/> <role rolename="manager-script"/> <user username="tomcat" password="tomcat" roles="tomcat"/> <user username="both" password="tomcat" roles="tomcat,role1"/> <user username="role1" password="tomcat" roles="role1"/> <user username="admin" password="fenestros" roles="manager-script"/> </tomcat-users>
Arrêtez puis démarrez le serveur Tomcat :
[root@centos8 work]# systemctl restart tomcat [root@centos8 work]# systemctl status tomcat ● tomcat.service - Apache Tomcat Web Application Container Loaded: loaded (/etc/systemd/system/tomcat.service; disabled; vendor preset: disabled) Active: active (running) since Wed 2023-10-04 09:08:43 EDT; 12s ago Process: 75122 ExecStop=/bin/kill -15 $MAINPID (code=exited, status=0/SUCCESS) Process: 75130 ExecStart=/usr/tomcat10/bin/startup.sh (code=exited, status=0/SUCCESS) Main PID: 75142 (java) Tasks: 50 (limit: 100949) Memory: 303.2M CGroup: /system.slice/tomcat.service └─75142 /usr/lib/jvm/jre-1.8.0-openjdk-1.8.0.312.b07-2.el8_5.x86_64/bin/java -Djava.util.logging.c> Oct 04 09:08:43 centos8.ittraining.loc systemd[1]: Starting Apache Tomcat Web Application Container... Oct 04 09:08:43 centos8.ittraining.loc startup.sh[75130]: Existing PID file found during start. Oct 04 09:08:43 centos8.ittraining.loc startup.sh[75130]: Removing/clearing stale PID file. Oct 04 09:08:43 centos8.ittraining.loc startup.sh[75130]: Tomcat started. Oct 04 09:08:43 centos8.ittraining.loc systemd[1]: Started Apache Tomcat Web Application Container.
Par défaut, Tomcat est démarré sans Gestionnaire de Sécurité (SecurityManager). Dans ce cas, les applications peuvent faire tout ce qu'elles veulent. Dans le cas où on souhaite démarrer Tomcat en utilisant le Gestionnaire de Sécurité, il convient de lancer Tomcat avec le script startup.sh en stipulant l'argument security. Dans ce cas, tout ce qui n'est pas autorisé dans le fichier catalina.policy est interdit.
[root@centos8 work]# cat $CATALINA_HOME/conf/catalina.policy // Licensed to the Apache Software Foundation (ASF) under one or more // contributor license agreements. See the NOTICE file distributed with // this work for additional information regarding copyright ownership. // The ASF licenses this file to You under the Apache License, Version 2.0 // (the "License"); you may not use this file except in compliance with // the License. You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // ============================================================================ // catalina.policy - Security Policy Permissions for Tomcat // // This file contains a default set of security policies to be enforced (by the // JVM) when Catalina is executed with the "-security" option. In addition // to the permissions granted here, the following additional permissions are // granted to each web application: // // * Read access to the web application's document root directory // * Read, write and delete access to the web application's working directory // ============================================================================ // ========== SYSTEM CODE PERMISSIONS ========================================= // These permissions apply to javac grant codeBase "file:${java.home}/lib/-" { permission java.security.AllPermission; }; // These permissions apply to all shared system extensions grant codeBase "file:${java.home}/jre/lib/ext/-" { permission java.security.AllPermission; }; // These permissions apply to javac when ${java.home} points at $JAVA_HOME/jre grant codeBase "file:${java.home}/../lib/-" { permission java.security.AllPermission; }; // These permissions apply to all shared system extensions when // ${java.home} points at $JAVA_HOME/jre grant codeBase "file:${java.home}/lib/ext/-" { permission java.security.AllPermission; }; // This permission is required when using javac to compile JSPs on Java 9 // onwards //grant codeBase "jrt:/jdk.compiler" { // permission java.security.AllPermission; //}; // ========== CATALINA CODE PERMISSIONS ======================================= // These permissions apply to the daemon code grant codeBase "file:${catalina.home}/bin/commons-daemon.jar" { permission java.security.AllPermission; }; // These permissions apply to the logging API // Note: If tomcat-juli.jar is in ${catalina.base} and not in ${catalina.home}, // update this section accordingly. // grant codeBase "file:${catalina.base}/bin/tomcat-juli.jar" {..} grant codeBase "file:${catalina.home}/bin/tomcat-juli.jar" { permission java.io.FilePermission "${java.home}${file.separator}lib${file.separator}logging.properties", "read"; permission java.io.FilePermission "${catalina.base}${file.separator}conf${file.separator}logging.properties", "read"; permission java.io.FilePermission "${catalina.base}${file.separator}logs", "read, write"; permission java.io.FilePermission "${catalina.base}${file.separator}logs${file.separator}*", "read, write, delete"; permission java.lang.RuntimePermission "shutdownHooks"; permission java.lang.RuntimePermission "getClassLoader"; permission java.lang.RuntimePermission "setContextClassLoader"; permission java.lang.management.ManagementPermission "monitor"; permission java.util.logging.LoggingPermission "control"; permission java.util.PropertyPermission "java.util.logging.config.class", "read"; permission java.util.PropertyPermission "java.util.logging.config.file", "read"; permission java.util.PropertyPermission "org.apache.juli.AsyncMaxRecordCount", "read"; permission java.util.PropertyPermission "org.apache.juli.AsyncOverflowDropType", "read"; permission java.util.PropertyPermission "org.apache.juli.ClassLoaderLogManager.debug", "read"; permission java.util.PropertyPermission "catalina.base", "read"; // Note: To enable per context logging configuration, permit read access to // the appropriate file. Be sure that the logging configuration is // secure before enabling such access. // E.g. for the examples web application (uncomment and unwrap // the following to be on a single line): // permission java.io.FilePermission "${catalina.base}${file.separator} // webapps${file.separator}examples${file.separator}WEB-INF // ${file.separator}classes${file.separator}logging.properties", "read"; }; // These permissions apply to the server startup code grant codeBase "file:${catalina.home}/bin/bootstrap.jar" { permission java.security.AllPermission; }; // These permissions apply to the servlet API classes // and those that are shared across all class loaders // located in the "lib" directory grant codeBase "file:${catalina.home}/lib/-" { permission java.security.AllPermission; }; // If using a per instance lib directory, i.e. ${catalina.base}/lib, // then the following permission will need to be uncommented // grant codeBase "file:${catalina.base}/lib/-" { // permission java.security.AllPermission; // }; // ========== WEB APPLICATION PERMISSIONS ===================================== // These permissions are granted by default to all web applications // In addition, a web application will be given a read FilePermission // for all files and directories in its document root. grant { // Required for JNDI lookup of named JDBC DataSource's and // javamail named MimePart DataSource used to send mail permission java.util.PropertyPermission "java.home", "read"; permission java.util.PropertyPermission "java.naming.*", "read"; permission java.util.PropertyPermission "javax.sql.*", "read"; // OS Specific properties to allow read access permission java.util.PropertyPermission "os.name", "read"; permission java.util.PropertyPermission "os.version", "read"; permission java.util.PropertyPermission "os.arch", "read"; permission java.util.PropertyPermission "file.separator", "read"; permission java.util.PropertyPermission "path.separator", "read"; permission java.util.PropertyPermission "line.separator", "read"; // JVM properties to allow read access permission java.util.PropertyPermission "java.version", "read"; permission java.util.PropertyPermission "java.vendor", "read"; permission java.util.PropertyPermission "java.vendor.url", "read"; permission java.util.PropertyPermission "java.class.version", "read"; permission java.util.PropertyPermission "java.specification.version", "read"; permission java.util.PropertyPermission "java.specification.vendor", "read"; permission java.util.PropertyPermission "java.specification.name", "read"; permission java.util.PropertyPermission "java.vm.specification.version", "read"; permission java.util.PropertyPermission "java.vm.specification.vendor", "read"; permission java.util.PropertyPermission "java.vm.specification.name", "read"; permission java.util.PropertyPermission "java.vm.version", "read"; permission java.util.PropertyPermission "java.vm.vendor", "read"; permission java.util.PropertyPermission "java.vm.name", "read"; // Required for OpenJMX permission java.lang.RuntimePermission "getAttribute"; // Allow read of JAXP compliant XML parser debug permission java.util.PropertyPermission "jaxp.debug", "read"; // All JSPs need to be able to read this package permission java.lang.RuntimePermission "accessClassInPackage.org.apache.tomcat"; // Precompiled JSPs need access to these packages. permission java.lang.RuntimePermission "accessClassInPackage.org.apache.jasper.el"; permission java.lang.RuntimePermission "accessClassInPackage.org.apache.jasper.runtime"; permission java.lang.RuntimePermission "accessClassInPackage.org.apache.jasper.runtime.*"; // Applications using WebSocket need to be able to access these packages permission java.lang.RuntimePermission "accessClassInPackage.org.apache.tomcat.websocket"; permission java.lang.RuntimePermission "accessClassInPackage.org.apache.tomcat.websocket.server"; }; // The Manager application needs access to the following packages to support the // session display functionality. It also requires the custom Tomcat // DeployXmlPermission to enable the use of META-INF/context.xml // These settings support the following configurations: // - default CATALINA_HOME == CATALINA_BASE // - CATALINA_HOME != CATALINA_BASE, per instance Manager in CATALINA_BASE // - CATALINA_HOME != CATALINA_BASE, shared Manager in CATALINA_HOME grant codeBase "file:${catalina.base}/webapps/manager/-" { permission java.lang.RuntimePermission "accessClassInPackage.org.apache.catalina"; permission java.lang.RuntimePermission "accessClassInPackage.org.apache.catalina.ha.session"; permission java.lang.RuntimePermission "accessClassInPackage.org.apache.catalina.manager"; permission java.lang.RuntimePermission "accessClassInPackage.org.apache.catalina.manager.util"; permission java.lang.RuntimePermission "accessClassInPackage.org.apache.catalina.util"; permission org.apache.catalina.security.DeployXmlPermission "manager"; }; grant codeBase "file:${catalina.home}/webapps/manager/-" { permission java.lang.RuntimePermission "accessClassInPackage.org.apache.catalina"; permission java.lang.RuntimePermission "accessClassInPackage.org.apache.catalina.ha.session"; permission java.lang.RuntimePermission "accessClassInPackage.org.apache.catalina.manager"; permission java.lang.RuntimePermission "accessClassInPackage.org.apache.catalina.manager.util"; permission java.lang.RuntimePermission "accessClassInPackage.org.apache.catalina.util"; permission org.apache.catalina.security.DeployXmlPermission "manager"; }; // The Host Manager application needs the custom Tomcat DeployXmlPermission to // enable the use of META-INF/context.xml // These settings support the following configurations: // - default CATALINA_HOME == CATALINA_BASE // - CATALINA_HOME != CATALINA_BASE, per instance Host Manager in CATALINA_BASE // - CATALINA_HOME != CATALINA_BASE, shared Host Manager in CATALINA_HOME grant codeBase "file:${catalina.base}/webapps/host-manager/-" { permission org.apache.catalina.security.DeployXmlPermission "host-manager"; }; grant codeBase "file:${catalina.home}/webapps/host-manager/-" { permission org.apache.catalina.security.DeployXmlPermission "host-manager"; }; // You can assign additional permissions to particular web applications by // adding additional "grant" entries here, based on the code base for that // application, /WEB-INF/classes/, or /WEB-INF/lib/ jar files. // // Different permissions can be granted to JSP pages, classes loaded from // the /WEB-INF/classes/ directory, all jar files in the /WEB-INF/lib/ // directory, or even to individual jar files in the /WEB-INF/lib/ directory. // // For instance, assume that the standard "examples" application // included a JDBC driver that needed to establish a network connection to the // corresponding database and used the scrape taglib to get the weather from // the NOAA web server. You might create a "grant" entries like this: // // The permissions granted to the context root directory apply to JSP pages. // grant codeBase "file:${catalina.base}/webapps/examples/-" { // permission java.net.SocketPermission "dbhost.mycompany.com:5432", "connect"; // permission java.net.SocketPermission "*.noaa.gov:80", "connect"; // }; // // The permissions granted to the context WEB-INF/classes directory // grant codeBase "file:${catalina.base}/webapps/examples/WEB-INF/classes/-" { // }; // // The permission granted to your JDBC driver // grant codeBase "jar:file:${catalina.base}/webapps/examples/WEB-INF/lib/driver.jar!/-" { // permission java.net.SocketPermission "dbhost.mycompany.com:5432", "connect"; // }; // The permission granted to the scrape taglib // grant codeBase "jar:file:${catalina.base}/webapps/examples/WEB-INF/lib/scrape.jar!/-" { // permission java.net.SocketPermission "*.noaa.gov:80", "connect"; // }; // To grant permissions for web applications using packed WAR files, use the // Tomcat specific WAR url scheme. // // The permissions granted to the entire web application // grant codeBase "war:file:${catalina.base}/webapps/examples.war*/-" { // }; // // The permissions granted to a specific JAR // grant codeBase "war:file:${catalina.base}/webapps/examples.war*/WEB-INF/lib/foo.jar" {
Les ressources disponibles à Tomcat sont configurées en leur donnant un nom JNDI. L'API JNDI est un service de nommage sous forme d'une arborescence de ressources.
Une ressource peut être déclarée à trois endroits différents. Selon cet endroit, sa portée est différente :
Une ressource est déclarée avec l'élément <Resource>. Elle :
Les attributs de <Resource> sont :
Attribut | Description | Valeur par défaut | Valeur recommandée |
---|---|---|---|
name | Spécifie le nom JNDI | - | - |
type | Spécifie le type de données java de la ressource | - | - |
description | Une description de la ressource | - | - |
auth | Le type d'authentification à la ressource | - | - |
L'attribut auth peut avoir plusieurs valeurs différentes en fonction de l'emplacement de la configuration de l'authentification :
L'exemple suivant, issu du fichier server.xml démontre la syntaxe :
<GlobalNamingResources> <Resource name="UserDatabase" auth="Container" type="org.apache.catalina.UserDatabase" description="User database that can be updated and saved" factory="org.apache.catalina.users.MemoryUserDatabaseFactory" pathname="conf/tomcat-users.xml" /> </GlobalNamingResources>
Pour augmenter le temps de réponse aux requêtes multiples de connexions JDBC, JEE utilise un système de pool de connexions.
Un pool de connexion est :
JavaMail :
Pour activer JavaMail, il convient de copier les fichiers mail.jar et activation.jar dans le répertoire $CATALINA_HOME/lib.
Un JavaBean :
Le <Factory> par défaut est org.apache.naming.factory.BeanFactory.
Une Entrée d'environnement est à considérer comme une variable. Une Entrée d'environnement se déclare par un élément <Environment> au même niveau que <Resource> et contient un élément <type> qui peut être :
Copyright © 2023 Hugh Norris.