programmera.net -> jsp -> normal för utskrift | info@programmera.net |
request
1. Det implicita objektet request 2. Parametrar från formulär 3. HTTP-huvudet 4. Övrig information om användaren 5. Hämta objekt 6. RequestDispatcher |
1. Det implicita objektet request
Ett av de oftast använda implicita objekten är request. Objektet request är av typen HttpServletRequest som ärver av ServletRequest.
2. Parametrar från formulär
Objektet request låter dig hämta variabler som skickas till dig från webbläsaren. Vanligtvis kommer variablerna från ett formulär som användaren just har fyllt i. Nedan listas några praktiska metoder för att hämta information från formuläret:
Formulärmetoder Returnerar Beskrivning getParameterNames() Enumeration Returnerar en java.util.Enumeration som innehåller namnen på alla variabler som skickats till JSP-sidan. getParameter("firstname") String Returnerar innehållet i variabeln firstname. getMethod() String Returnerar den HTTP-metod som användes, t.ex. GET eller POST.
Här kommer ett exempel på hur request används:
Vi sparar sidan till CATALINA_HOME/webapps/programmera/getParameter.jsp. Om vi anropar sidan i webbläsaren och hakar på ?a=3&b=6 sist i URLen får vi följande utskrift:
<HTML>
<BODY>
<H1>Hämta parametrar</H1>
<%
java.util.Enumeration names=request.getParameterNames();
String var,val;
while(names.hasMoreElements()){
var=(String) names.nextElement();
val=request.getParameter(var);
%>
<BR/><%=var %>=<%=val %>
<% } %>
</BODY>
</HTML>
Vi skickade alltså parametrarna a och b till sidan med metoden GET.
3. HTTP-huvudet
Objektet request innehåller också information om HTTP-huvudet som skickades till servern. Ett HTTP-huvud kan se ut såhär:
Det som står före kolonet (:) på varje rad kallar jag för variabler och det som står efter kolonet kallar jag för värde. Med följande metoder kan man komma åt informationen i HTTP-huvudet:
GET / HTTP/1.1
Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg,
application/vnd.ms-powerpoint, application/vnd.ms-excel,
application/msword, application/x-shockwave-flash, */*
Accept-Language: sv
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 5.5; Windows NT 4.0)
Host: www.programmera.net:80
Connection: Keep-Alive
Metoder Returnerar Beskrivning getHeaderNames() Enumeration Returnerar en Enumeration innehållande namnen på alla variabler huvudet har. getHeader("Accept-Language") String Returnerar värdet för variabeln Accept-Language. getIntHeader(String var) int Returnerar värdet på variabeln var konverterat till en int. Om konverteringen misslyckas kastas NumberFormatException. getDateHeader(String var) long Returnerar värdet på variabeln var konverterat till en long som representerar ett datum.
I detta exempel använder vi metoderna ovan:
Vi sparar sidan till CATALINA_HOME/webapps/programmera/checkHeader.jsp.När vi testar JSP-sidan ser vi följande:
<HTML>
<BODY>
<H1>Information i request</H1>
---HEADER VALUES---
<%
java.util.Enumeration names=request.getHeaderNames();
String var,val;
while(names.hasMoreElements()){
var=(String) names.nextElement();
val=request.getHeader(var);
%>
<BR/><%=var %>=<%=val %>
<% } %>
<BR/>--------------------
</BODY>
</HTML>
4. Övrig information om användaren
Nedan visas hur man kommer åt annan information, som inte visas i HTTP-huvudet men ändå är viktig:
Metoder Returnerar Beskrivning isSecure() boolean Returnerar true om förfrågan sker via HTTPS. getRemoteUser() String Om användaren har loggat in på webbplatsen returneras användarens inlogningsnamn. getRemoteAddr() String Returnerar webbläsarens ip-adress. getRemoteHost() String Returnerar webbläsarens domännamn. getRequestURL() StringBuffer Returnerar den URL du specifierade i webbläsaren, med eventuella GET-parametrar bortklippta. getServerName() String Returnerar serverns namn. getServerPort() String Returnerar det portnummer servern använder för kommunikationen.
Vi skapar en JSP-sida requestInfo.jsp:
Sidan ger följande utskrift när jag anropar requestInfo.jsp lokalt:
<HTML>
<BODY>
<H1>Information i request</H1>
isSecure()=<%=request.isSecure() %>
<BR/>getRemoteUser()=<%=request.getRemoteUser() %>
<BR/>getRemoteAddr()=<%=request.getRemoteAddr() %>
<BR/>getRemoteHost()=<%=request.getRemoteHost() %>
<BR/>getRequestURL()=<%=request.getRequestURL() %>
<BR/>getServerName()=<%=request.getServerName() %>
<BR/>getServerPort()=<%=request.getServerPort() %>
</BODY>
</HTML>
5. Hämta objekt
Man kan hämta objekt ur request-objektet, t.ex. session, RequestDispatcher eller objket lagrade som attribut i request.
Metoder Returnerar Beskrivning getSession() HttpSession Returnerar sessionsobjektet knutet till användaren. getCookie() Cookie[] Returnerar en array innehållande alla Cookie-objekt som lagrats hos användaren. getRequestDispatcher(String path) RequestDispatcher Returnerar en RequestDispatcher kopplad till sökvägen path. setAttribute(String, Object) void Lägger till ett attribut i request. getAttribute(String) Object Returnerar objektet med det specifierade namnet. removeAttribute(String) void Tar bort ett attribut ur request.
6. RequestDispatcher
Denna klass får man genom att anropa request.getRequestDispatcher(String path). Ett RequestDispatcher-objekt är alltid kopplad till resursen path som är en servlet eller JSP-sida. Klassen har följande metoder:
Metoder Returnerar Kastar Beskrivning forward(ServletRequest, ServletResponse) void ServletException, IOException Omdirigerar till resursen path. Omdirigeringen sker utan webbläsarens vetskap. include(ServletRequest, ServletResponse) void ServletException, IOException Inkluderar resursen path. Inkluderingen är dynamisk. Den inkluderade sidan kan inte ändra respons-objektets statuskod eller variablerna i HTTP-huvudet.
Nedan ges ett exempel på hur man dynamiskt kan inkludera sidan CATALINA_HOME/webapps/programmera/x.jsp:
På sidan
JSP-märken visas ett annat sätt att använda forward och include i JSP, och där beskrivs metoderna utförligare. Observera att en servlet måste använda RequestDispatcher för att göra dynamisk inkludering eller snabb omdirigering.
request.getRequestDispatcher("/x.jsp").include(request, response);