Kurs Java Podstawy - rozszerzony

Przekazywanie parametrów do Servletu - GET i POST

W poprzednim kursie stworzyliśmy sobie prosty servlet wypisujący napis. W tym kursie 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

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śli 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.

 

<- Poprzedni kurs | Następny kurs ->

 

 

Komentarze

Tomek

Cześć Wszystkim, jak wyświetlić plik *.html, a dokładniej wyslij.html ? Po wpisaniu w oknie przeglądarki http://localhost:8080/Parameters/wyslij.html - nie odnaleziono strony, po wypisaniu http://localhost:8080/Parameters/wypisz_parametry wyświetlają się null'e z metody doGet. Trzeba dodać jakiś wpis do pliku web.xml?
Mam jeszcze jedno pytanko, a mianowicie dlaczego w przeglądarce firefox poprzednia lekcja zamiast linku do strony wyświetla całą komendę(znacznik) html w postaci " Tekst widoczny w przeglądarce" Na IE i w przeglądarce eclipse servlet wyświetlany jest prawidłowo ?
Dzięki za odpowiedź i fajny kurs. Pozdrwiam

Rafał Mikołajczuk

Wejdź przez eksplorera windowsego do folderu z plikiem, kliknij na nim prawym -> uruchom jako -> wybierz przeglądarke. Pojawi Ci się formularz. Chodzi tutaj tylko o pokazanie, jak servletowi przekazać wiadomość http postem. Nie ma znaczenia, czy to będzie plik html, jsp czy inne cudo. Jak załączać pliki do projektu opisałem w kursie z JSP gdzie tworzymy połączenia ze stronami www.
A co drugiego pytania, to nie wiem, sprawdzę wieczorem.

Tomek

Wszystko ok, tylko jak odpalę wylij.html w taki sposób to nie przekażę paramterów do aplikacji i nie zobaczę efektu prawda? Udało się coś ustalić z tym firefoxem ?

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.

3qn

"<- Poprzedni kurs " nie jest podpięte, a poza tym fajny kurs :)

Ł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.

Kinga



Tomek:

a mianowicie dlaczego w przeglądarce firefox poprzednia lekcja zamiast linku do strony wyświetla całą komendę(znacznik) html w postaci ” Tekst widoczny w przeglądarce” Na IE i w przeglądarce eclipse servlet wyświetlany jest prawidłowo ?



Podbijam pytanie :)
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???