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