CodeGym/Java Course/Module 3/Servlet-antwoorden vormgeven

Servlet-antwoorden vormgeven

Beschikbaar

3.1 HttpServletResponse-klasse

Na het aanroepen van service()uw servletmethode, genereert de webcontainer een reactie naar de client op basis van het HttpServletResponse. Dus als u op de een of andere manier de reactie op de klant wilt beïnvloeden, moet u dit object aanpassen.

Het antwoord van de server bestaat uit drie delen:

  • Statusregel (bijvoorbeeld: 200 OK)
  • Kopteksten
  • Reactie lichaam

En klassenmethoden HttpServletResponsezijn ook verdeeld in 3 groepen? Bijna:

methoden Beschrijving
1 void setStatus(int sc) Stelt de antwoordstatuscode in.
2 void sendError(int sc) Stuurt een fout naar de client met de opgegeven code.
3 void sendError(int sc, String msg) Verzendt een fout met de opgegeven code en een bericht naar de client.
4 void addHeader(String name, String value) Voegt een kop toe aan de lijst met antwoordkoppen.
5 void setHeader(String name, String value) Wijzigt de koptekst in de lijst met antwoordkoppen.
6 boolean containsHeader(String name) Controleert of de header al bestaat.
7 void addCookie(Cookie cookie) Voegt een cookie toe aan het antwoord.
8 void sendRedirect(String location) Leidt de client om naar een andere URL.
9 String encodeRedirectURL(String url) Codeert de opgegeven URL voor gebruik in de methode sendRedirect.
10 String encodeURL(String url) Codeert de opgegeven URL, inclusief de sessie-ID.
elf void setContentType(String type) Stelt het MimeType van het resultaat in.
12 void setContentLength(int len) Stelt de lengte van de hoofdtekst van het antwoord in.
13 void setCharacterEncoding(String charset) Stelt de antwoordcoderingsset in.
14 void setBufferSize(int size) Stelt de buffergrootte in voor de hoofdtekst van het antwoord.
15 boolean isCommitted() Controleert of de buffer al naar het antwoord is geschreven.
16 void flushBuffer() Schrijft de inhoud van de buffer naar het antwoord.
17 void reset() Reset alle gegevens die zijn opgeslagen in de buffer, headers en responscodes.
18 void resetBuffer() Wist de responsbuffer.

De methoden hier zijn vrij triviaal. Maar ik zal je hieronder een paar highlights geven.

bufferen . Het antwoord van uw servlet wordt naar een buffer geschreven, niet onmiddellijk naar de gebruiker gestuurd. Daarom kunt u op een bepaald moment (als er bijvoorbeeld een fout optreedt) alles resetten (wissen) dat naar de buffer is geschreven. U kunt zelfs de reset()-methode aanroepen en niet alleen de inhoud van de buffer wissen, maar ook de headers met de responscode.

3.2 omleiding()

Het tweede belangrijke punt is de omleiding. Als uw servlet besluit de client om te leiden naar een andere URL, moet u deze URL op de een of andere manier naar de client sturen. Dit kan met behulp van de sendRedirect.

Maar er is een belangrijke nuance. De URI kan een breder scala aan tekens bevatten dan is toegestaan ​​in de hoofdtekst van het antwoord. Daarom moet de URL eerst worden gecodeerd in een geldige tekenset voordat de methode wordt aangeroepen sendRedirect(). Hiervoor is een speciale methode encodeRedirectURL(String url). Gebruik het.

Omleiding voorbeeld:

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() methode

En nu zullen we leren hoe we onze tekst kunnen schrijven als een antwoordtekst. Om dit te doen heeft de klasse HttpServletResponseeen speciale methode getWriter()die een object retourneert PrintStream. Als iemand het is vergeten, dit is het type veld met de naam System.out.

Om wat tekst als een servletantwoord te schrijven, hebt u het volgende nodig:

  • Haal het PrintStream-object op door het response.getWriter().
  • Schrijf wat u denkt dat nodig is naar het PrintStream-object (alle gegevens worden naar de buffer geschreven).
  • Stuur de buffer naar de gebruiker door de methode close()op de PrintStream aan te roepen.

Laten we een servlet schrijven die twee getallen optelt aen bhet resultaat teruggeeft aan de gebruiker:

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();
        }
    }
}
Opmerkingen
  • Populair
  • Nieuw
  • Oud
Je moet ingelogd zijn om opmerkingen te kunnen maken
Deze pagina heeft nog geen opmerkingen