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