programmera.net -> jsp -> normal för utskrift | info@programmera.net |
Undantag i webb-behållaren
1. Undantag 2. Undantag i webb-behållaren 3. Generera ett fel 4. Hemmagjord felsida 5. Ett exempel på felhantering 6. Bönan MyErrorGenerator 7. JSP-sidorna 8. Testa felsidan 9. 404 - file not found |
1. Undantag
Undantag besrkivs på sidan
java/undantag , men här ges en kort repetition. I java gör man skillnad på fel och undantag:
2. Undantag i webb-behållaren
Förutom Error kan en servlet kan kasta följande undantag vid körning:
ServletException kan bara inträffa i en servlet, men de andra undantagen är välbekanta från Java. Undantagsrapportering i webb-behållaren fungerar ungufär som för ett vanligt Javaprogram:
StackTrace är vad som skrivs ut på terminalen vid ett anrop till exception.printStackTrace().
3. Generera ett fel
Skapa sidan myoutofbounds.jsp:
Spara sidan till webbroten CATALINA_HOME/programmera/myoutofbounds.jsp. När du försöker titta på sidan i webbläsaren ser du:
<HTML>
<BODY>
<H1>My Out Of Bounds</H1>
Denna sida genererar ett fel:
<%
int ar[]={3,4,5};
int x;
x=ar[9];
%>
<BR/>x=<%=x %>
</BODY>
</HTML>
Denna sida genereras automatiskt av webb-behållaren.
4. Hemmagjord felsida
Många tycker att den webbsida som autogenereras av webb-behållaren inte är speciellt informativ för användarna som normalt använder webbapplikationen. Istället skriver man en egen felsida med samma "look and feel" som företagets övriga webbplats. Sedan gäller det att få denna felsida att anropas då fel inträffar, det finns två sätt att åstakomma detta:
5. Ett exempel på felhantering
Nu ska vi göra ett exempel som består av följande delar:
Vi skulle kunna generera felet direkt i sidan myerror.jsp, men vi vill visa att fel som inträffar utanför JSP-sidor även omdirigeras till vår hemmagjorda felsida.
6. Bönan MyErrorGenerator
Skapa en fil med följande innehåll:
Spara till sökvägen CATALINA_HOME/webapps/programmera/WEB-INF/classes/nu/programmera/MyErrorGenerator.java, och kompilera.
package nu.programmera;
public class MyErrorGenerator{
public void generate(){
int array[]={1,3,5,3};
int x;
x=array[90]; // Generates ArrayIndexOutOfBoundsException
}
}
7. JSP-sidorna
Först skriver vi en webbsida som använder den felaktiga bönan MyErrorGenerator:
Vi döper denna sida till myerror.jsp och lägger den i webbroten CATALINA_HOME/programmera/. Nu ska vi skriva sidan exception.jsp som visas då ett undantag inträffar:
<%@ page errorPage="/exceptions/exception.jsp" %>
<jsp:useBean id="meg" class="nu.programmera.MyErrorGenerator" scope="page" />
<HTML>
<BODY>
<H1>My Error</H1>
Denna sida anropar en böna som genererar ett undantag.
<BR/>NR=<%= meg.generate() %>
</BODY>
</HTML>
Spara denna sida till CATALINA_HOME/programmera/exceptions/exception.jsp.
<%@ page isErrorPage="true" %>
<HTML>
<BODY>
<H1>Problem på servern</H1>
Teamet bakom <B>programmera.nu</B> ber om ursäkt! Det har inträffat ett fel på servern.
Kontakta gärna support på <B>info@programmera.nu</B> för snabb service.
<BR/>
<BR/>Meddelande: <%= exception.toString() %>
</BODY>
</HTML>
8. Testa felsidan
Anropa myerror.jsp och du får se:
9. 404 - file not found
Då man anropar en sida på webbplatsen som inte finns får man en autogenererad 404-sida av servern. 404 är en kod i HTTP som betyder att den sökta resursen inte kan hittas. Vi gör en egen 404-sida med följande utseende:
Sparar den på sökvägen exceptions/404.jsp. För att sidan ska anropas måste vi ändra i web.xml, vi lägger till följande rader:
<%@ page isErrorPage="true" %>
<HTML>
<BODY>
<H1>Den sida du söker finns inte!</H1>
Gå till förstasidan och försök igen..
</BODY>
</HTML>
Nu när vi testar att anropa en icke existerande sidan i vår applikation får vi:
<error-page>
<error-code>404</error-code>
<location>/exceptions/404.jsp</location>
</error-page>