В этой главе мы обсудим обработку форм в JSP. Вы, должно быть, сталкивались со многими ситуациями, когда вам нужно передать некоторую информацию из вашего браузера на веб-сервер и, в конечном итоге, в вашу бэкэнд-программу. Браузер использует два метода для передачи этой информации на веб-сервер. Эти методы — метод GET и метод POST.
Методы обработки формы
Давайте теперь обсудим методы обработки форм.
ПОЛУЧИТЬ метод
Метод GET отправляет закодированную информацию пользователя, добавленную к запросу страницы. Страница и закодированная информация разделены знаком? персонаж следующим образом —
http://www.test.com/hello?key1=value1&key2=value2
Метод GET является методом по умолчанию для передачи информации из браузера на веб-сервер, и он генерирует длинную строку, которая появляется в поле Location: вашего браузера. Рекомендуется, чтобы метод GET лучше не использовать. если у вас есть пароль или другая конфиденциальная информация для передачи на сервер.
Метод GET имеет ограничение по размеру: в строке запроса может быть только 1024 символа .
Эта информация передается с использованием заголовка QUERY_STRING и будет доступна через переменную среды QUERY_STRING, которую можно обработать с помощью методов getQueryString () и getParameter () объекта запроса.
Метод POST
Как правило, более надежным методом передачи информации в бэкэнд-программу является метод POST.
Этот метод упаковывает информацию точно так же, как метод GET, но вместо отправки ее в виде текстовой строки после символа? в URL он отправляет его как отдельное сообщение. Это сообщение поступает в бэкэнд-программу в виде стандартного ввода, который вы можете проанализировать и использовать для обработки.
JSP обрабатывает запросы такого типа, используя метод getParameter () для чтения простых параметров и метод getInputStream () для чтения потока двоичных данных, поступающих от клиента.
Чтение данных формы с использованием JSP
JSP автоматически обрабатывает данные формы, используя следующие методы в зависимости от ситуации:
-
getParameter () — Вы вызываете метод request.getParameter (), чтобы получить значение параметра формы.
-
getParameterValues () — Вызовите этот метод, если параметр появляется более одного раза и возвращает несколько значений, например, флажок.
-
getParameterNames () — вызовите этот метод, если вы хотите получить полный список всех параметров в текущем запросе.
-
getInputStream () — вызывает этот метод для чтения потока двоичных данных, поступающих от клиента.
getParameter () — Вы вызываете метод request.getParameter (), чтобы получить значение параметра формы.
getParameterValues () — Вызовите этот метод, если параметр появляется более одного раза и возвращает несколько значений, например, флажок.
getParameterNames () — вызовите этот метод, если вы хотите получить полный список всех параметров в текущем запросе.
getInputStream () — вызывает этот метод для чтения потока двоичных данных, поступающих от клиента.
Пример метода GET с использованием URL
Следующий URL-адрес передаст два значения программе HelloForm с помощью метода GET.
HTTP: // локальный: 8080 / main.jsp first_name = ZARA & last_name = ALI
Ниже приведена JSP-программа main.jsp для обработки ввода, получаемого от веб-браузера. Мы собираемся использовать метод getParameter (), который позволяет очень легко получить доступ к переданной информации —
<html> <head> <title>Using GET Method to Read Form Data</title> </head> <body> <h1>Using GET Method to Read Form Data</h1> <ul> <li><p><b>First Name:</b> <%= request.getParameter("first_name")%> </p></li> <li><p><b>Last Name:</b> <%= request.getParameter("last_name")%> </p></li> </ul> </body> </html>
Теперь введите http: // localhost: 8080 / main.jsp? First_name = ZARA & last_name = ALI в поле Location: вашего браузера. Это сгенерирует следующий результат —
Использование метода GET для чтения данных формы
|
Имя : ZARA
Фамилия : АЛИ
Пример метода GET с использованием формы
Ниже приведен пример, который передает два значения, используя HTML-форму и кнопку отправки. Мы будем использовать тот же JSP main.jsp для обработки этого ввода.
<html> <body> <form action = "main.jsp" method = "GET"> First Name: <input type = "text" name = "first_name"> <br /> Last Name: <input type = "text" name = "last_name" /> <input type = "submit" value = "Submit" /> </form> </body> </html>
Сохраните этот HTML-файл в файле Hello.htm и поместите его в каталог <Tomcat-installation-directory> / webapps / ROOT . Когда вы получите доступ к http: // localhost: 8080 / Hello.htm , вы получите следующий вывод.
<p> Попробуйте ввести имя и фамилию, а затем нажмите кнопку отправки, чтобы увидеть результат на локальном компьютере, на котором запущен tomcat. На основе предоставленного ввода, он будет генерировать результат, аналогичный указанному в приведенном выше примере.
Пример метода POST с использованием формы
Давайте сделаем небольшую модификацию в вышеупомянутой JSP для обработки как метода GET, так и метода POST. Ниже приведена JSP-программа main.jsp, которая обрабатывает ввод данных через веб-браузер с использованием методов GET или POST.
Infact нет никаких изменений в вышеупомянутой JSP, потому что изменен единственный способ передачи параметров и никакие двоичные данные не передаются в программу JSP. Понятия, связанные с обработкой файлов, будут объяснены в отдельной главе, где нам нужно прочитать поток двоичных данных.
<html> <head> <title>Using GET and POST Method to Read Form Data</title> </head> <body> <center> <h1>Using POST Method to Read Form Data</h1> <ul> <li><p><b>First Name:</b> <%= request.getParameter("first_name")%> </p></li> <li><p><b>Last Name:</b> <%= request.getParameter("last_name")%> </p></li> </ul> </body> </html>
Ниже приводится содержимое файла Hello.htm —
<html> <body> <form action = "main.jsp" method = "POST"> First Name: <input type = "text" name = "first_name"> <br /> Last Name: <input type = "text" name = "last_name" /> <input type = "submit" value = "Submit" /> </form> </body> </html>
Давайте теперь сохраним main.jsp и hello.htm в каталоге <Tomcat-installationdirectory> / webapps / ROOT . При доступе к http: // localhost: 8080 / Hello.htm вы получите следующий вывод.
Попробуйте ввести имя и фамилию, а затем нажмите кнопку отправки, чтобы увидеть результат на локальном компьютере, на котором запущен tomcat.
На основании предоставленных данных вы получите результаты, аналогичные приведенным выше.
Передача данных флажка в программу JSP
Флажки используются, когда требуется выбрать более одной опции.
Ниже приведен пример HTML-кода CheckBox.htm для формы с двумя флажками.
<html> <body> <form action = "main.jsp" method = "POST" target = "_blank"> <input type = "checkbox" name = "maths" checked = "checked" /> Maths <input type = "checkbox" name = "physics" /> Physics <input type = "checkbox" name = "chemistry" checked = "checked" /> Chemistry <input type = "submit" value = "Select Subject" /> </form> </body> </html>
Приведенный выше код сгенерирует следующий результат —
Далее следует программа JSP main.jsp для обработки ввода, заданного веб-браузером для кнопки-флажка.
<html> <head> <title>Reading Checkbox Data</title> </head> <body> <h1>Reading Checkbox Data</h1> <ul> <li><p><b>Maths Flag:</b> <%= request.getParameter("maths")%> </p></li> <li><p><b>Physics Flag:</b> <%= request.getParameter("physics")%> </p></li> <li><p><b>Chemistry Flag:</b> <%= request.getParameter("chemistry")%> </p></li> </ul> </body> </html>
Вышеуказанная программа сгенерирует следующий результат —
Reading Checkbox Data
-
Maths Flag : : on
-
Physics Flag: : null
-
Chemistry Flag: : on
Maths Flag : : on
Physics Flag: : null
Chemistry Flag: : on
Чтение всех параметров формы
Ниже приведен общий пример, который использует метод getParameterNames () HttpServletRequest для чтения всех доступных параметров формы. Этот метод возвращает перечисление, которое содержит имена параметров в неуказанном порядке.
Как только у нас будет Enumeration, мы можем зациклить Enumeration стандартным способом, используя метод hasMoreElements (), чтобы определить, когда остановиться, и используя метод nextElement (), чтобы получить имя каждого параметра.
<%@ page import = "java.io.*,java.util.*" %> <html> <head> <title>HTTP Header Request Example</title> </head> <body> <center> <h2>HTTP Header Request Example</h2> <table width = "100%" border = "1" align = "center"> <tr bgcolor = "#949494"> <th>Param Name</th> <th>Param Value(s)</th> </tr> <% Enumeration paramNames = request.getParameterNames(); while(paramNames.hasMoreElements()) { String paramName = (String)paramNames.nextElement(); out.print("<tr><td>" + paramName + "</td>\n"); String paramValue = request.getHeader(paramName); out.println("<td> " + paramValue + "</td></tr>\n"); } %> </table> </center> </body> </html>
Ниже приводится содержание Hello.htm —
<html> <body> <form action = "main.jsp" method = "POST" target = "_blank"> <input type = "checkbox" name = "maths" checked = "checked" /> Maths <input type = "checkbox" name = "physics" /> Physics <input type = "checkbox" name = "chemistry" checked = "checked" /> Chem <input type = "submit" value = "Select Subject" /> </form> </body> </html>
Теперь попробуйте вызвать JSP с помощью приведенного выше Hello.htm; это сгенерирует результат, подобный приведенному ниже, на основе предоставленного ввода —
Чтение всех параметров формы
Имя параметра | Значение параметра (ов) |
---|---|
математика | на |
химия | на |
Вы можете попробовать вышеупомянутую JSP, чтобы прочитать данные любой другой формы, имеющие другие объекты, такие как текстовое поле, переключатель или раскрывающийся список и т. Д.