Discussion:
różnica między get a post
(Wiadomość utworzona zbyt dawno temu. Odpowiedź niemożliwa.)
thaal
2006-05-16 13:08:54 UTC
Permalink
Witam,

niedawno zaczałem zabawę z servletami, wcześniej bawiłem się w PHP.
Mam takie pytanie: czy servlet jest w stanie odróżnić sposoby przesyłania
parametrów (GET/POST). Wiem że do obu istnieją odpowiednie metody: doGet i
doPost, ale mając np. taki kod:

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class myServlet extends javax.servlet.http.HttpServlet implements
javax.servlet.Servlet {

protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
System.out.println("metoda get");
System.out.println(request.getParameter("action"));
}

protected void doPost(HttpServletRequest request, HttpServletResponse
response) throws ServletException, IOException {
System.out.println("metoda post");
System.out.println(request.getParameter("action"));
doGet(request, response);
}
}

i odpowiedni formularz do niego:

<head>
</head>
<body>
<form action="myservlet.do?action=a1" method="post">
<input type="text" size="20" name="action">
<br>
<input type="submit">
</form>
</body>
</html>

to obojętnie co wpiszę w pole formularza to otrzymuję identyczny wynik:

metoda post
a1
metoda get
a1

W PHP natomiast istnieją dwie tablice: $_GET i $_POST które przechowują
zmienne dla odpowiednich sposobów przesyłania danych.
--
Wysłano z serwisu Usenet w portalu Gazeta.pl -> http://www.gazeta.pl/usenet/
Mikolaj Rydzewski
2006-05-16 13:15:48 UTC
Permalink
Post by thaal
W PHP natomiast istnieją dwie tablice: $_GET i $_POST które przechowują
zmienne dla odpowiednich sposobów przesyłania danych.
Tutaj masz za to jeden obiekt requestu ktory zawiera mape parametrow. Z
tego tez powodu mozna miec tylko jedna 'wersje' parametru. W PHP jest
tez cos takiego jak $_REQUEST.

Twoj przyklad pokazuje za to jak nie nalezy robic formularzy ;-)
--
Mikolaj Rydzewski
thaal
2006-05-16 13:24:53 UTC
Permalink
Dzieki za odpowiedź,

z powyższego mam rozumieć że skrypty przetwarzające dane z formularza nie
powinny mieć równoczesnie przekazywanych zmiennych w adresie url o tej samej
nazwie tudzież nie powinny mieć takich zmiennych (tj. w adresie) przekazywanych??

a co do PHP to od zawsze się powtarza że $_REQUEST nie nalezy używać skoro się
ma bezpieczniejszą alternatywę: $_GET i $_POST :P
--
Wysłano z serwisu Usenet w portalu Gazeta.pl -> http://www.gazeta.pl/usenet/
Mikolaj Rydzewski
2006-05-16 13:35:35 UTC
Permalink
Post by thaal
z powyższego mam rozumieć że skrypty przetwarzające dane z formularza nie
powinny mieć równoczesnie przekazywanych zmiennych w adresie url o tej samej
nazwie tudzież nie powinny mieć takich zmiennych (tj. w adresie) przekazywanych??
Przez 'nie nalezy robic' rozumiem trzymanie sie dobrych praktyk a nie
jakies zakazy w specyfikacji, czy protokole.

Chodzi o to, ze takie rozwiazanie jak pokazales jest niejednoznaczne i
mylace. Osoba trzecia analizujaca taki kod moze latwo przeoczyc niuanse.
A patrzac w kontekscie utrzymywania kodu aplikacji w firmie przez
zespol programistow jest wysoce niewskazane.
Post by thaal
a co do PHP to od zawsze się powtarza że $_REQUEST nie nalezy używać skoro się
ma bezpieczniejszą alternatywę: $_GET i $_POST :P
No to widzisz, PHP jest lepszy od Javy ;-)
--
Mikolaj Rydzewski
clyde
2006-05-17 12:24:51 UTC
Permalink
Post by thaal
Dzieki za odpowiedź,
z powyższego mam rozumieć że skrypty przetwarzające dane z formularza nie
powinny mieć równoczesnie przekazywanych zmiennych w adresie url o tej samej
nazwie tudzież nie powinny mieć takich zmiennych (tj. w adresie) przekazywanych??
a co do PHP to od zawsze się powtarza że $_REQUEST nie nalezy używać skoro się
ma bezpieczniejszą alternatywę: $_GET i $_POST :P
Problem moim zdaniem polega na tym, ze oba parametry maja taka sama
nazwe. Zauwaz takze, ze najpierw obslugujesz doPost i on wywoluje
doGet(co w zasadzie robisz juz sam w swoim kodzie).
Zauwaz, ze doGet nie jest przez kontener wywolywane. W innym przypadku
otrzymal bys 2 printouty na temat GET.
Zatem mozesz juz sam obsluzyc cos w doPost i wywolac doGet z kodu albo nie.
--
clyde
Loading...