3.1 HttpServletResponse-klasse

Etter å ha kalt service()servletmetoden din, vil nettbeholderen generere et svar til klienten basert på HttpServletResponse. Så hvis du på en eller annen måte vil påvirke responsen til klienten, bør du endre dette objektet.

Serverresponsen består av tre deler:

  • Statuslinje (for eksempel: 200 OK)
  • Overskrifter
  • Responsorgan

Og klassemetoder HttpServletResponseer også delt inn i 3 grupper? Nesten:

Metoder Beskrivelse
1 void setStatus(int sc) Stiller inn svarstatuskoden.
2 void sendError(int sc) Sender en feilmelding til klienten med den angitte koden.
3 void sendError(int sc, String msg) Sender en feil med den angitte koden og en melding til klienten.
4 void addHeader(String name, String value) Legger til en overskrift i listen over svaroverskrifter.
5 void setHeader(String name, String value) Endrer overskriften i listen over svaroverskrifter.
6 boolean containsHeader(String name) Sjekker om overskriften allerede eksisterer.
7 void addCookie(Cookie cookie) Legger til en informasjonskapsel i svaret.
8 void sendRedirect(String location) Omdirigerer klienten til en annen URL.
9 String encodeRedirectURL(String url) Koder den angitte URL-adressen for bruk i sendRedirect-metoden.
10 String encodeURL(String url) Koder den angitte URL-adressen, inkludert økt-ID.
elleve void setContentType(String type) Angir MimeType for resultatet.
12 void setContentLength(int len) Angir lengden på svarteksten.
1. 3 void setCharacterEncoding(String charset) Stiller inn svarkodingssettet.
14 void setBufferSize(int size) Angir bufferstørrelsen for svarteksten.
15 boolean isCommitted() Sjekker om bufferen allerede er skrevet til svaret.
16 void flushBuffer() Skriver innholdet i bufferen til svaret.
17 void reset() Tilbakestiller alle data som er lagret i bufferen, overskrifter og svarkoder.
18 void resetBuffer() Tømmer svarbufferen.

Metodene her er ganske trivielle. Men jeg skal gi deg noen høydepunkter nedenfor.

Buffer . Servletens svar skrives til en buffer, ikke umiddelbart sendt til brukeren. Derfor, på et tidspunkt (hvis det for eksempel oppstår en feil), kan du tilbakestille (slette) alt som er skrevet til bufferen. Du kan til og med kalle reset()-metoden og slette ikke bare innholdet i bufferen, men også overskriftene med svarkoden.

3.2 omdirigering()

Det andre viktige punktet er omdirigeringen. Hvis servleten din bestemmer seg for å omdirigere klienten til en annen URL, må du på en eller annen måte sende denne URLen til klienten. Dette kan gjøres ved å bruke sendRedirect.

Men det er en viktig nyanse. URI-en kan inneholde et bredere spekter av tegn enn det som er tillatt i svarteksten. Derfor må URL-en først kodes til et gyldig tegnsett før metoden kalles sendRedirect(). Det er en spesiell metode for dette encodeRedirectURL(String url). Bruk det.

Eksempel på omdirigering:


public class RedirectServlet extends HttpServlet {
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws Exception {
        String newUrl = "http://google.com?q=Learn to google!";
        String redirectUrl = response.encodeRedirectURL(newUrl);
        response.sendRedirect(redirectUrl);
    }
}

3.3 getWriter()-metoden

Og nå skal vi lære hvordan vi skriver teksten vår som en svartekst. For å gjøre dette har klassen HttpServletResponseen spesiell metode getWriter()som returnerer et objekt PrintStream. Hvis noen har glemt, er dette typen felt med navnet System.out.

For å skrive litt tekst som et servlet-svar, trenger du:

  • Hent PrintStream-objektet ved å kalle response.getWriter().
  • Skriv det du tror er nødvendig til PrintStream-objektet (alle data vil bli skrevet til bufferen).
  • Send bufferen til brukeren ved å kalle metoden close()på PrintStream.

La oss skrive en servlet som legger til to tall aog breturnerer resultatet til brukeren:



public class CalculatorServlet extends HttpServlet {
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws Exception {
         // Getting the parameter “a” and “b” from request
        String a = request.getParameter("a");
        String b = request.getParameter("b");
 
        try {
            // Convert strings to numbers and calculate sum
            int sum = Integer.parseInt(a) + Integer.parseInt(b);
 
            // Print HTML as a response for browser
            response.setContentType("text/html;charset=UTF-8");
            PrintWriter out = response.getWriter();
 
            out.println("<html>");
            out.println("<head> <title> CalculatorServlet </title> </head>");
            out.println("<body>");
            out.println("<h1> Sum == " + sum + "</h1>");
            out.println("</body>");
            out.println("</html>");
        } finally {
            out.close();
        }
    }
}