Beruflich Dokumente
Kultur Dokumente
LebenszykluseinesServlets
Statuscodes
Redirect
SessionTracking
Request Dispatcher
2010Prof.DIDr.ErichGams
Seite2
WH Kommunikation
2010Prof.DIDr.ErichGams
Seite3
2010Prof.DIDr.ErichGams
Seite4
Initialisieren
DieinitMethode desServlets wirdaufgerufen
HierkanndasServlet Initialisierungsaufgabenerledigen,
z.B.eineDatenbankverbindungherstellenoder
KonfigurationsdatenauseinerDateieinlesen
2010Prof.DIDr.ErichGams
Seite5
ServletKlasse wiederentladen
DerServlet Containerentscheidet,wanndieServletInstanz wiederausdem
Speicherentferntwird
VorherwirddieMethodedestroy aufgerufen
2010Prof.DIDr.ErichGams
Seite6
HTTP Statuscodes
2010Prof.DIDr.ErichGams
Seite7
Statuscode setzen
response.setStatus(int statusCode)
VerwendeKonstantenausHttpServletResponse (Keineints)
Z.B.:SC_OK,SC_NOT_FOUND,etc.
response.sendError(int code,Stringmessage)
EineNachrichtwirdinHTMLverpackt
response.sendRedirect(String url)
StatusCode302
Location imResponseHaeder sollgesetztwerden
2010Prof.DIDr.ErichGams
Seite8
Hufige Statuscodes
200(OK)
Everything is fine;document follows.
Defaultfor servlets.
204(NoContent)
Browsershould keep displaying previous document.
301(Moved Permanently)
Requested document permanently moved elsewhere (indicated inLocation
header).
Browsersgo tonew location automatically.
Browsersare technically supposed tofollow 301and302(next page)requests
only when the incoming request is
GET,but doit for POSTwith 303.Either way,the Location URLis retrieved with
GET.
2010Prof.DIDr.ErichGams
Seite9
Hufige Statuscodes
302(Found)
Requested document temporarily moved elsewhere(indicated inLocation
header).
Browsersgo tonew location automatically.
Servlets should use sendRedirect,not setStatus,when
setting this
header.Seeexample.
401(Unauthorized)
Browsertried toaccess passwordprotected page without
Authorization header.
proper
404(NotFound)
Nosuchpage.Servlets should use sendError toset this.
Problem:InternetExplorerandsmall (<512bytes)error pages.IEignores small
error page by default.
Fun andgames:http://www.plinko.net/404/
2010Prof.DIDr.ErichGams
Seite10
Redirect
@WebServlet("/wrongdestination")
public class WrongDestination extends HttpServlet {
public void doGet(HttpServletRequest request,HttpServletResponse response)
throws ServletException,IOException {
StringuserAgent =request.getHeader("UserAgent");
if ((userAgent !=null)&&(userAgent.contains("MSIE")){
response.sendRedirect("http://home.mozilla.com");
}else {
response.sendRedirect("http://www.microsoft.com");
}
}
}
2010Prof.DIDr.ErichGams
Seite11
Redirect
CLIENT
SERVER
http://..formular1
Get Request
Response
Status 302
Location ant2.html
http://..ant2.html
Get Request
Response
2010Prof.DIDr.ErichGams
Servlet: formular1
res.sendRedirect(ant2.html);
ant2.html
<HTML>
</HTML>
Seite12
2010Prof.DIDr.ErichGams
Seite13
Sessionverwaltung
Problem:
VieleBenutzerkommunizierengleichzeitig
mitdemServer
WelcheRequests gehrenzuwelchem
Benutzer?
Seite14
2010Prof.DIDr.ErichGams
Seite15
Seite16
Seite17
2010Prof.DIDr.ErichGams
Seite18
Session Tracking
Seite19
Http Session 1
HTML
Client 1
Cookie
Web
Server
Http Request
Servlet
Http Session 2
HTML
Client 2
Cookie
2010Prof.DIDr.ErichGams
Seite20
Explizit:
session.invalidate();
Timeout:
Programmatisch:
session.setMaxInactiveInterval(120);
ImDD:
<sessionconfig>
<sessiontimeout>120</sessiontimeout>
</sessionconfig>
2010Prof.DIDr.ErichGams
Seite21
Sichtbarkeitsobjekte
WebAnwendung
javax.servlet.ServletContext
ClientSitzung
javax.servlet.http.HttpSession
Request
javax.servlet.ServletRequest
Methoden:
java.util.Enumeration getAttributeNames()
void setAttribute(String name,Object object)
Object getAttribute(String name)
void removeAttribute(String name)
2010Prof.DIDr.ErichGams
Seite22
Servlets
Arten von "Servlet-Variablen"
Art der Variable
Attribute eines
ServletContext
Sichtbarkeit
Lebensdauer
Instanzvariablen
eines Servlet
Servlet.init() bis
Servlet.destroy()
Attribute eines
ServletRequest
Attribute einer
Session
2010Prof.DIDr.ErichGams
Seite23
Kontrollflu:URLs
DerHTMLOutputeinesServlet kannLinksaufandereServlets enthalten,
out.println("<A HREF=/MoreServlet>Weiter</A>");
DieEntscheidung,obbzw.welchesServlet aufgerufenwird,liegtbeimClient
Datenflu:RequestParameter
HTTPOutputenthltDaten,diealsRequestParameter andasZielServlet bermittelt
werden
AlsTeilderURL,z.B.:out.println("<A HREF=\"
/UserDetailServlet?userId=" +user.getId()+ "\">" +
user.getName() + "</A>");
FelderineinemFormular,z.B.:
out.println("<FORM ACTION=\"/DeleteUserServlet\" METHOD=GET>"+
"<INPUT TYPE=HIDDEN NAME=userId VALUE=" +user.getId()+ ">"+
"<INPUT TYPE=SUBMIT VALUE=\"Delete!\"></FORM>");
NurStringDatensindmglich;Alternative:SessionAttribute
2010Prof.DIDr.ErichGams
Seite24
IndoGet oderdoPost:
ServletContext context =getServletContext();
...
RequestDispatcher dispatcher =
context.getRequestDispatcher("/myServlets.Servlet1");
...
//evtl.
req.setAttribute(name,value);
...
dispatcher.include(req,res);
//oder
dispatcher.forward(req,res);
2010Prof.DIDr.ErichGams
Seite25
Request Dispatcher
forward DieKontrollewirdvollstndiganein
anderesServlet abgegeben(Esdrfennoch
keineDatengesendetwordensein)
include LediglichdasResultateinesweiteren
Servlets wirdeingebettet("wrapping")
2010Prof.DIDr.ErichGams
Seite26
Request Dispatcher
CLIENT
http://..formular1
SERVER
Get Request
Response
2010Prof.DIDr.ErichGams
Servlet: formular1
res.sendRedirect(ant2.html);
ant2.html
<HTML>
</HTML>
Seite27
2010Prof.DIDr.ErichGams
Seite28
Any requests?
2010Prof.DIDr.ErichGams
Seite29
Aufgabe 1
ImplementiereeinServlet,welchesdiverseInformationen
berdenRequest unddenContaineranzeigensoll.
RequestInformation:Req.URL,HttpHeader,Req.Parameter,Client
IPundHost,DatumundZeit desRequest,RequestMethode (POST
oder GET),QueryString bei Methode GET,RequestSchemaund
Protokoll
ServerundServlet Informationen:Servername,Serverport,Servlet
Pfad,EchterPfadmitContext,Servlet Context Name,Container
Name,Servlet Version.
DasServlet solleineStartseitemit2Linksbeinhalten,welche
diebeidenobenbeschriebenenInformationabrufen.
Rcklinks aufdieStartseite sollen auch gesetzt werden!
2010Prof.DIDr.ErichGams
Seite30
Aufgabe 2 : Werbe-Banner
EntwickelnSieeinServlet,dasbeijedemAufrufeinneuesBildauseinemVerzeichnisdes
WebServerszurckliefert.ImplementierenSieaufdieseArtundWeiseeineneinfachen
WerbebannerMechanismus.
ZumBsp.:AmWebServerliegenimVerzeichnisc:\temp\images folgendeBilder:
img01.gif
img02.jpg
img03.gif
BeispielHTMLSeite:
<html><head><title>Banner Test</title></head>
<body><img src="/myWebapp/imgbanner?basedir=c:\temp\images"></body>
</html>
BeimerstenAufrufdieserHTMLSeitesolldasBild"img01.gif"angezeigtwerden,danach
"img02.gif",dann"img03.gif"unddannwieder"img01.gif"usw.DasVerzeichnisderBilder
wirdbereinenRequest Parameterangegeben.VerwendedieSessionAPIumden
Zustand desClientszuspeichern,sodassfrjedenClientdieReihenfolgeeingehalten
wird.
2010Prof.DIDr.ErichGams
Seite31