Direkter Zugriff auf Servlet- doPost

Generic1

Top Contributor
Hallo,

ich hätte eine Frage zum direkten Zugriff auf doPost eines Servlets und zwar hab ich bei meinem WebProjekt eine index.jsp mit einem Button, wenn ich den Button klicke, dann wird die Methode doPost aufgerufen und im Browser die URL http://localhost:8080/getData angezeigt.

Wenn ich diesen Link http://localhost:8080/getData aber direkt im Browser eingebe, wird die Methode doPost nicht aufgerufen.
Wie kann ich es machen, dass es auch ohne index.jsp funktioniert, so dass ich die URL im Browser eingeben kann und dann die Methode doPost aufgerufen wird?
 
Wie kann ich es machen, dass es auch ohne index.jsp funktioniert, so dass ich die URL im Browser eingeben kann und dann die Methode doPost aufgerufen wird?
Gar nicht.

Den Unterschied zwischen einem GET und POST Request müsstest du eigentlich schon wissen, wenn nicht solltest du jetzt nachlesen.
 
Wie ist das dann gemeint?
Was meinst du?
Was hat ein (wahrscheinlich fehlerhaftes, siehe vorletztes Kommentar) Flex Beispiel mit deiner Frage zu tun?

Interessant für dich ist nur diese Frage:
Was ist den Unterscheid zwischen einem GET Request und einem POST Request?
😉

Wenn du den Code in doPost aufrufen willst. musst du eben einem POST Request absetzen, keinen GET Request.
 
Hallo,

also es funktioniert jetzt mit dem unteren Flex- Code und ich erhalte die Daten vom Servlet,
ich habe jetzt als Methode "POST" ausgewählt, es funktioniert noch immer aber es wird auch noch immer die doGet- Methode des Servlets aufgerufen, Das ist mir nicht klar warum.

Die XML- Datei, die ich auf dem Server habe, hat eine unbestimmte Größe, wenn diese also zu groß ist, hab ich mit GET ein Problem, da das Ergebnis an die URL angehängt wird und nur eine bestimmte Größe haben darf.

Kann sich das jemand erklären, warum das POST im unteren Flex- Code keine wirkung zeigt?

Code:
<mx:HTTPService  id="myService"
		url="http://localhost:8080/FlexServletTest/FrontendServlet"
		resultFormat="e4x"
		result="onResult(event)"
		fault="onFault(event)"
		method="POST">
	</mx:HTTPService>
 
Vielleicht stell ich mir das zu einfach vor, aber normalerweise kann man get und post identisch behandeln.. indem die eine immer die andere aufruft:

Java:
public void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException
{
   doGet(request, response);
}
	
public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException
{
   ...
}
 
Das würde dann heißen, dass der Request per "GET" zum Server (Servlet -> doGet(...)) kommt, dieser Request dann zur Methode doPost weitergeleitet wird und ein response per "POST" an den Client gesendet wird?
Das kann ich mir jetzt nicht vorstellen, dass das so ist, oder?

Wie seht ihr die Problematik, wenn ich mit "GET" die XML- Datei abfrage und wenn diese XML- Datei zu groß wird, dass ich dann Probleme bekomme?

Und warum das "method="POST"" im unteren Code nicht anschlägt ist mir gänzlich ein Rätsel -> Bewirkt nämlich überhaupt nichts.

Java:
public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException
{
   doPost(request, response);
}
	
public void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException
{ 
    final PrintWriter writer=response.getWriter();
    writer.println("<?xml version=\"1.0\"?>\n");
...
}

Code:
<mx:HTTPService  id="httpXmlDataService" url="http://localhost:8080/getData"
						resultFormat="e4x" result="resultHandler(event)" fault="faultHandler(event)"
						useProxy="false"
						method="POST">
	 	</mx:HTTPService>
 
Zuletzt bearbeitet:
[quot6e]Wie seht ihr die Problematik, wenn ich mit "GET" die XML- Datei abfrage und wenn diese XML- Datei zu groß wird, dass ich dann Probleme bekomme?[/quote]
Genau, deswegen sollte man da auch ein POST Request nutzen 🙂

Und warum das "method="POST"" im unteren Code nicht anschlägt ist mir gänzlich ein Rätsel -> Bewirkt nämlich überhaupt nichts.
Mir auch, ist aber auch kein Java Problem 😉
Der Client entscheidet ob ein POST oder GET gesendet wird.

Nebenbei, ja, man kann POST und GET Requests in Java Servlets gleich behandeln, löst aber nicht die Probleme die man mit GET und großen Datenmengen bekommt.
 
...der Aufruf doGet in doPost, bedeutet eigentlich nur, dass POST und GET das selbe machen... was ja eigentlich immer der Fall ist...
Nicht, wenn man eine REST Architektur umsetzt 😉

Aber ansonsten hat ARadauer recht, wenn man in die doGet-Methode einen Aufruf an die doPost-Methode delegiert, dann machen halt beide Methoden dasselbe, der Request bleibt aber natürlich ein GET-Request.

EDIT: Zitat eingefügt zum besseren Verständis
 
Zuletzt bearbeitet:
per POST oder GET wird gar nix an den Client gesendet!
Das sind die Request Methoden und die gehen immer zum Server!
Hypertext Transfer Protocol ? Wikipedia

der Aufruf doGet in doPost, bedeutet eigentlich nur, dass POST und GET das selbe machen... was ja eigentlich immer der Fall ist...


Ok, das ist klar, da hab ich was verwechselt, also man kann dann sagen, dass es eine Einschränkung bei der Kommunikation zwischen Client und Server gibt, wenn der Client vom Server per "GET" etwas anfragt, da die Parameter mit GET an die URL angehängt werden,
das Versenden der Daten vom Server zum Client hat mit GET oder POST nichts zu tun und deshalb gibt es auch keine Einschränkung bezüglich der Datenmenge?

Ist das richtig formuliert?.
lg
 
1. Es gibt eine maximale länge der URL
2. Steht die längengröße mit sicherheit auch im Standard (HTTP 1.0/1.1)
3. Wie willst du mit get Binärdaten Übertragen (z.b. ein Bild)

Schau dir am besten mal die Header an
 
1. Es gibt eine maximale länge der URL
2. Steht die längengröße mit sicherheit auch im Standard (HTTP 1.0/1.1)
3. Wie willst du mit get Binärdaten Übertragen (z.b. ein Bild)
1. Ja, aber die variiert
2. leider nein
3. per Base64

@ Generic1
Bei der Request Method handelt es sich eben um die Request-Methode, der Response wird vom Server geschickt, kann sonstwie kodiert sein.
 
Also zur Vollständigkeit, um den Thread zu vervollständigen, wenn man im ActionScript folgendes macht:

Code:
httpXmlDataService.method = "POST";
httpXmlDataService.contentType = "text/xml";  
httpXmlDataService.send("request");

dann schickt AS3 die Anfrage mit POST.
lg
 

Zurück
Oben