Definizione dei parametri di contesto del servlet Tomcat
-
06-07-2019 - |
Domanda
Scenario:
Il file foo.war contiene un valore predefinito del parametro init fooParam=1.
Questo è definito in foo.war!WEB_INF/web.xml
che contiene:
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE web-app
PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd">
<web-app>
<context-param>
<param-name>fooParam</param-name>
<param-value>1</param-value>
<description>
my parameter "fooParam"
</description>
</context-param>
...
OK, ora voglio poterlo sovrascrivere in un file di configurazione nella directory Tomcat {$CATALINA_HOME}/conf/.Dove/come posso farlo???
Soluzione
Secondo la documentazione del Contesto elemento:
Parametri di contesto
È possibile configurare valori denominati che saranno resi visibili all'applicazione Web come parametri di inizializzazione del contesto servlet mediante nidificazione
<Parameter>
elementi all'interno di questo elemento.Ad esempio, è possibile creare un parametro di inizializzazione come questo:<Context ...> ... <Parameter name="companyName" value="My Company, Incorporated" override="false"/> ... </Context>
Ciò equivale all'inclusione del seguente elemento nel descrittore di distribuzione dell'applicazione Web (
/WEB-INF/web.xml
):<context-param> <param-name>companyName</param-name> <param-value>My Company, Incorporated</param-value> </context-param>
ma non richiede la modifica del descrittore di distribuzione per personalizzare questo valore.
Gli attributi validi per a
<Parameter>
elemento sono i seguenti:...
Riguardo a override
attributo di a <Parameter>
, la documentazione dice:
Impostalo su
false
se non vuoi un<context-param>
per lo stesso nome di parametro, trovato nel descrittore di distribuzione dell'applicazione Web, per sovrascrivere il valore specificato qui.Per impostazione predefinita, sono consentite le sostituzioni.
Impostarlo su false dovrebbe risolvere il problema.Questa era la parte del "come".
Per la parte "dove", leggere fare riferimento all'introduzione di Il contenitore del contesto:
Per Tomcat 6, a differenza di Tomcat 4.x, NON è consigliabile posizionare
<Context>
elementi direttamente nelserver.xml
file. Questo perché rende la modifica della configurazione del contesto più invasiva rispetto al file mainconf/server.xml
il file non può essere ricaricato senza riavviare Tomcat.Contesto gli elementi possono essere definiti esplicitamente:
- Nel
$CATALINA_BASE/conf/context.xml
file:le informazioni sull'elemento Contesto verranno caricate da tutte le webapp.- Nel
$CATALINA_BASE/conf/[enginename]/[hostname]/context.xml.default
file:le informazioni sull'elemento Context verranno caricate da tutte le webapp di quell'host.- Nei singoli file (con estensione ".xml") nel formato
$CATALINA_BASE/conf/[enginename]/[hostname]/
directory.Il nome del file (meno l'estensione .xml) verrà utilizzato come percorso di contesto.I percorsi di contesto multilivello possono essere definiti utilizzando #, ad es.foo#bar.xml
per un percorso contestuale di/foo/bar
.L'applicazione Web predefinita può essere definita utilizzando un file denominato ROOT.xml.- Solo se non esiste un file di contesto per l'applicazione nel file
$CATALINA_BASE/conf/[enginename]/[hostname]/
, in un file individuale all'indirizzo/META-INF/context.xml
all'interno dei file dell'applicazione.Se l'applicazione Web è confezionata come WAR, allora/META-INF/context.xml
verrà copiato in$CATALINA_BASE/conf/[enginename]/[hostname]/
e rinominato per corrispondere al percorso di contesto dell'applicazione.Una volta che questo file esiste, non verrà sostituito se si tratta di un nuovo WAR con uno più recente/META-INF/context.xml
viene inserito nell'appBase dell'host.- All'interno di un elemento Host nel main
conf/server.xml
.Con l'eccezione di
server.xml
, file che definiscono Contesto gli elementi possono definirne solo uno Contesto elemento.
Altri suggerimenti
Argh! Pensavo di averlo chiesto prima. A volte è davvero difficile cercare su questo sito web.
dove / come impostare le risorse di configurazione per Tomcat file .war