XmlHttpRequest - Programmiersprachenauswahl für Server

Smagjus

Rear Admiral
Registriert
Feb. 2011
Beiträge
6.133
Hallo allerseits,

für mein kleines Projekt, ein privates Addon für Chrome, möchte ich via XmlHttpRequest mit einen kleinen Heimserver kommunizieren. Meine Quellen dafür sind bisher:
http://de.wikipedia.org/wiki/XMLHttpRequest
http://developer.chrome.com/extensions/getstarted.html
http://developer.chrome.com/extensions/xhr.html

Ich bin allerdings im Moment nicht sonderlich fit, was Programmierung angeht und schaffe es einfach nicht, die zwei Fragen, die mir im Kopf schwirren, selbständig zu klären.

1. Gehe ich recht in der Annahme, dass meine Serveranwendung via GET auf ein eingehendes Request wartet und mir zur Wahl steht, ob der Aufruf blockierend oder asynchron abläuft?
2. Was für eine Wahl habe ich bei der Programmiersprache des Servers? Mir ist klar, dass XmlHttpRequest eine Javascript Objekt ist. Aber gibt es die Möglichkeit, dieses auch in C# oder Java auszuwerten und zu beantworten? Wenn ja wie?

Ich wäre dankbar, wenn mir jemand mit meinem Problem helfen könnte.
 
Bei Java stellst du einen Tomcat oder Jetty hin (das sind Server) und diese hosten ein Servlet, das auf deine Requests wartet. XML-Verarbeitung geht in Java z.B. per Apache XML-Beans oder JAXB. Ich finde JSON einfacher (Jackson oder Gson lib).

Asynchrone Servlets gehen bei den aktuellen Versionen der Server auch (hängt mit der Servlet API Version zusammen). Habe ich aber noch nicht genutzt.
 
Danke für deine Antwort :)

Ich muss mich jetzt eine Weile einlesen, weil ich eigentlich im Sinn hatte, das Rad neu zu erfinden. Ich gucke mir gerade Tomcat was näher an, da ich noch nicht weiß, wie ich damit umgehen muss. Wenn ich präzise Fragen habe oder Erfolge verzeichnen kann, melde ich mich noch mal.
 
Nimm einfach Maven und erstell dir ein Projekt von nem Archetype der Spring + Jackson (und evtl. Hibernate) enthält. Dann läuft das Grundgerüst schon mal :)

Über Tomcat musst du prinzipiell gar nichts wissen. Solang du es innerhalb von Eclipse zum Entwickeln nutzt, konfiguriert sich das Ding quasi von selbst.
 
Hallo!

1. Der Server beantwortet eingehende anfragen. Ob das nun synchron abläuft oder nicht (dh. ob die Ausführung des Codes solange blockiert wird bis eine Antwort kommt) entscheidet allein der Client und hat mit dem Server nichts zu tun.

2. XMLHTTPRequest sendet generell nur Zeichenketten und keine Javascript Objekte. Diese können allerdings ins JSON Format umgewandelt werden. Die Sprache, in der der Server programmiert wurde, ist davon völlig unabhängig. Du hast also die Freie Wahl, aber wenn du bei einer Sprache bleiben willst, dann empfehle ich node.js
 
Ich bin dank Tumbleweeds Hilfe schon so weit, dass ich eine Datei vom Server zum Client senden kann. Allerdings arbeite ich fast nur nach dem Try-and-Error-Prinzip, da ich das Ganze immernoch nicht wirklich verstanden habe und komme deswegen nur sehr langsam voran. Der Server basiert auf Tomcat.

Also nicht wundern, wenn ich etwas länger zum Antworten benötige. Ich probiere halt viel aus.
 
Tumbleweed schrieb:
Hat mit dem Server nichts zu tun würde ich also nicht sagen. ;)

Klar kannst du die Anfragen auf dem Server asynchron bearbeiten (je nachdem was Sinn macht und in welcher Sprache programmiert wird). Ist aber trotzdem völlig unabängig von dem, was auf dem Client passiert ;)
 
So, ich melde mich nochmal. Ich hatte zwischenzeitlich ein Codebeispiel von Tumbleweed erhalten (nochmals danke dafür), womit ich einen schnellen Erfolg erzielt habe. Leider muss ich zugeben, dass mein Wissensstand bezüglich Netzwerk- und Serverarchitektur noch nicht weit genug ist, um das Beispiel in meinem Sinne zu verwenden. Meine ersten Gehversuche diesbezüglich waren ein wenig Socketprogrammierung in Java, womit ich vor Jahren mal gut zurecht kam.

Mein Anliegen ist eigentlich recht simpel: Der Client schickt automatisch eine Datei an den Server. Der Server verarbeitet und sichert die Daten und sendet eine Antwort an Client zurück.

Also zum Code:
Code:
public class Start {

    public static void main(final String[] args) throws LifecycleException, ServletException {
        Tomcat tomcat = new Tomcat();
        tomcat.setPort(8080);
        String myFile = new File("view").getAbsolutePath();
        Context ctx = tomcat.addWebapp("/", myFile);
        ctx.addWelcomeFile("message.txt");
        tomcat.start();
        tomcat.getServer().await();
    }
}
Code:
var getData = {


  handleRequest: function() {
      var req = new XMLHttpRequest();
      
      req.open("GET", serverAndPort, true);
      req.onreadystatechange = function() {
          if (req.readyState == 4) {
              alert(req.responseText + "\n" + req.status);
          }      }
    req.send();
  }
};


document.addEventListener('DOMContentLoaded', function () {
    getData.handleRequest();
});

Was bisher nur funktioniert ist das senden der GET-Anfrage an den Server worauf ich auch eine Antwort bekomme. Mach ich daraus ein PUT, bekomme ich 403 zurück. Der Zugriff auf die spezifische Datei wurde verweigert.

Ich habe wie gesagt nicht viel Ahnung von der Materie und würde mich auch mit Links zu Anfängertutorials zufriedengeben (gerne auch in englisch). Danke für die rege Beteiligung.
 
Sieh dich mal bei folgenden Links um:

http://www.codejava.net/java-ee/servlet/code-example-file-upload-servlet-with-apache-common-file-api
http://commons.apache.org/proper/commons-fileupload/using.html
http://www.avajava.com/tutorials/lessons/how-do-i-upload-a-file-to-a-servlet.html

Da hast du dir ein gar nicht so einfaches erstes Web-Projekt ausgesucht. Viel Erfolg!

P.S.: Du bekommst bei deinem Beispiel 403er (es müsste eigentlich ein 405er sein laut source), weil du gar kein Servlet "gemounted" hast und dementsprechend auch nicht dessen doPut() überschrieben hast.
 
Zuletzt bearbeitet:
Vielen Dank für den zusätzlichen Input. Ich nehme mir die Links heute und morgen Abend gründlich vor. Dauert also wieder etwas zur nächsten Antwort.
 
Mir ist eben beim Überfliegen noch ein Link auf der ersten verlinkten Seite aufgefallen:

http://www.codejava.net/java-ee/servlet/how-to-write-upload-file-servlet-with-servlet-30-api

Seit der Servlet API 3.0 geht das also ohne apache commons lib.

Übrigens - wenn so ein Tutorial dir was von der web.xml erzählt, dann wundere dich nicht, dass du die noch nirgendwo hast. Da du einen embedded Tomcat benutzt, kannst du die meisten (vielleicht sogar alle) Settings im Initialisierungscode des Tomcats einstellen. D.h. du musst das embedded-Pendant zum jeweiligen web.xml-Eintrag ergoogeln oder dich durch die angebotenen Methoden lesen.
 
Auch wenn es jetzt nach einer Woche ein wenig blöd kommt, aber das hilft mir nicht 100%ig weiter. Da ich ja eigentlich ein Addon für Chrome programmieren möchte, muss ich mich für den Upload auf Javascript beschränken (oder doch nicht?).

Ich bin mir nicht sicher, ob das Upload Script, das ich im Moment verwende nicht einer Bearbeitung bedarf.
 
Kannst du doch clientseitig mit Javascript machen. Google mal nach 'javascript ajax multipart/form-data file upload'. Gleich der 2. und 3. hit sind doch super und bringen alles mit, was du da brauchst. Das ändert aber noch nichts auf Serverseite. Da musst du trotzdem entsprechend der Beschreibung im letzten Link die Daten empfangen.

P.S.: ich hab das selbst noch nie gebraucht, daher kann ich dir da kein Beispiel zimmern, bzw. ich würde auch eine Weile brauchen und nachlesen müssen.
 
Ok, das hilft mir auf die Sprünge, danke.

Dass du mir die Arbeit abnimmst, ist ja auch gar nicht so gewollt. Ich bin nur immer etwas langsam, wenn ich mir was neues aneigne.
 

Ähnliche Themen

Zurück
Oben