2.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.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();
        }
    }
}