Станицы JSP могут получать отправленные данные, например, через параметры или в виде отправленных форм, так же, как это происходит в сервлете. Для этого внутри страницы jsp доступен объект request, который позволяет получить данные посредством следующих методов:
getParameter(String param)
: возвращает значение определенного параметра, название которого передается в метод. Если указанного параметра в запросе нет,
то возвращается значение null.
getParameterValues(String param)
: возвращает массив значений, который представляет определенный параметр. Если указанного параметра в запросе нет,
то возвращается значение null.
Например, определим в проекте файл postuser.jsp, который будет получать отправленные в запросе данные:
<!DOCTYPE html> <html> <head> <meta charset="UTF-8" /> <title>User Info</title> </head> <body> <p>Name: <%= request.getParameter("name") %></p> <p>Age: <%= request.getParameter("age") %></p> </body> </html>
В данном случае мы получаем два параметра: name и age.
Запустим приложение и передадим странице данные через строку запроса postuser.jsp?name=Bob&age=29:
Если для определенного параметра не передается значение, то страница получает значене null:
Подобным образом можно получать данные из отправленных форм. Например, определим в проекте файл index.html с формой ввода:
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>User Form</title> </head> <body> <form action="postuser.jsp"> Name: <input name="name" /> <br><br> Age: <input name="age" type="number" min=1 /> <br></br> <input type="submit" value="Submit" /> </form> </body> </html>
В данном случае форма предназначена для ввода имени и возаста пользователя. И по нажатию на кнопку данные формы уходят странице postuser.jsp.
Таким образом, после ввода данных и их отправке на странице index.html эти данные будут получены скриптом postuser.jsp:
Рассмотрим отправку более сложной формы. Определим в файле index.html следующий код:
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>User Form</title> </head> <body> <form action="postuser.jsp" method="POST"> Name: <input name="username" /> <br><br> Gender: <input type="radio" name="gender" value="female" checked />Female <input type="radio" name="gender" value="male" />Male <br><br> Country: <select name="country"> <option>Iran</option> <option>Turkey</option> <option>China</option> <option>Germany</option> </select> <br><br> Courses: <input type="checkbox" name="courses" value="JavaSE" checked />Java SE <input type="checkbox" name="courses" value="JavaFX" checked />Java FX <input type="checkbox" name="courses" value="JavaEE" checked />Java EE <br><br> <input type="submit" value="Submit" /> </form> </body> </html>
Здесь имеется сразу несколько полей ввода - обычное текстовое поле, выпадающий список select, набор радиокнопок и набор элементов checkbox, где пользователь одновременно может выбрать сразу несколько полей.
Для обработки этой формы определим в postuser.jsp следующий код:
<!DOCTYPE html> <html> <head> <meta charset="UTF-8" /> <title>User Info</title> </head> <body> <p>Name: <%= request.getParameter("username") %></p> <p>Country: <%= request.getParameter("country") %></p> <p>Gender: <%= request.getParameter("gender") %></p> <h4>Selected courses</h4> <ul> <% String[] courses = request.getParameterValues("courses"); for(String course: courses){ out.println("<li>" + course + "</li>"); } %> </ul> </body> </html>
Для тех полей, которые допускают выбор одного значения или представляют одно значение, все идентично: после слова param через точку указывается название поля. Но, например, набор чекбоксов имеет одно и то же имя - courses и позволяет выбрать сразу несколько значений. Эти значения мы можем получить в JSP через массив:
String[] courses = request.getParameterValues("courses");
И затем можно использовать цикл for для перебора массива и вывода на страницу его элементов.