JSP - przetwarzanie formularzy
W tym rozdziale omówimy przetwarzanie formularzy w JSP. 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 wykorzystuje dwie metody przekazywania tych informacji do serwera WWW. Są to metody GET i POST.
Metody przetwarzania formularzy
Omówmy teraz metody w przetwarzaniu formularzy.
GET metoda
Metoda GET wysyła zakodowane informacje o użytkowniku dołączone do żądania strony. Strona i zakodowane informacje są oddzielone znakiem? znak 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 Location:box. Zaleca się, aby lepiej nie używać metody GET. jeśli masz hasło lub inne poufne informacje do przekazania do serwera.
Metoda GET ma ograniczenie rozmiaru: only 1024 characters can be in a request string.
Ta informacja jest przekazywana za pomocą QUERY_STRING header i będzie dostępny poprzez zmienną środowiskową QUERY_STRING, którą można obsłużyć za pomocą getQueryString() i getParameter() metody obiektu żądania.
Metoda POST
Generalnie bardziej niezawodną metodą przekazywania informacji do programu zaplecza jest metoda POST.
Ta metoda pakuje informacje dokładnie w taki sam sposób, jak metoda GET, ale zamiast wysyłać je jako ciąg tekstowy po znaku? w adresie URL wysyła go jako oddzielną wiadomość. Ta wiadomość przychodzi do programu zaplecza w postaci standardowego wejścia, które możesz przeanalizować i użyć do przetwarzania.
JSP obsługuje tego typu żądania przy użyciu getParameter() metoda odczytu prostych parametrów i getInputStream() metoda odczytu binarnego strumienia danych pochodzących od klienta.
Odczytywanie danych formularzy za pomocą JSP
JSP obsługuje analizę danych formularza automatycznie, korzystając z następujących metod w zależności od sytuacji -
getParameter() - Ty dzwonisz request.getParameter() metody, 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.
getInputStream() - Wywołaj tę metodę, aby odczytać strumień danych binarnych pochodzący od klienta.
Przykład metody GET przy użyciu adresu URL
Poniższy adres URL przekaże dwie wartości do programu HelloForm przy użyciu metody GET.
http://localhost:8080/main.jsp?first_name=ZARA&last_name=ALI
Poniżej znajduje się plik main.jspProgram JSP 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 -
<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>
Teraz wpisz http://localhost:8080/main.jsp?first_name=ZARA&last_name=ALI w przeglądarce Location:box. Spowoduje to wygenerowanie następującego wyniku -
Używanie metody GET do odczytu danych formularza
|
Przykład metody GET przy użyciu formularza
Poniżej znajduje się przykład, który przekazuje dwie wartości za pomocą HTML FORM i przycisku przesyłania. Będziemy używać tego samego pliku JSP main.jsp do obsługi tego wejścia.
<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>
Zachowaj ten kod HTML w pliku Hello.htm i umieść go w nim <Tomcat-installation-directory>/webapps/ROOT directory. Kiedy chcesz uzyskać dostęphttp://localhost:8080/Hello.htm, otrzymasz następujący wynik.
<p> 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 wygeneruje podobny wynik, jak wspomniano w powyższym przykładzie.Przykład metody POST przy użyciu formularza
Zróbmy małą modyfikację w powyższym JSP, aby obsłużyć zarówno metodę GET, jak i POST. Poniżej znajduje się plikmain.jsp Program JSP do obsługi danych wejściowych podawanych przez przeglądarkę internetową metodą GET lub POST.
W rzeczywistości nie ma żadnych zmian w powyższym JSP, ponieważ jedyny sposób przekazywania parametrów jest zmieniony i żadne dane binarne nie są przekazywane do programu JSP. Pojęcia związane z obsługą plików zostaną wyjaśnione w osobnym rozdziale, w którym musimy przeczytać binarny strumień danych.
<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>
Poniżej znajduje się zawartość Hello.htm plik -
<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>
Zatrzymajmy się teraz main.jsp i hello.htm w <Tomcat-installationdirectory>/webapps/ROOT directory. Kiedy uzyskujesz dostęphttp://localhost:8080/Hello.htm, otrzymasz następujący wynik.
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 podanych danych uzyskasz podobne wyniki, jak w powyższych przykładach.
Przekazywanie danych pola wyboru do programu JSP
Pola wyboru są używane, gdy wymagane jest wybranie więcej niż jednej opcji.
Oto przykład HTML code, CheckBox.htm, dla formularza z dwoma polami wyboru.
<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>
Powyższy kod wygeneruje następujący wynik -
Poniżej znajduje się program JSP main.jsp do obsługi danych wejściowych podanych przez przeglądarkę internetową dla przycisku pola wyboru.
<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>
Powyższy program wygeneruje 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 już mamy Enumeration, możemy zapętlić Enumeration w standardowy sposób, używając hasMoreElements() aby określić, kiedy zatrzymać i używać nextElement() metoda, aby uzyskać nazwę każdego parametru.
<%@ 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>
Poniżej znajduje się zawartość 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>
Teraz spróbuj wywołać JSP, korzystając z powyższego Hello.htm; wygenerowałoby to wynik podobny do poniższego na podstawie podanych danych wejściowych -
Odczytywanie wszystkich parametrów formularza
Nazwa parametru | Wartość (y) parametrów |
---|---|
matematyka | na |
chemia | na |
Możesz wypróbować powyższą stronę JSP, aby odczytać dane dowolnego innego formularza, które zawierają inne obiekty, takie jak pole tekstowe, przycisk opcji lub lista rozwijana itp.