Przekazywanie parametrów do Servletu - GET i POST

W tym artykule pokażę wam, jak w prosty sposób jesteśmy wstanie przekazać naszemu servletowi parametry za pomocą metod HTTP GET oraz POST.

  • GET - metoda ta pozwala przekazywać parametry w linku (w adresie URI).

przykład zastosowania : http://localhost:8080/Parameters/wypisz_parametry?parametr1=java&parametr2=start

W tym linku przekazujemy podstronie wypisz_parametry parametry parametr1=java oraz parametr2=start

  • POST - metoda wykorzystywana do przesyłania danych w sieci w postaci pakietu. Używana głównie do przesyłania danych za pomocy formularzy.

Przykładowa pakiet POST :

POST /Parameters/wypisz_parametry HTTP/1.1
 Content-Length: 47
 Content-Type: text/plain; charset=UTF-8
 Host: localhost:8081
 Connection: Keep-Alive
 User-Agent: Apache-HttpClient/4.0.1 (java 1.5)
 Expect: 100-Continue
 
 parametr1=test1&parametr2=test2&parametr3=test3

Kurs Java EE i Jakarta EE

Obie te metody przesyłają te parametry wraz z żądaniem (requestem) HTTP. Można je w bardzo prosty sposób wydobyć z żądania stosując funkcje getParameter("Nazwa parametru") klasy HttpServletRequest.

public void doGet(HttpServletRequest request,
               HttpServletResponse response)	throws ServletException, IOException {
 		String parametr = request.getParameter("parametr");
 }

Parametr który przesłaliśmy w linku będzie przechowywać zmienna "parametr".

  • doGet

Zobaczny na prostym przykładzie, jak za pomocą metody doGet pobrać 3 parametry i przekazać je do naszego programu :

public void doGet(HttpServletRequest request,
               HttpServletResponse response)    throws ServletException, IOException {
         PrintWriter out = response.getWriter();
 
         String parametr1 = request.getParameter("parametr1");
         String parametr2 = request.getParameter("parametr2");
         String parametr3 = request.getParameter("parametr3");
 
         out.println("Wczytanie 3 parametrow z zadania :");
         out.println(parametr1);
         out.println(parametr2);
         out.println(parametr3);
     }

Metoda doGet pobiera 3 parametry z request oraz zapisuje je do zmiennych parametr1, parametr2, parametr3. Następnie parametry te są przekazywane do Response wraca do klienta (np. przeglądarki internetowej).

Zapytanie do tej metody powinno wyglądać tak :

http://localhost:8080/Parameters/wypisz_parametry?parametr1=java&parametr2=start&parametr3=javaEE

Po wpisaniu tego w przeglądarce, powinna nam zwrócić :

 

parameters

 

  • doPost

Metodę HTTP POST głównie wykorzystuje się przy przesyłaniu jakiś danych z formularzy. Aby sprawdzić, jak działa metoda doPost, wpierw musimy napisać takowy formularz. Nasz formularz będzie posiadał 3 pola tekstowe oraz guzik wyślij. Nie będę tutaj rozwodził się nad tematyką języka html. Musisz wiedzieć tylko tyle, że plik html jest interpretowany przez przeglądarkę internetową i to przeglądarka wyśle formularz z danymi do naszego servletu metodą POST.

Plik wyslij.html :

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
 <HTML>
 <HEAD>
   <TITLE>Przyklad POST</TITLE>
 </HEAD>
 
 <H1 ALIGN="CENTER">Przyklad HTTP POST</H1>
 
 <FORM ACTION="http://localhost:8080/Parameters/wypisz_parametry"
       METHOD="POST">
 	Parametr 1:
 	<INPUT TYPE="TEXT" NAME="parametr1"><BR>
 	Parametr 2:
 	<INPUT TYPE="TEXT" NAME="parametr2"><BR>
 	Parametr 3:
 	<INPUT TYPE="TEXT" NAME="parametr3"><BR>
 	<INPUT TYPE="SUBMIT" VALUE="Wyslij">
 </FORM>
 
 </BODY>
 </HTML>

Warto tutaj zwrócić uwagę na fragment "<FORM ACTION="http://localhost:8080/Parameters/wypisz_parametry" METHOD="POST">". Mówi on przeglądarce to : "Po naciśnięciu guzika "wyślij", prześle formularz na adres http://localhost:8081/Parameters/wypisz_parametry metodą POST".

Formularz zostaje przesyłany do servletu, a metoda doPost interpretuje go w podobny sposób jak metoda doGet.

	public void doPost(HttpServletRequest request,
             HttpServletResponse response)	throws ServletException, IOException {
 		PrintWriter out = response.getWriter();
 
 		out.println("Wczytanie 3 parametrow z zadania :");
 		out.println(request.getParameter("parametr1"));
 		out.println(request.getParameter("parametr2"));
 		out.println(request.getParameter("parametr3"));
 	}

 

Metody GET i POST wyglądają niepozornie, ale to one zapewniają komunikację miedzy naszym programem a klientami, którzy mogą być przeglądarki www, urządzenia mobilne, inne aplikacje www.

 

Zadania do realizacji :

  • Napisz servlet, który będzie przyjmował 5 liczb całkowitych metodą GET, wyliczy ich średnią i zwróci wynik.
  • Napisz servlet, który będzie przyjmował dowolną ilość parametrów metodą POST i sprawdzał, czy parametry te są liczbami. Jeśli są, niech je wyświetli w kolejności od najmniejszej do największej. Jeśli parametry nie są liczbami, niech servlet zwróci informacje o błędnych danych.

TIPS - sprawdź co robi funkcja "getParameterNames()" i czy można Ją wykorzystać ją do pobierania dowolnej ilości parametrów z request'a.

Dyskusja i komentarze

Masz pytania do tego wpisu? Może chcesz się podzieliś spostrzeżeniami? Zapraszamy dyskusji na naszej grupe na Facebooku.

Poniżej znajdziesz archiwalne wpisy z czasów gdy strona była jeszcze hobbystycznym blogiem.

Piotrek

nie mogę sobie poradzić z uruchomieniem pliku wyślij.html w eclipse aby zadziałała metoda POST, można jaką pomoc? pozdrawiam

Rafał Mikołajczuk

Spróbuj odpalić ten pliczek w przeglądarce :) to jest zwykły plik .html który posiada w sobie formularz wysyłający dane do twojej uruchomionej aplikacji.

Łukasz

Zwróćcie uwagę, że po otworzeniu w przeglądarce wyslij.htm i kliknięciu submit może wam nie działać, ze względu na zły port. Dlatego, że w tym projekcie do ściągnięcia w pliku wyslij.html jest ustawiony port 8081, a powinien być 8080. Jednak w samym artykule, jest już to poprawione.

zombial

Zajefajny tutorial, szczególnie te zadanka do samodzielnego rozwiązania:). Zna ktoś może podobny tutorial, własnie z zadankami i odpowiedziami do nich do Springa i jquerry???