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! !! ** **
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.
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.
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.
web.xml
wJe 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.
(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`.
Recommended Posts