programmera.net -> jsp -> normal     för utskrift      info@programmera.net

response

1. Det implicita objektet response
2. Skriva till response
3. HTTP-huvudet
4. Övriga metoder

1. Det implicita objektet response

Detta objekt innehåller svaret som ska skickas tillbaka till användaren. Objektet är av typen HttpServletResponse som ärver av ServletResponse.

  • ServletResponse: Detta gränssnitt innehåller metoder för att sätta bufferstorlek och hämta ett out-objekt.
  • HttpServletResponse: Detta gränssnitt innehåller metoder för att kontrollera HTTP-specifika detaljer, t.ex. variablerna i HTTP-huvudet.

2. Skriva till response

I varje webbapplikation du använder kommer du att vilja addera information till response-objektet. Denna information skickas sedan till webbläsaren. Du kan addera text (vanligtvis HTML) eller binär information:

Metoder Returnerar Beskrivning
getWriter()  PrintWriter  Returnerar en PrintWriter till vilken du kan addera text.
getOutputStream()  ServletOutputStream  Returnerar en ServletOutputStream med vilken du kan addera binära data eller vanlig text.
flushBuffer()  void  Skickar omedelbart svaret till webbläsaren.
isCommitted()  boolean  Returnerar true om svaret redan har skickats till webbläsaren. Om svaret har skickats kan man inte längre skriva till response-objektet. Försöker man kastas IllegalStateException.

Dessa metoder används mest när du skriver en servlet, eftersom en JSP-sida redan har det implicita objektet out. Här kommer ett exempel på hur man adderar text till response i en servlet:
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;

public class HelloWorld extends HttpServlet{
  public void doGet(HttpServletRequest req, HttpServletResponse res)
    throws IOException, ServletException
  {
    PrintWriter out=res.getWriter();
    out.println("<HTML>"); 
    out.println("<BODY>"); 
    out.println("<H1>Hello World!</H1>"); 
    out.println("Från en servlet."); 
    out.println("</BODY>"); 
    out.println("</HTML>"); 
  }
}
Vi sparar servleten till CATALINA_HOME/webapps/programmera/classes/HelloWorld.java, och kompilerar den. Vi lägger till följande rader i web.xml:
<servlet>
    <servlet-name>helloWorld</servlet-name>
    <servlet-class>HelloWorld</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>helloWorld</servlet-name>
    <url-pattern>/hw</url-pattern>
</servlet-mapping>
Nu kan vi anropa servleten som hw, vi får följande:

3. HTTP-huvudet

Objektet response innehåller också information om HTTP-huvudet som skickades till servern. Ett HTTP-huvud från en server kan se ut såhär:
HTTP/1.1 302 Found
Date: Thu, 04 Sep 2003 08:44:57 GMT
Server: Apache/1.3.26 (Unix) mod_auth_pam/1.1.1 PHP/4.3.0 mod_perl/1.27
X-Powered-By: PHP/4.3.0
Location: http://www.programmera.net/about/index.php
Keep-Alive: timeout=15, max=50
Connection: Keep-Alive
Transfer-Encoding: chunked
Content-Type: text/html
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. I exemplet ovan returneras svarskoden 302 som betyder Moved temporarily. Denna kod uppmanar webbläsaren att hämta resursen som specifieras i variabeln Location d.v.s. http://www.programmera.net/about/index.php. Med följande metoder kan man skriva till HTTP-huvudet:

Metoder Returnerar Beskrivning
setStatus(int status)  void  Sätter svarskoden till status.
containsHeader(String var)  boolean  Returnerar true om variabeln redan finns.
setHeader(String var,String val)  void  Sätter variabeln var till val.
setIntHeader(String var, int i)  void  Sätter variabeln var till heltalet i.
setDateHeader(String var, long d)  void  Sätter variabeln var till d som representerar ett datum.
addHeader(String var,String val)  void  Lägger till en ny rad i huvudet innehållande variabeln var med värdet val.
addIntHeader(String var, int i)  void  Lägger till en ny rad i huvudet innehållande variabeln var med värdet val till huvudet, där val är ett heltal.
addDateHeader(String var, long d)  void  Lägger till en ny rad i huvudet innehållande variabeln var med värdet val till huvudet, där val är ett heltal.

4. Övriga metoder

Oftast behöver man inte gå in i HTTP-huvudet och ändra, det finns specialmetoder för de flesta handlingar man kan vilja göra. Några specialmetoder listas nedan:

Metoder Returnerar Beskrivning
encodeURL(String url)  String  Returnerar url med sessionsid inkluderat. Om användaren tillåter cookies returneras url oförändrad. Genom att använda denna metod överallt i webbappliaktionen kan även en webbläsare som inte tillåter cookies använda sessioner.
encodeRedirectURL(String url)  String  Som ovan fast för en URL som ska användas till omdirigering.
sendRedirect(String URL)  void  Skickar en 302-HTTP-svar till webbläsaren med URL som Location. Detta är enda sättet att göra en omdirigering till en annan webbplats i J2EE.
sendError(int status)  void  Sätter svarskoden till status och tömmer bufferten. Sedan skickas ett felmeddelande baserat på svarskoden.
sendError(int status, String msg)  void  Som ovan men med felmeddelandet msg.
addCookie(Cookie c)  void  Returnerar en array innehållande alla Cookie-objekt som lagrats hos användaren.
setCharacterEncoding(String code)  void  Sätter teckenkodningen till code. Ett exempel på teckenkod är UTF-8.
setContentType(String type)  void  Sätter MIME-typ till type. Ett exempelm på MIME-typ är text/html.
setBufferSize(int size)  void  Sätter bufferstorleken till size. Webb-behållaren kommer att använda storleken size eller större.