Baza Wiedzy

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.

          Najlepszy newsletter o Javie w Polsce

          Czy chcesz otrzymywać nowości ze świata Javy oraz przykładowe pytania rekrutacyjne? Zapisz się na newsletter i bądź na bieżąco! Otrzymasz także ekskluzywne materiały oraz informacje o nowych kursach i promocjach.

          Traktujemy Twoją prywatność poważnie. Nikomu nie udostępniamy Twojego maila no i zawsze możesz się wypisać.

          Komentarze do artykułu

          Wyłączyliśmy możliwość dodawania komentarzy. Poniżej znajdziesz archiwalne wpisy z czasów gdy strona była jeszcze hobbystycznym blogiem. Zapraszamy natomiast do zadawnia pytań i dyskusji na naszej grupe na facebooku.

          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???

          Kurs Java WrocławJavaStart na Youtube