JSP - Обработка форм

В этой главе мы обсудим обработку форм в JSP. Вы, должно быть, сталкивались со многими ситуациями, когда вам нужно было передать некоторую информацию из вашего браузера на веб-сервер и, в конечном итоге, в вашу бэкэнд-программу. Браузер использует два метода для передачи этой информации на веб-сервер. Эти методы - метод GET и метод POST.

Методы обработки форм

Давайте теперь обсудим методы обработки форм.

GET метод

Метод GET отправляет закодированную информацию о пользователе, добавленную к запросу страницы. Страница и закодированная информация разделяются знаком? характер следующим образом -

http://www.test.com/hello?key1=value1&key2=value2

Метод GET - это метод по умолчанию для передачи информации из браузера на веб-сервер, и он создает длинную строку, которая появляется в вашем браузере. Location:box. Рекомендуется не использовать метод GET. если у вас есть пароль или другая конфиденциальная информация для передачи на сервер.

Метод GET имеет ограничение по размеру: only 1024 characters can be in a request string.

Эта информация передается с использованием QUERY_STRING header и будет доступен через переменную среды QUERY_STRING, которую можно обработать с помощью getQueryString() и getParameter() методы объекта запроса.

Метод POST

Обычно более надежным методом передачи информации в серверную программу является метод POST.

Этот метод упаковывает информацию точно так же, как метод GET, но вместо того, чтобы отправлять ее в виде текстовой строки после символа? в URL-адресе он отправляет его как отдельное сообщение. Это сообщение поступает в бэкэнд-программу в виде стандартного ввода, который вы можете проанализировать и использовать для обработки.

JSP обрабатывает этот тип запросов, используя getParameter() метод чтения простых параметров и getInputStream() метод чтения потока двоичных данных, поступающих от клиента.

Чтение данных формы с использованием JSP

JSP обрабатывает парсинг данных формы автоматически, используя следующие методы в зависимости от ситуации:

  • getParameter() - Вы звоните request.getParameter() для получения значения параметра формы.

  • getParameterValues() - Вызовите этот метод, если параметр появляется более одного раза и возвращает несколько значений, например флажок.

  • getParameterNames() - Вызовите этот метод, если вы хотите получить полный список всех параметров в текущем запросе.

  • getInputStream() - Вызовите этот метод для чтения потока двоичных данных, поступающего от клиента.

Пример метода GET с использованием URL

Следующий URL-адрес передаст два значения программе HelloForm с помощью метода GET.

http://localhost:8080/main.jsp?first_name=ZARA&last_name=ALI

Ниже main.jspПрограмма 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:box. Это даст следующий результат -

Использование метода GET для чтения данных формы

  • First Name: ZARA

  • Last Name: ALI

Пример метода GET с использованием формы

Ниже приведен пример, в котором два значения передаются с помощью HTML FORM и кнопки отправки. Мы собираемся использовать тот же 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 directory. Когда вы получите доступhttp://localhost:8080/Hello.htm, вы получите следующий результат.

<p> Попробуйте ввести имя и фамилию, а затем нажмите кнопку отправки, чтобы увидеть результат на локальном компьютере, на котором запущен tomcat. На основе предоставленных входных данных будет получен результат, аналогичный упомянутому в приведенном выше примере.

Пример метода POST с использованием формы

Давайте сделаем небольшую модификацию в приведенном выше JSP, чтобы обрабатывать как GET, так и метод POST. Нижеmain.jsp Программа JSP для обработки ввода, предоставленного веб-браузером, с использованием методов GET или POST.

Фактически, в приведенном выше 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 directory. Когда вы получаете доступhttp://localhost:8080/Hello.htm, вы получите следующий результат.

Попробуйте ввести имя и фамилию, а затем нажмите кнопку отправки, чтобы увидеть результат на вашем локальном компьютере, на котором запущен tomcat.

На основе предоставленных входных данных вы получите те же результаты, что и в приведенных выше примерах.

Передача данных флажка в программу JSP

Флажки используются, когда требуется выбрать более одного параметра.

Ниже приведен пример HTML code, 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

Чтение всех параметров формы

Ниже приводится общий пример, в котором используется 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, чтобы прочитать данные любой другой формы, в которой есть другие объекты, такие как текстовое поле, переключатель или раскрывающийся список и т. Д.