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.
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:
Vi sparar servleten till CATALINA_HOME/webapps/programmera/classes/HelloWorld.java, och kompilerar den. Vi lägger till följande rader i web.xml:
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>");
}
}
Nu kan vi anropa servleten som hw, vi får följande:
<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>
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:
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:
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
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.