По умолчанию Expression Language предоставляет ряд встроенных объектов, которые позволяют использовать различные аспекты запроса:
param: объект, который хранит все переданные странице параметры
paramValues: хранит массив значений для определенного параметра (если для параметра передается сразу несколько значений)
header: хранит все заголовки запроса
headerValues: предоставляет массив значений для определенного заголовка запроса
cookie: предоставляет доступ к отправленным в запросе кукам
initParam: возвращает значение для определенного параметра из элемента context-param из файла web.xml
pageContext: предоставляет доступ к объекту PageContext, который представляет контекст текущей страницы jsp
Рассмотрим использование некоторых объектов.
Определим следующую страницу postuser.jsp:
<!DOCTYPE html> <html> <head> <meta charset="UTF-8" /> <title>User Info</title> </head> <body> <p>Name: ${param.name}</p> <p>Age: ${param.age}</p> </body> </html>
Через объект param здесь получаем из запроса значения параметров name и age. Значения для параметров можно передать как через строку запроса, так и через отправку формы. Например, передача через строку запроса:
Также мы можем определить форму, например:
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>User Form</title> </head> <body> <form action="postuser.jsp" method="post"> Name: <input name="name" /> <br><br> Age: <input name="age" type="number" min=1 /> <br></br> <input type="submit" value="Submit" /> </form> </body> </html>
И через эту форму передать данные в jsp:
Если с одним параметром связано несколько значений, то можно использовать объект paramValues. Например, на станице html есть форма, где пользователь может ввести несколько своих телефонов:
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>User Form</title> </head> <body> <form action="postuser.jsp" method="post"> Name: <input name="name" /> <br><br> Main Phone: <input name="phone" /> <br></br> Additional Phone: <input name="phone" /> <br></br> <input type="submit" value="Submit" /> </form> </body> </html>
И на странице postuser.jsp мы можем получить все введенные телефоны через paramValues:
<!DOCTYPE html> <html> <head> <meta charset="UTF-8" /> <title>User Info</title> </head> <body> <p>Name: ${param.name}</p> <p>Phone 1: ${paramValues.phone[0]}</p> <p>Phone 2: ${paramValues.phone[1]}</p> </body> </html>
После "paramValues" идет название параметра, причем параметр фактически представляет массив, и через индексы мы можем получить отдельные введенные данные.
Допустим, в сервлете устанавливаются куки:
public class HelloServlet extends HttpServlet { protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { Cookie cookie = new Cookie("userName", "Sam"); response.addCookie(cookie); } }
Получение этой куки в jsp:
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Java Server Page</title> </head> <body> <div> <p>From cookie: ${cookie.userName.value}</p> </div> </body> </html>
Получим даные о юзер-агенте пользователя:
<!DOCTYPE html> <html> <head> <meta charset="UTF-8" /> <title>User Info</title> </head> <body> <p>User-Agent: ${header["User-Agent"]}</p> <p>Host: ${header.host}</p> </body> </html>
Если название заголовка представляет сложное слово с дефисами, как "User-Agent", то для получения его значения используется конструкция
header["название_заголовка"]