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.

  • 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.