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¶metr2=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¶metr2=test2¶metr3=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 , parametr 3. 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¶metr2=start¶metr3=javaEE
Po wpisaniu tego w przeglądarce, powinna nam zwrócić :
- 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 doPostinterpretuje 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 grupie 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???