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();
}
}
}
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ