Serwlety - dane formularza

Musiałeś spotkać się z wieloma sytuacjami, w których musisz przekazać pewne informacje z przeglądarki na serwer WWW, a ostatecznie do programu zaplecza. Przeglądarka używa dwóch metod przekazywania tych informacji do serwera WWW. Te metody to metoda GET i metoda POST.

POBIERZ metodę

Metoda GET wysyła zakodowane informacje o użytkowniku dołączone do żądania strony. Strona i zakodowane informacje są oddzielone znakiem? (znak zapytania) symbol w następujący sposób -

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

Metoda GET jest domyślną metodą przekazywania informacji z przeglądarki do serwera WWW i tworzy długi ciąg znaków, który pojawia się w polu Lokalizacja: przeglądarki. Nigdy nie używaj metody GET, jeśli masz hasło lub inne poufne informacje do przekazania na serwer. Metoda GET ma ograniczenie rozmiaru: w ciągu żądania można użyć tylko 1024 znaków.

Ta informacja jest przekazywana za pomocą nagłówka QUERY_STRING i będzie dostępna poprzez zmienną środowiskową QUERY_STRING, a serwlet obsługuje tego typu żądania używając doGet() metoda.

Metoda POST

Generalnie bardziej niezawodną metodą przekazywania informacji do programu zaplecza jest metoda POST. Spowoduje to pakowanie informacji w dokładnie taki sam sposób jak metoda GET, ale zamiast wysyłać je jako ciąg tekstowy po znaku? (znak zapytania) w adresie URL, który wysyła jako oddzielną wiadomość. Ta wiadomość przychodzi do programu zaplecza w postaci standardowego wejścia, które możesz przeanalizować i użyć do przetwarzania. Serwlet obsługuje tego typu żądania przy użyciudoPost() metoda.

Odczytywanie danych formularza za pomocą serwletu

Serwlety automatycznie obsługują analizę danych z formularza przy użyciu następujących metod, w zależności od sytuacji -

  • getParameter() - Wywołujesz metodę request.getParameter (), aby uzyskać wartość parametru formularza.

  • getParameterValues() - Wywołaj tę metodę, jeśli parametr występuje więcej niż jeden raz i zwraca wiele wartości, na przykład pole wyboru.

  • getParameterNames() - Wywołaj tę metodę, jeśli chcesz uzyskać pełną listę wszystkich parametrów w bieżącym żądaniu.

Przykład metody GET przy użyciu adresu URL

Oto prosty adres URL, który przekazuje dwie wartości do programu HelloForm przy użyciu metody GET.

http://localhost:8080/HelloForm?first_name = ZARA&last_name = ALI

Podano poniżej HelloForm.javaprogram serwletu do obsługi danych wejściowych podawanych przez przeglądarkę internetową. Będziemy używaćgetParameter() metoda, która bardzo ułatwia dostęp do przekazywanych informacji -

// Import required java libraries
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;

// Extend HttpServlet class
public class HelloForm extends HttpServlet {
 
   public void doGet(HttpServletRequest request, HttpServletResponse response)
      throws ServletException, IOException {
      
      // Set response content type
      response.setContentType("text/html");

      PrintWriter out = response.getWriter();
      String title = "Using GET Method to Read Form Data";
      String docType =
         "<!doctype html public \"-//w3c//dtd html 4.0 " + "transitional//en\">\n";
         
      out.println(docType +
         "<html>\n" +
            "<head><title>" + title + "</title></head>\n" +
            "<body bgcolor = \"#f0f0f0\">\n" +
               "<h1 align = \"center\">" + title + "</h1>\n" +
               "<ul>\n" +
                  "  <li><b>First Name</b>: "
                  + request.getParameter("first_name") + "\n" +
                  "  <li><b>Last Name</b>: "
                  + request.getParameter("last_name") + "\n" +
               "</ul>\n" +
            "</body>" +
         "</html>"
      );
   }
}

Zakładając, że twoje środowisko jest poprawnie skonfigurowane, skompiluj HelloForm.java w następujący sposób -

$ javac HelloForm.java

Jeśli wszystko pójdzie dobrze, powyższa kompilacja da HelloForm.classplik. Następnie musiałbyś skopiować ten plik klasy do <Tomcat-installationdirectory> / webapps / ROOT / WEB-INF / classes i utworzyć następujące wpisy wweb.xml plik znajdujący się w <Tomcat-installation-directory> / webapps / ROOT / WEB-INF /

<servlet>
   <servlet-name>HelloForm</servlet-name>
   <servlet-class>HelloForm</servlet-class>
</servlet>

<servlet-mapping>
   <servlet-name>HelloForm</servlet-name>
   <url-pattern>/HelloForm</url-pattern>
</servlet-mapping>

Teraz wpisz http: // localhost: 8080 / HelloForm? First_name = ZARA & last_name = ALI w polu Lokalizacja: przeglądarki i upewnij się, że uruchomiłeś już serwer Tomcat, przed uruchomieniem powyższego polecenia w przeglądarce. Dałoby to następujący wynik -

Using GET Method to Read Form Data

  • First Name: ZARA
  • Last Name: ALI

Przykład metody GET przy użyciu formularza

Oto prosty przykład, który przekazuje dwie wartości za pomocą HTML FORM i przycisku przesyłania. Będziemy używać tego samego Servlet HelloForm do obsługi tego wejścia.

<html>
   <body>
      <form action = "HelloForm" 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>

Zachowaj ten kod HTML w pliku Hello.htm i umieść go w katalogu <Tomcat-installationdirectory> / webapps / ROOT. Jeśli chcesz uzyskać dostęp do http: // localhost: 8080 / Hello.htm , oto rzeczywiste dane wyjściowe powyższego formularza.

Spróbuj wpisać Imię i Nazwisko, a następnie kliknij przycisk Prześlij, aby zobaczyć wynik na komputerze lokalnym, na którym działa Tomcat. Na podstawie dostarczonych danych wejściowych wygeneruje podobny wynik, jak wspomniano w powyższym przykładzie.

Przykład metody POST przy użyciu formularza

Zróbmy trochę modyfikacji w powyższym aplecie, aby mógł obsługiwać metody GET i POST. Poniżej jestHelloForm.java program serwletowy do obsługi danych wejściowych podawanych przez przeglądarkę internetową przy użyciu metod GET lub POST.

// Import required java libraries
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;

// Extend HttpServlet class
public class HelloForm extends HttpServlet {

   // Method to handle GET method request.
   public void doGet(HttpServletRequest request, HttpServletResponse response)
      throws ServletException, IOException {
      
      // Set response content type
      response.setContentType("text/html");

      PrintWriter out = response.getWriter();
      String title = "Using GET Method to Read Form Data";
      String docType =
         "<!doctype html public \"-//w3c//dtd html 4.0 " +
         "transitional//en\">\n";
         
      out.println(docType +
         "<html>\n" +
            "<head><title>" + title + "</title></head>\n" +
            "<body bgcolor = \"#f0f0f0\">\n" +
               "<h1 align = \"center\">" + title + "</h1>\n" +
               "<ul>\n" +
                  "  <li><b>First Name</b>: "
                  + request.getParameter("first_name") + "\n" +
                  "  <li><b>Last Name</b>: "
                  + request.getParameter("last_name") + "\n" +
               "</ul>\n" +
            "</body>"
         "</html>"
      );
   }

   // Method to handle POST method request.
   public void doPost(HttpServletRequest request, HttpServletResponse response)
      throws ServletException, IOException {

      doGet(request, response);
   }
}

Teraz skompiluj i wdróż powyższy serwlet i przetestuj go przy użyciu Hello.htm z metodą POST w następujący sposób -

<html>
   <body>
      <form action = "HelloForm" 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>

Oto rzeczywiste dane wyjściowe powyższego formularza, spróbuj wprowadzić imię i nazwisko, a następnie kliknij przycisk przesyłania, aby zobaczyć wynik na komputerze lokalnym, na którym działa Tomcat.

Na podstawie dostarczonych danych wejściowych wygenerowałoby podobny wynik, jak wspomniano w powyższych przykładach.

Przekazywanie danych pola wyboru do programu serwletowego

Pola wyboru są używane, gdy wymagane jest wybranie więcej niż jednej opcji.

Oto przykładowy kod HTML, CheckBox.htm, dla formularza z dwoma polami wyboru

<html>
   <body>
      <form action = "CheckBox" 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>

Wynikiem tego kodu jest następująca forma

Poniżej podano serwlet CheckBox.java do obsługi danych wejściowych podawanych przez przeglądarkę internetową dla przycisku pola wyboru.

// Import required java libraries
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;

// Extend HttpServlet class
public class CheckBox extends HttpServlet {
 
   // Method to handle GET method request.
   public void doGet(HttpServletRequest request, HttpServletResponse response)
      throws ServletException, IOException {
      
      // Set response content type
      response.setContentType("text/html");

      PrintWriter out = response.getWriter();
      String title = "Reading Checkbox Data";
      String docType =
         "<!doctype html public \"-//w3c//dtd html 4.0 " + "transitional//en\">\n";

      out.println(docType +
         "<html>\n" +
            "<head><title>" + title + "</title></head>\n" +
            "<body bgcolor = \"#f0f0f0\">\n" +
               "<h1 align = \"center\">" + title + "</h1>\n" +
               "<ul>\n" +
                  "  <li><b>Maths Flag : </b>: "
                  + request.getParameter("maths") + "\n" +
                  "  <li><b>Physics Flag: </b>: "
                  + request.getParameter("physics") + "\n" +
                  "  <li><b>Chemistry Flag: </b>: "
                  + request.getParameter("chemistry") + "\n" +
               "</ul>\n" +
            "</body>"
         "</html>"
      );
   }

   // Method to handle POST method request.
   public void doPost(HttpServletRequest request, HttpServletResponse response)
      throws ServletException, IOException {
      
      doGet(request, response);
   }
}

W powyższym przykładzie wyświetli następujący wynik -

Reading Checkbox Data

  • Maths Flag : : on
  • Physics Flag: : null
  • Chemistry Flag: : on

Odczytywanie wszystkich parametrów formularza

Poniżej znajduje się ogólny przykład, w którym zastosowano getParameterNames()metoda HttpServletRequest, aby odczytać wszystkie dostępne parametry formularza. Ta metoda zwraca Enumeration, która zawiera nazwy parametrów w nieokreślonej kolejności

Gdy mamy już Enumeration, możemy zapętlić Enumeration w standardowy sposób, używając metody hasMoreElements () do określenia, kiedy zatrzymać i używając metody nextElement () , aby uzyskać nazwę każdego parametru.

// Import required java libraries
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.util.*;

// Extend HttpServlet class
public class ReadParams extends HttpServlet {
 
   // Method to handle GET method request.
   public void doGet(HttpServletRequest request, HttpServletResponse response)
      throws ServletException, IOException {
      
      // Set response content type
      response.setContentType("text/html");

      PrintWriter out = response.getWriter();
      String title = "Reading All Form Parameters";
      String docType =
         "<!doctype html public \"-//w3c//dtd html 4.0 " + "transitional//en\">\n";

      out.println(docType +
         "<html>\n" +
         "<head><title>" + title + "</title></head>\n" +
         "<body bgcolor = \"#f0f0f0\">\n" +
         "<h1 align = \"center\">" + title + "</h1>\n" +
         "<table width = \"100%\" border = \"1\" align = \"center\">\n" +
         "<tr bgcolor = \"#949494\">\n" +
            "<th>Param Name</th>"
            "<th>Param Value(s)</th>\n"+
         "</tr>\n"
      );

      Enumeration paramNames = request.getParameterNames();

      while(paramNames.hasMoreElements()) {
         String paramName = (String)paramNames.nextElement();
         out.print("<tr><td>" + paramName + "</td>\n<td>");
         String[] paramValues = request.getParameterValues(paramName);

         // Read single valued data
         if (paramValues.length == 1) {
            String paramValue = paramValues[0];
            if (paramValue.length() == 0)
               out.println("<i>No Value</i>");
               else
               out.println(paramValue);
         } else {
            // Read multiple valued data
            out.println("<ul>");

            for(int i = 0; i < paramValues.length; i++) {
               out.println("<li>" + paramValues[i]);
            }
            out.println("</ul>");
         }
      }
      out.println("</tr>\n</table>\n</body></html>");
   }
   
   // Method to handle POST method request.
   public void doPost(HttpServletRequest request, HttpServletResponse response)
      throws ServletException, IOException {
      
      doGet(request, response);
   }
}

Teraz wypróbuj powyższy serwlet z następującym formularzem -

<html>
   <body>
      <form action = "ReadParams" 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>

Teraz wywołanie serwletu przy użyciu powyższego formularza wygeneruje następujący wynik -

Reading All Form Parameters

Param Name Param Value(s)
maths on
chemistry on

Możesz wypróbować powyższy serwlet, aby odczytać dane dowolnego innego formularza zawierające inne obiekty, takie jak pole tekstowe, przycisk opcji, pole rozwijane itp.