1. Vad är web.xml?
Filen web.xml kallas även deployment descriptor (sjösättningsbeskrivare) och används till att göra inställningar för webbapplikationen. Några fakta om filen:
- Då webb-behållaren startas går den igenom alla applikationer och tolkar web.xml för att få reda på vilka regler som ska gälla för applikationen. Ändringar i web.xml börjar inte gälla förän webb-behållaren startas om.
- Webb-behållaren har en default-web.xml i mappen conf/. Här görs de inställningar som man vill ska gälla för alla applikationerna.
- Varje webbapplikation i en webb-behållare kan ha sin egen web.xml. Inställningar som görs i applikationens web.xml slår över de inställningar som finns i default-web.xml.
- web.xml kan ha 23 typer av element men behöver inte ha något alls.
- Element som skrivs in i web.xml måste ligga i en strikt ordning, annars kommer webb-behållaren att protestera.
2. conf/web.xml
I mappen CATALINA_HOME/conf/ ligger en fil web.xml som fungerar som defaultinställning för alla webbapplikationerna på servern. Denna fil innehåller mestadels grundinställningar och en massa mime-mapping-märken. Du ska vanligtvis inte göra dina inställningar där, utan istället ändra i den web.xml som hör till din applikation.
3. En enkel web.xml
Varje applikation kan ha en egen web.xml. Om webbapplikationen heter programmera så ska web.xml ha sökvägen CATALINA_HOME/webapps/programmera/WEB-INF/web.xml. Den enklaste web.xml har följande utseende:
<?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>
</web-app>
|
Här innehåller web-app-märket ingenting.
4. Element
Nedan listas de 23 elementtyper som kan innefattas inuti web-app-märket. Elementens inbördes ordning kan inte ändras, display-name måste t. ex. alltid ligga före description om båda finns.
- Max står för hur många exemplar av elementtypen som maximalt får finnas i web.xml. * betyder oändligt antal.
- Beskrivs svarar på frågan om elementet beskrivs på denna webbplats.
Element | | Max | | Beskrivs | | Beskrivning |
icon | | 1 | | Nej | | Kopplar en ikon till applikationen som representerar applikationen i serverns GUI. |
display-name | | 1 | | Nej | | Webbkomponentens namn. |
description | | 1 | | Nej | | En beskrivning av webbkomponenten. |
distributable | | 1 | | Nej | | Sätt till true om applikationen är programmerad för att köras i en distrubuerad miljö. |
context-param | | * | | Ja | | Egendefinierade parametrar som man kan komma åt från JSP-sidorna. |
filter | | * | | Nej | | Kopplar ett filternamn till en filterklass. |
filter-mapping | | * | | Nej | | Kopplar en URL till ett tidigare definierat filternamn. |
listener | | * | | Ja | | Alla lyssnare som ska användas måste deklareras här. |
servlet | | * | | Ja | | Kopplar ett servletnamn till en servlet. Här kan en mängd inställningar göras för en enskild servlet. |
servlet-mapping | | * | | Ja | | Kopplar en URL till ett tidigare definierat servletnamn. |
session-config | | 1 | | Ja | | Bestämmer hur länge användaren kan vara inaktiv innan sessionen kastas. |
mime-mapping | | * | | Nej | | Kopplar en filändelse till en MIME-type. T.ex. txt till text/plain. |
welcome-file-list | | 1 | | Ja | | Här listas de filnamn som kan vara indexfiler för en katalog. |
error-page | | * | | Ja | | Kopplar ett visst fel till en viss JSP-sida. |
taglib | | * | | Ja | | Kopplar ett märkesbiblioteks sökväg till en URI. |
resource-env-ref | | * | | Nej | | Innehåller en deklaration av en referens till ett objekt kopplat till en resurs i webbapplikationens miljö. |
resource-ref | | * | | Nej | | Innehåller en deklaration av en referens till en extern resurs, t.ex. databas. |
security-constraint | | * | | Ja | | Ser till att endast vissa roller får tillgång till en del av webbplatsen. |
login-config | | 1 | | Ja | | Bestämmer vilken loginmetod applikationen ska använda. |
security-role | | * | | Nej | | Deklarerar en roll. |
env-entry | | * | | Nej | | Deklarerar en miljö-ingång för applikationen. |
ejb-ref | | * | | Nej | | Används för att få ett JNDI-namn på en EJB. |
ejb-local-ref | | * | | Nej | | Används för att få en referens till en lokal EJB. |
5. context-param
Genom att deklarera variabler i web.xml, kan man senare komma åt dem via context/application-objektet. Dessa variabler kan vara sökvägar eller lösenord eller liknande. Genom att lägga dessa detaljer i web.xml blir de lättare att hitta (och ändra). Deklarationen ser ut såhär:
<context-param>
<param-name>myPath</param-name>
<param-value>C:\myapp\bin\a.exe</param-value>
</context-param>
|
Hur man sen använder dessa variabler i programkoden visas på sidan
application .
6. listener
Lyssnare diskuteras på sidan
lyssnare . En lyssnare måste deklareras i web.xml för att den ska kunna användas. Nedan följer ett exempel på en deklaration:
<listener>
<listener-class>nu.programmera.listening.MySessionListener</listener-class>
</listener>
|
7. servlet och servlet-mapping
Dessa element bestämmer hur du anropar din servlet via webben.
- servlet ger din servlet ett namn.
- servlet-mapping mappar servletens namn till en URL.
I exemplet nedan mappar vi servleten HelloWorld.class till URLen http://localhost:7070/hw:
<servlet>
<servlet-name>helloWorld</servlet-name>
<servlet-class>HelloWorld</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>helloWorld</servlet-name>
<url-pattern>/hw</url-pattern>
</servlet-mapping>
|
8. session-config
Med detta element kan du bestämma hur länge webbapplikationen ska spara sessionen då användaren är inaktiv. I conf/web.xml sätts session-timeout till 20 minuter, så det är standard. Om du tycker att användarna av din applikation ska få 30 minuter på sig kan du skriva såhär:
<session-config>
<session-timeout>30</session-timeout>
</session-config>
|
9. welcome-file-list
Här listas de filnamn som kan vara indexfiler för en katalog. Indexfilen anropas automatiskt då det kommer en HTTP-förfrågan efter katalogen som indexfiler ligger i. Som default fungerar index.html,index.htm och index.jsp som indexfiler. Såhär deklareras de i CATALINA_HOME/conf/web.xml:
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
|
Om du använder welcome-file-list för att göra en egen lista, kommer din lista att ersätta defaultinställningarna. Se till att alla de filer du vill ha kommer med. Om servern inte hittar någon fil med namn deklarerat i denna lista får man ett 404-fel (file not found).
10. error-page
Kopplar ett visst fel till en viss JSP-sida. Webb-behållaren genererar alltid en defaultfelsida om man inte har gjort någon egen, men dessa har inte samma stil som webbplatsen, en hemmagjord felsida gör inte kunden lika förskräckt. Man kan koppla en HTTP-felkod (error-code) till en felsida på detta sätt:
<error-page>
<error-code>404</error-code>
<location>/exceptions/404.jsp</location>
</error-page>
|
Vi kan också koppla en viss typ av undantag till en felsida på detta sätt:
<error-page>
<exception-type>java.lang.Exception</exception-type>
<location>/exceptions/exception.jsp</location>
</error-page>
|
Felhantering beskrivs i detalj på sidan om
undantag .
11. taglib
Kopplar märkesbibliotekets sökväg till en URI. Märkesbibliotek kan användas utan att de deklareras i web.xml, men man döljer den riktiga sökvägen genom att deklarera i web.xml. Om ett taglib-element finns i web.xml kan man använda det i JSP endast genom att referera till det namn som specifieras av taglib-uri parametern. Märkesbibliotek beskrivs närmare på sidan
märkesbibliotek . Nedan kopplas märkesbiblioteket med sökvägen /WEB-INF/ollestaglib.tld till URIn ollestaglib:
<taglib>
<taglib-uri>ollestaglib</taglib-uri>
<taglib-location>/WEB-INF/ollestaglib.tld</taglib-location>
</taglib>
|
12. resurser
Om du vill använda resurser som databaser ska du använda elementen resource-env-ref, resource-ref och env-entry.
<resource-ref>
<res-ref-name>jdbc/BookDB</res-ref-name>>
<res-type>javax.sql.DataSource</res-type>>
<res-auth>Container</res-auth>>
</resource-ref>
|
13. säkerhet
De element som handlar om säkerhet är security-constraint, login-config och security-role. De beskrivs närmare på sidan
säkerhet .