[JAVA] Avec Tomcat, vous pouvez utiliser des espaces réservés ($ {...}) dans web.xml.

J'utilise Tomcat depuis de nombreuses années et (pour la première fois) j'ai appris que les espaces réservés ($ {...}) peuvent être utilisés dans web.xml. (Je savais qu'il pouvait être utilisé avec des fichiers de configuration spécifiques à Tomcat (server.xml et context.xml) ...)

Important:

** Juste au cas où ... Les espaces réservés ne sont pas une spécification de l'API Servlet, alors ne vous méprenez pas! !! ** **

Essayez d'utiliser des espaces réservés pour le moment

Ici, placez le délai d'expiration de la session comme espace réservé et essayez d'obtenir la valeur réelle à partir des propriétés système.

web.xml


<session-config>
    <session-timeout>${session.timeout}</session-timeout>
    <!-- ... -->
</session-config>

Si vous spécifiez " -Dsession.timeout = 1 "comme argument VM lors du démarrage de Tomcat, le délai d'expiration de la session sera de 1 minute.

Mais ... vous ne pouvez pas spécifier la valeur par défaut

Dans l'implémentation par défaut fournie par Tomcat, la valeur par défaut (la valeur à appliquer lorsque la propriété n'est pas définie ne peut pas être spécifiée dans l'espace réservé. (Par exemple, dans la fonction d'espace réservé fournie par Spring Framework, "$ {property name ". : La valeur par défaut}" peut être exprimée) Par conséquent, lorsque vous utilisez la fonction d'espace réservé fournie par Tomcat, ne définissez pas la propriété correspondante dans " $ CATALINA_BASE / conf / catalina.properties "ou" propriété système (-D nom de propriété = valeur de propriété)". Cela ne fonctionne pas comme prévu.

Dans un tel cas ... Personnaliser l'implémentation par défaut de Tomcat?

Si vous spécifiez " -Dorg.apache.tomcat.util.digester.PROPERTY_SOURCE = org.apache.tomcat.util.IntrospectionUtils.PropertySource interface implementation class`" comme argument VM lors du démarrage de Tomcat, la classe spécifiée est la classe par défaut de Tomcat. Il est utilisé de préférence à l'implémentation.

Essai ... Créez une classe qui active l'expression "$ {nom de la propriété: valeur par défaut}" prise en charge par la fonction d'espace réservé fournie par Spring Framework et appliquez-la à Tomcat. Je vais. (** L'implémentation est assez approximative alors ne la copiez pas w **)

pom.xml


<!--Organisation de projets de développement.apache.tomcat.util.IntrospectionUtils.Artefact ajouté contenant PropertySource-->
<dependency>
    <groupId>org.apache.tomcat.embed</groupId>
    <artifactId>tomcat-embed-core</artifactId>
    <version>8.5.20</version>
    <scope>provided</scope>
</dependency>

IntrospectionUtils.Classe d'implémentation PropertySource


package com.example.tomcat.propertysource;

import org.apache.tomcat.util.IntrospectionUtils;

public class CustomTomcatPropertySource implements IntrospectionUtils.PropertySource {
    @Override
    public String getProperty(String key) {
        String[] keyElements = key.split(":");
        if (keyElements.length == 2) {
            return System.getProperty(keyElements[0].trim(), keyElements[1].trim());
        }
        return null; //Si null est renvoyé, l'implémentation par défaut de Tomcat sera utilisée
    }

}

ʻOrg.apache.tomcat.util.IntrospectionUtils.PropertySource Stockez le fichier jar contenant la classe d'implémentation de l'interface dans le répertoire " $ CATALINA_BASE / lib", et définissez l'argument VM lors du démarrage de Tomcat sur"-Dorg.apache. Spécifiez "tomcat.util.digester.PROPERTY_SOURCE = com.example.tomcat.propertysource.CustomTomcatPropertySource`".

web.xml


<session-config>
    <session-timeout>${session.timeout:1}</session-timeout>
    <!-- ... -->
</session-config>

Cela vous permettra de spécifier des valeurs par défaut pour les espaces réservés sur Tomcat.

C'est une violation de schéma pour web.xml w

Je l'ai présenté jusqu'à présent, mais ... <session-timeout> est un type Integer sur le XSD de web.xml, donc une erreur de violation de schéma se produira sur l'EDI, donc c'est assez subtil. Droite.

Résumé

(Après tout w) Fondamentalement, il semble bon de ne pas gérer les espaces réservés (valeurs dépendant de l'environnement) sur web.xml. Même s'il est utilisé (temporairement), il n'est pas bon de l'utiliser d'une manière qui viole le schéma, donc je pense qu'il est préférable de l'utiliser uniquement avec les valeurs de paramètres du système ʻinit-param`.

Site de référence

Recommended Posts

Avec Tomcat, vous pouvez utiliser des espaces réservés ($ {...}) dans web.xml.
Dans Redmine, vous pouvez obtenir le projet avec Project.find (<identifier>)
Utiliser le constructeur avec des arguments dans cucumber-picocontainer
Utilisez-vous Stream en Java?
Jusqu'à ce que vous puissiez utiliser la base de données H2 en mode serveur avec Dropwizard en utilisant Eclipse et vous connecter avec DB Viewer.
Soyez prudent avec la mise à niveau si vous utilisez | etc. dans l'URL Tomcat
Utilisez JDBC Manager avec les paramètres de jdbc.dicon.
[Bonne nouvelle] Vous pouvez toujours utiliser Java 8 !!
Vous utilisez le contexte pour utiliser MDC avec Spring WebFlux
[Swift] Utilisez nonzeroBitCount lorsque vous voulez popcnt dans Swift
[JAVA] [Spring] [MyBatis] Utiliser IN () avec SQL Builder
Vous pouvez éliminer @Param avec Kotlin 1.1 et MyBatis 3.4.1+! !!
Code à utiliser lorsque vous souhaitez traiter Json en Java avec uniquement des bibliothèques standard
Comment basculer Tomcat context.xml avec Eclipse WTP
Comment utiliser la bibliothèque Z3 dans Scala avec Eclipse
Vous pouvez le faire avec une copie! Programmation orientée aspect (Android)
Jouez avec les nœuds de fonction Java qui peuvent utiliser Java avec Node-RED
Si vous souhaitez utiliser Mockito avec Kotlin, utilisez mockito-kotlin
Jusqu'à ce que vous commenciez à développer avec Spring Boot dans eclipse 1
Comment utiliser la bibliothèque JDD dans Scala avec Eclipse
Jusqu'à ce que vous commenciez à développer avec Spring Boot dans eclipse 2