CodeGym/Java курс/Модул 3/Оформяне на сървлет отговори

Оформяне на сървлет отговори

На разположение

3.1 Клас HttpServletResponse

След като извика service()вашия сервлет метод, уеб контейнерът ще генерира отговор на клиента въз основа на HttpServletResponse. Така че, ако искате по няHowъв начин да повлияете на отговора на клиента, тогава трябва да промените този обект.

Отговорът на сървъра се състои от три части:

  • Ред на състоянието (например: 200 OK)
  • Заглавки
  • Тяло за отговор

И методите на класа HttpServletResponseсъщо са разделени на 3 групи? почти:

Методи Описание
1 void setStatus(int sc) Задава codeа на състоянието на отговора.
2 void sendError(int sc) Изпраща грешка на клиента с посочения code.
3 void sendError(int sc, String msg) Изпраща грешка с посочения code и съобщение до клиента.
4 void addHeader(String name, String value) Добавя заглавка към списъка със заглавки на отговор.
5 void setHeader(String name, String value) Променя заглавката в списъка със заглавки на отговор.
6 boolean containsHeader(String name) Проверява дали заглавката вече съществува.
7 void addCookie(Cookie cookie) Добавя бисквитка към отговора.
8 void sendRedirect(String location) Пренасочва клиента към различен URL address.
9 String encodeRedirectURL(String url) Кодира посочения URL за използване в метода sendRedirect.
10 String encodeURL(String url) Кодира посочения URL, включително ID на сесията.
единадесет void setContentType(String type) Задава MimeType на резултата.
12 void setContentLength(int len) Задава дължината на тялото на отговора.
13 void setCharacterEncoding(String charset) Задава набора за codeиране на отговора.
14 void setBufferSize(int size) Задава размера на буфера за тялото на отговора.
15 boolean isCommitted() Проверява дали буферът вече е записан в отговора.
16 void flushBuffer() Записва съдържанието на буфера в отговора.
17 void reset() Нулира всички данни, които се съхраняват в буфера, заглавки и codeове на отговор.
18 void resetBuffer() Изчиства буфера за отговор.

Методите тук са доста тривиални. Но ще ви дам няколко акцента по-долу.

буфер . Отговорът на вашия сървлет се записва в буфер, а не се изпраща веднага на потребителя. Следователно на няHowъв етап (ако например възникне грешка) можете да нулирате (изтриете) всичко, което е записано в буфера. Можете дори да извикате метода reset() и да изтриете не само съдържанието на буфера, но и заглавките с codeа на отговора.

3.2 пренасочване()

Вторият важен момент е пренасочването. Ако вашият сървлет реши да пренасочи клиента към друг URL, тогава трябва по няHowъв начин да изпратите този URL на клиента. Това може да стане с помощта на sendRedirect.

Но има важен нюанс. URI може да съдържа по-широк диапазон от знаци, отколкото е позволено в тялото на отговора. Следователно URL addressът трябва първо да бъде codeиран във валиден набор от знаци, преди да извика метода sendRedirect(). За това има специален метод encodeRedirectURL(String url). Използваи го.

Пример за пренасочване:

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

А сега ще научим How да напишем нашия текст като тяло на отговор. За да направи това, класът HttpServletResponseима специален метод getWriter(), който връща обект PrintStream. Ако някой е забравил, това е типът поле с името System.out.

За да напишете няHowъв текст като отговор на сървлет, трябва:

  • Вземете обекта PrintStream, като извикате response.getWriter().
  • Напишете Howвото смятате за необходимо в обекта PrintStream (всички данни ще бъдат записани в буфера).
  • Изпратете буфера на потребителя, като извикате метода close()на PrintStream.

Нека напишем сървлет, който събира две числа aи bвръща резултата на потребителя:

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();
        }
    }
}
Коментари
  • Популярен
  • Нов
  • Стар
Трябва да сте влезли, за да оставите коментар
Тази страница все още няма коментари