[Java / JavaScript] Zugriff auf einen Webservice mit JQuery

Andreasb.

Lt. Junior Grade
Registriert
Jan. 2011
Beiträge
271
Hallo,
ich arbeite an einem Projekt, das mithilfe des JavaScript Frameworks JQuery / JQuery Mobile und einem Webservice in Java umgesetzt werden soll.

Ich kenne mich zwar mit den Programmiersprachen aus, aber ich weiß nicht wie man mit JQuery auf einen Webservice zugreifen kann.

Hat jemand Erfahrung auf diesem Gebiet uns kann mir ein Tutorial dafür empfehlen?
 
Ich möchte über JQuery die Methoden der Klassen meines Webservice aufrufen, dafür müsste es doch eigentlich bestimmte Funktionen in JQuery geben. Außerdem müssen die Daten ja irgendwie an den Webservice übertragen werden.
 
Ohne HTTP funktioniert da aber nix. jQuery spricht nur die Sachen im Browser an und der versteht nur HTML. Keine Ahnung ob es auch mit WebSockets gehen würde, aber mit HTTP schließt du niemanden aus.
 
Aber mit JQuery soll es doch möglich sein auf einen Webservice zugreifen zu können. Aber ich finde keine Funktionen, die so aussehen als würde man damit auf ein Java Programm zugreifen können.
 
Mit der jQuery ajax() Methode können Daten, die von einem Webservice kommen im Browser verarbeitet werden. Du hast sicherlich serverseitig eine Funktion, welche die Daten in irgendeiner Weise generiert. Leider kenne ich mich mit Java nicht aus, aber mit PHP/ASP.net/Node.js geht das.
Code:
// für asp.net
            $.ajax({
               type: "POST",
               url: "BeispielWebService.asmx/MeineDaten",
               contentType: "application/json; charset=utf-8",
               data: "{}",
               dataType: "json",
               success: datenAuswerten, // Funktionsref wie hier oder direkt eine Callbackfkt
               error: datenFehler
             });
         });
 
Zuletzt bearbeitet:
Es kann ja sein das es mit http gemacht wird, das sagt mir aber leider nicht wie man soetwas umsetzten kann, bzw. wo es solche Anleitungen gibt.
 
Zuletzt bearbeitet:
Wenn du verstanden hast, was ein Webservice ist, hast du auch kein Problem diesen umzusetzen:
Nach einem definierten Muster werden Daten an diesen gesendet und er liefert Daten eines bekannten Musters wieder zurück.

Ergo muss bei dem Ajax-Request nur nach genau diesem Muster Daten geschickt werden, und die Antwort auf Basis des Musters ausgewertet werden. Es gibt keine "magischen" Webservices, die man einfach so irgendwie funktionieren. Es müssen Daten gesendet werden und die Antwort ausgelesen werden.
 
Ok, danke für eure Hilfe! Ich werde mich noch etwas in das Thema einlesen und hoffe, dass ich dann klarkomme.
 
Und immer dran denken: Anwendungsbeschreibungen immer schön "Buzzword compliant" halten....
 
Ich habe jetzt mit Netbeans eine WebApplikation erstellt, allerdings habe ich noch einige Probleme:

Code:
                                      var request = $.ajax({  
                                            type: "POST",  
                                            url: "de/testpackage/TestClass",  
                                            data: dataString,
                                            dataType: "json"
                                        });
                                        request.done(function() {
                                            alert( "Datenübergabe erfolgreich! );
                                        });
                                         request.fail(function() {
                                             alert( "Fehler bei der Datenübergabe" +dataString );
                                              return false;    
                                         });

Das Problem ist, dass meine Java Klasse nicht gefunden wird. Der Pfad müsste stimmen, zumindest lässt sich die Java Datei manuell über den Browser aufrufen.

Die Web.xml Datei sieht so aus:
Code:
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/j2ee"
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
   version="2.4">
	<display-name>ZugriffAufWebService</display-name>
	<servlet>
		<servlet-name>ZugriffAufWebService</servlet-name>
		<servlet-class>de.testpackage.TestClass</servlet-class>
	</servlet>
	<servlet-mapping>
		<servlet-name>ZugriffAufWebService</servlet-name>
		<url-pattern>/ZugriffAufWebService</url-pattern>
	</servlet-mapping>
	<welcome-file-list>
		<welcome-file>index.jsp</welcome-file>
	</welcome-file-list>
</web-app>

Die GlassFish Konsole zeigt folgende Meldung:

WARNING: StandardWrapperValve[ZugriffAufWebService]: PWC1382: Allocate exception for servlet ZugriffAufWebService
java.lang.ClassCastException: de.testpackage.TestClass cannot be cast to javax.servlet.Servlet


Müssen noch irgendwelche Einstellungen in NetBeans gemacht werden damit das funktioniert oder fehlt etwas im Code?
 
Deine Klasse TestClass ist kein Servlet, d.h. sie implementiert nicht das Servlet-interface bzw. leitet nicht von einer Klasse ab, die das tut.
 
Ok Danke, ich bekomme jetzt keine Exception mehr, aber die Meldung "Fehler bei der Datenübergabe" bleibt.
 
Erbt deine TestClass von HttpServlet? Der Fehler liegt vermutlich in deiner Implementierung von doGet() bzw. doPost(), je nachdem was du benutzt. Da würde ich mal mit dem debugger durchsteppen und schauen, wo das Problem wirklich liegt.
 
Ja, die Klasse erbt von HttpServlet.
Hier ist die doPost Methode, die ich mit einer Anleitung zusammengebastelt habe.
Code:
 protected void doPost(HttpServletRequest request, HttpServletResponse response){


            String vorname = request.getParameter("dataString");
            
		PrintWriter out;
            try {
                out = response.getWriter();
                out.println("Hallo" + vorname);
            
            } catch (IOException ex) {
                Logger.getLogger(TestServlet.class.getName()).log(Level.SEVERE, null, ex);
            }

    }



Wann kommt eigentlich die Fehlermeldung? Also wodurch wird "request.fail(function() {" erfüllt?
 
Hast du da in der doPost() mal einen breakpoint oder eine debug-Ausgabe platziert, d.h. kommt der request überhaupt so weit, dass er verarbeitet wird? Vielleicht erreicht der request deinen GlassFish gar nicht. Könntest zum Beispiel mal im Browser in F12 nachsehen, ob der request rausgeht und ob er nicht in einem 400er oder 500er resultiert.

Oben bei deinem Snippet fehlen übrigens die schließenden Anführungszeichen nach Datenübergabe erfolgreich!. Aber ich vermute mal das hast du schon behoben, sonst würde das ganze Script ja nicht funktionieren.

Edit: Ich hab das mal spaßeshalber nachgebaut. Hab selbst lange keine Servlets mehr an der Hand gehabt und "manuell" ajax requests abgefeuert schon gar nicht.
Jedenfalls ging es bei mir erstmal auch nicht. Die error-Funktion bringt aber 3 Parameter mit, die einem Auskunft geben:
Code:
Uncaught SyntaxError: Unexpected end of input
Durch die doPost ging es aber durch. Da muss also noch irgendeine Kleinigkeit nicht passen. Vielleicht muss man im Servlet den response type angeben (JSON oder wie auch immer).

Ich wollte mich aber nicht zu lange mit dieser Kleinigkeit aufhalten und habe einfach mal jQuery's post-Funktion benutzt und das ging auf Anhieb problemlos. Im Gegensatz zu der Version mit der ajax-Funktion kamen sogar meine Parameter mit dem POST mit.
Code:
$.post("ServiceSandbox",    {
        value1:"huhu",
        value2:"hihi"
    },
    function(data, status) {
        console.log(status+" - " + data);
    }
);

Probier es also erstmal damit. Wenn das funktioniert, kannst du immer noch mit dem "low-level" call der ajax-Funktion spielen.

Ich muss dazu sagen, dass ich das auf einem Tomcat hab laufen lassen, aber das sollte keinen Unterschied machen.
 
Zuletzt bearbeitet:
Ich probiere das gleich mal mit der post Funktion aus.

Ich habe die Java Klasse in das Verzeichnis verschoben indem auch die JavaScript Datei liegt und die URL angepasst und jetzt scheinen die sich zumindest zu finden, aber ich habe immernoch einige Probleme.

Wenn ich in der JavaScript Datei dataType: json, auskommentiere wird mir der Quellcode der Java Datei zurückgegeben. Wenn ich die Zeile nicht auskommentiere bekomme ich eine Fehlermeldung: "parsererrorSyntaxError: JSON Parse error: Unrecognized token '/'".


Edit: Mit der Post Funktion bekomme ich ebenfalls den Quellcode der TestSerlvet.java Datei zurück.
 
Zuletzt bearbeitet:
Ich weiß nicht wie das bei GlassFish ist, aber du musst dein Servlet natürlich gemountet haben auf der URL, die du mit dem ajax request ansprichst. Wenn der GlassFish nur die Datei ausliefert hilft das natürlich wenig. :) Läuft der GlassFish überhaupt und ist dein Projekt darauf published? Kann sein, dass das wording da ein bisschen anders ist. Mit Servlets habe ich nur mit Tomcat etwas Erfahrung und beruflich mit JBoss, aber da laufen bei uns keine rohen Servlets. :D
 
Zuletzt bearbeitet:
Zurück
Oben