Hallo liebe Community,
seid Stunden nervt mich ein kleines Problem und ich kann suchen wie ich will und finde keine Lösung. Aber manchmal sieht mal den Wald vor lauter Bäumen ja nicht.
Hier der Code:
Formular:
Javascript Funktion sendeFormular()
Hier meine Ajax-Klasse:
Servlet doPost:
Hier die HTTP-Anfrage:
http://localhost:8080/Autovermietung/UpdateMietwagen
POST /Autovermietung/UpdateMietwagen HTTP/1.1
Host: localhost:8080
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; de; rv:1.9.0.14) Gecko/2009082707 Firefox/3.0.14
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: de-de,de;q=0.8,en-us;q=0.5,en;q=0.3
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Connection: keep-alive
Content-Type: application/x-www-formurlencoded; charset=UTF-8
Referer: http://localhost:8080/Autovermietung/
Content-Length: 70
Pragma: no-cache
Cache-Control: no-cache
kennzeichen=HI-DR%20260&hersteller=Fiat&modell=Scudo%20Neu&farbe=green
HTTP/1.x 400 Bad Request
Server: Apache-Coyote/1.1
fehlermeldung: Keine Zeile geupdatet!
Content-Type: text/html;charset=utf-8
Content-Length: 971
Date: Wed, 14 Oct 2009 15:59:56 GMT
Connection: close
Problembeschreibung:
Das Problem ist, dass in der doPost-Methode request.getParameter() null liefert. Wenn ich den Content mit getReader() auslese, steht dort aber meine korrekte Anfrage. Jetzt kommts: Wenn ich die gleiche Anfrage per GET übertrage (in doGet steht der gleiche Code wie bei doPost) ist request.getParameter() mit den richtigen Inhalten gefüllt.
seid Stunden nervt mich ein kleines Problem und ich kann suchen wie ich will und finde keine Lösung. Aber manchmal sieht mal den Wald vor lauter Bäumen ja nicht.
Hier der Code:
Formular:
HTML:
<form id="mietwagen_aenderung_form" action="javascript:sendeFormular()" onsubmit="return pruefeFormularMietwagen()" method="post">
<label for="kennzeichen">Kennzeichen</label>
<input id="mietwagenKennzeichen" disabled="disabled"/>
<br/>
<label for="Hersteller">Hersteller</label>
<input id="mietwagenHersteller"/>
<br/>
<label for="Modell">Modell</label>
<input id="mietwagenModell"/>
<br/>
<label for="Farbe">Farbe</label>
<input id="mietwagenFarbe"/>
<br/>
<input id="formButton" type="submit" value="Speichern"/>
<button id="formButton" onclick="aenderungAbbrechen()">Abbrechen</button>
</form>
Javascript Funktion sendeFormular()
Code:
function sendeFormular() {
with(new Ajax()) {
url = "UpdateMietwagen";
onSuccess = erfolg;
method = "POST";
params = "kennzeichen=" + escape(document.getElementById("mietwagenKennzeichen").value)
+"&hersteller=" + escape(document.getElementById("mietwagenHersteller").value)
+"&modell=" + escape(document.getElementById("mietwagenModell").value)
+"&farbe=" + escape(document.getElementById("mietwagenFarbe").value);
doRequest();
}
function erfolg() {
alert("Datensatz erfolgreich gespeichert!");
document.getElementById("mietwagen").removeChild(document.getElementById("mietwagen_aenderung"));
}
}
Hier meine Ajax-Klasse:
Code:
function Ajax() {
this.url="";
this.params="";
this.method="GET";
this.onSuccess=null;
this.onError=alertError;
this.asynchron = true;
function alertError(msg) {
alert("alert: " + msg);
}
}
Ajax.prototype.doRequest=function() {
// Datenüberprüfung
if(!this.url) {
this.onError("Keine URL angegeben, Request wird abgebrochen.");
return false;
}
if(!this.method) {
this.method("GET");
}
else {
this.method.toLocaleUpperCase();
}
// Referenz auf Klasse Ajax für andere private Methoden
var _this = this;
// XMLHttpRequest-Objekt erzeugen
var xmlHttpRequest = getXMLHttpRequest();
if(!xmlHttpRequest) {
this.onError("Es konnte kein XMLHttpRequest-Objekt erstellt werden.")
return false;
}
// Übertragungsmethode unterscheiden und Daten entsprechend behandeln
switch(this.method) {
case "GET" : xmlHttpRequest.open(this.method, this.url + "?" + this.params, this.asynchron);
xmlHttpRequest.onreadystatechange = readyStateHandler;
xmlHttpRequest.send("null");
break;
case "POST" : xmlHttpRequest.open(this.method, this.url, this.asynchron);
xmlHttpRequest.onreadystatechange = readyStateHandler;
xmlHttpRequest.setRequestHeader('Content-Type', 'application/x-www-formurlencoded');
xmlHttpRequest.setRequestHeader("Content-length", this.params.length);
xmlHttpRequest.setRequestHeader("Connection", "close");
xmlHttpRequest.send(this.params);
break;
}
function readyStateHandler() {
if(xmlHttpRequest.readyState < 4) {
return false;
}
if(xmlHttpRequest.status == 200 || xmlHttpRequest.status == 304) {
if(_this.onSuccess) {
_this.onSuccess(xmlHttpRequest.responseText, xmlHttpRequest.responseXML);
}
}
else {
if(_this.onError) {
_this.onError("Es trat ein Fehler bei der Datenübertragung auf.\n"+xmlHttpRequest.getResponseHeader("fehlermeldung"));
}
}
}
}
function getXMLHttpRequest() {
if(window.XMLHttpRequest) {
return new XMLHttpRequest();
}
else {
if (window.ActiveXObject) {
try {
return new ActiveXObject("Msxml2.XMLHTTP");
}
catch (e) {
try {
return new ActiveXObject("Microsoft.XMLHTTP");
}
catch (e) {
return null;
}
}
}
}
return null;
}
Servlet doPost:
Code:
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
Connection con = DB_Verbindung.baueVerbindungAuf();
Mietwagen mietwagen = new Mietwagen();
mietwagen.setKennzeichen(request.getParameter("kennzeichen"));
mietwagen.setHersteller(request.getParameter("hersteller"));
mietwagen.setModell(request.getParameter("modell"));
mietwagen.setFarbe(request.getParameter("farbe"));
try {
int i = DB_Eintrag.updateMietwagen(con, mietwagen);
if(i == 0) {
response.setStatus(response.SC_BAD_REQUEST);
response.addHeader("fehlermeldung", "Keine Zeile geupdatet!");
}
}
catch(Exception e) {
response.setStatus(response.SC_INTERNAL_SERVER_ERROR);
response.addHeader("fehlermeldung", "Server-Error! Siehe Logfile für nährere Informationen.");
e.printStackTrace();
}
}
Hier die HTTP-Anfrage:
http://localhost:8080/Autovermietung/UpdateMietwagen
POST /Autovermietung/UpdateMietwagen HTTP/1.1
Host: localhost:8080
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; de; rv:1.9.0.14) Gecko/2009082707 Firefox/3.0.14
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: de-de,de;q=0.8,en-us;q=0.5,en;q=0.3
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Connection: keep-alive
Content-Type: application/x-www-formurlencoded; charset=UTF-8
Referer: http://localhost:8080/Autovermietung/
Content-Length: 70
Pragma: no-cache
Cache-Control: no-cache
kennzeichen=HI-DR%20260&hersteller=Fiat&modell=Scudo%20Neu&farbe=green
HTTP/1.x 400 Bad Request
Server: Apache-Coyote/1.1
fehlermeldung: Keine Zeile geupdatet!
Content-Type: text/html;charset=utf-8
Content-Length: 971
Date: Wed, 14 Oct 2009 15:59:56 GMT
Connection: close
Problembeschreibung:
Das Problem ist, dass in der doPost-Methode request.getParameter() null liefert. Wenn ich den Content mit getReader() auslese, steht dort aber meine korrekte Anfrage. Jetzt kommts: Wenn ich die gleiche Anfrage per GET übertrage (in doGet steht der gleiche Code wie bei doPost) ist request.getParameter() mit den richtigen Inhalten gefüllt.