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.
- ServletRequest: Detta gränssnitt innehåller metoder för att hämta parametrar och metoder för att få information om servern.
- HttpServletRequest: Detta gränssnitt innehåller metoder för att få information om HTTP-specifika detaljer, t.ex. variablerna i HTTP-huvudet.
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:
<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 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:
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:
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
|
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:
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:
<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>
|
Vi sparar sidan till CATALINA_HOME/webapps/programmera/checkHeader.jsp.När vi testar JSP-sidan ser vi följande:
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:
<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>
|
Sidan ger följande utskrift när jag anropar requestInfo.jsp lokalt:
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:
request.getRequestDispatcher("/x.jsp").include(request, response);
|
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.