1. Клас HttpServletRequest

Більшість роботи твій сервлет повинен зробити на основі інформації, яку він отримав із запиту. За нього відповідає об'єкт HttpServletRequest, який контейнер передасть до твого сервлета (у метод service або методи doGet(), doPost() тощо).

Цей об'єкт має досить багато методів, оскільки він просто зберігає дані запиту, а через нього можна взаємодіяти з контейнером.

Методи можна розділити на 2 великі групи:

  • Методи, пов'язані з авторизацією користувача
  • Методи роботи з даними запиту

Методи авторизації користувача я наведу у вигляді таблиці, але розбирати їх ми не будемо. Справа в тому, що їх дуже рідко використовують для авторизації користувача. Усі популярні фреймворки використовують свої, набагато прогресивніші підходи до авторизації.

Я повинен навести їхній список, але знову ж таки я не бачив, щоб хтось їх використовував.

Метод Опис
1 authenticate(HttpServletResponse) Виконує автентифікацію response
2 changeSessionId() Примусово змінює ID сесії
3 getAuthType() Повертає тип автентифікації, який використовується: ASIC_AUTH, FORM_AUTH, CLIENT_CERT_AUTH, DIGEST_AUTH
4 getRemoteUser() Повертає login користувача
5 getRequestedSessionId() Повертає SessionID клієнта
6 getSession() Повертає об'єкт HttpSession
7 getUserPrincipal() Повертає об'єкт java.security.Principal
8 login(username, password) Виконує логін користувача
9 logout() Розлогінює сесію користувача

2. Дані запиту

Друга група методів набагато цікавіша. Які дані у нас є в запиті?

  • http-метод
  • URI
  • Параметри
  • Заголовки

Подивимося, які методи є для роботи з ними:

Метод Опис
1 getMethod() Повертає HTTP-метод: GET, POST, DELETE, …
2 getRequestURI() Повертає URI запиту: http://javarush.com/my/data
3 getRequestURL() Повертає URL-адресау запиту: http://javarush.com/my/data
4 getQueryString() Повертає Query, тобто все, що йде після знаку?
5 getParameterMap() Повертає список параметрів запиту
6 getParameter(String name) Повертає значення параметра на ім'я
7 getContentType() Повертає MimeType request body
8 getReader() Reader, щоб прочитати request body як текст
9 getInputStream() InputStream, щоб прочитати request body як byte[]
10 getSession() Повертає об'єкт HttpSession
11 getCookies() Повертає масив об'єктів Cookie[]
12 getHeaderNames() Повертає список заголовків, лише імена
13 getHeader(String name) Повертає значення заголовка на ім'я
14 getServletPath() Повертає частину URL, яка відноситься до сервлета
15 getContextPath() Повертає частину URI, яка задає контент запиту

І це навіть не всі методи.

Хоча після того, як ми вивчили протокол HTTP і навчилися працювати з HttpClient, тут уже все більш-менш знайоме, чи не так?

Давай напишемо сервлет, у який можна передати текст і колір, а він повертатиме HTML-сторінку з цим текстом, написаним вказаним кольором. Як тобі ідея?

Почнемо з написання свого сервлета:


public class ColorTextServlet extends HttpServlet {
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws Exception {
          //напишіть тут ваш код
    }
}

Тепер нам потрібно отримати текст і колір, що передалися до URI користувачем:


public class ColorTextServlet extends HttpServlet {
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws Exception {

        // Отримуємо параметр “text” і “color” із запиту
        String text= request.getParameter("text");
        String color = request.getParameter("color");
 
    }
}

І, нарешті, потрібно вивести текст у вигляді HTML. Ми розберемо це у наступній лекції, але тут я трохи підкажу:


public class ColorTextServlet extends HttpServlet {
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws Exception {

        // Отримуємо параметр “text” і “color” із запиту
        String text = request.getParameter("text");
        String color = request.getParameter("color");


        // Друкуємо HTML як відповідь для браузера
        response.setContentType("text/html;charset=UTF-8");
        PrintWriter out =  response.getWriter();
        try {
            out.println("<html>");
            out.println("<head> <title> ColorTextServlet </title> </head>");
            out.println("<body>");
            out.println("<h1 style="color:"+color+">"+text+"</h1>");
            out.println("</body>");
            out.println("</html>");
        } finally {
            out.close();
        }
    }
}