JSON Objekte an JAVA Programm versenden


jackcarver12

Grünschnabel
Hallo!

Ich habe bereits zuvor Fragen zu einem derartigen Fall gestellt. Dort ging es darum, zwei JS-Arrays zu einem JSON Objekt umzuwandeln.

Ziel ist es nun, dieses JSON Objekt von meinem Java Script Teil an ein Java-Programm zu senden.

Mir wäre es wichtig hier zu erfahren was ich dafür brauche.

Zum Beispiel:

Geht es über POST und GET?

Das Objekt in Java anzunehmen sollte kein Problem sein. Dafür gibt es unzählige Tutorials.

Die Verbindung zwischen der Webseite (Java Script) und meinem Java Programm soll hier thematisiert werden.



Wie gehe ich mein Problem an?

Mein aktueller Stand:

HTML Code:
HTML:
<html>
    <header>
        <link href="standard.css" rel="stylesheet"/>
        <script language="javascript" type="text/javascript" src="rechenscript.js"></script>


        <title>
            Cocktailseite
        </title>

    </header>
    <body>
        <!--
        DropDown
    -->

    <nav>
      <ul>
        <li><a href="#" title="Nach Hause">Home</a></li>
        <li class="submenu"><a href="#" title="nix">Regeln</a>
          <ul>

                <li><a href="#" title="Ihr Inventar">Spielregeln</a></li>
                <li><a href="#" title="Unsere Auswahl">Verhaltensregeln</a></li>

            </li>

          </ul>
        </li>
        <li><a href="#" title="Ueber uns">Shop</a></li>
        <li><a href="#" title="So erreichen Sie uns">Logout</a></li>

      </ul>
    </nav>
<div class:"Banner">
    <img src="Banner.jpg" />
</div>
<h2>Unsere Cocktails </h2>

<form name="liste">
    <ul class="Getraenkeliste">
        <li class="auflistung">Cuba Libre<input type="checkbox" name="CubaLibre" id="getrank1" value="6.80" onclick="calcPrice()" class="getraenk"> </li>
        <li class="auflistung">Sex on the Beach<input type="checkbox" name="SexOnTheBeach" id="getrank1" value="7.20" onclick="calcPrice()" class="getraenk"></li>
        <li class="auflistung">Caipirinha<input type="checkbox" name="Caipirinha" id="getrank1" value="7.50" onclick="calcPrice()" class="getraenk"></li>
        <li class="auflistung">Mochito<input type="checkbox" name="Mochito" id="getrank1" value="8.00" onclick="calcPrice()" class="getraenk"></li>
        <li class="auflistung">Apple Teenie<input type="checkbox" name="AppleTeenie" id="getrank1" value="8.20" onclick="calcPrice()" class="getraenk"></li>
        <li class="auflistung">Old Pesces<input type="checkbox" name="OldPesces" id="getrank1" value="9.00" onclick="calcPrice()" class="getraenk"></li>
        <li class="auflistung">Tropic Thunder<input type="checkbox" name="TropicThunder" id="getrank1" value="8.40" onclick="calcPrice()" class="getraenk"></li>
    </ul>
</form>
    <div id="preisfeld">
        <p>0.00</p>
    </div>
    <input type="submit" name="Bestellbutton" value="Bestellen" onclick="bestellung()">




</html>
Javascript:
var summe=0.0;
var i;
var xhr= new XMLHttpRequest();
xhr.open("GET", "daten.json", true);

function calcPrice()
{
  var betrag=0.0;
  var betragf=0.0;
  var gecheckteBoxen=[];
  var gecheckteBox;
  var endsumme=0.0;


  for(i=0;i<document.liste.length;i++)
  {
    if(document.liste.elements[i].checked)
    {
      /*rechnung*/
      gecheckteBox = document.liste.elements[i].name;
      String(gecheckteBox);
      /*namen speichern*/
      betrag = document.liste.elements[i].value;
      /*betrag speichern*/
      Number(betrag);
      Number(summe);
      summe=parseFloat(summe) + parseFloat(betrag);

    }/*ende if*/
  }/*ende for*/
 /*Ausgabe*/
  var element = document.getElementById("preisfeld");

  if(summe===0)
  {
    element.innerHTML = "0.00"+"&#8364;";
  }
  else {
    parseFloat(summe);
    summe.toFixed(2);/* warum funktioniert das nicht*/
    var summeS=String(summe);
    /*Ausgabe */
    element.innerHTML = String(summe)+ "0" + "&#8364;"; //0 wird angefügt, weil toFixed() nicht funktioniert

    endsumme=summe;
    summe=0;
    betrag=0;
    betragf=0;
  }
  return endsumme;
}



function bestellung()
{
  var preisDerBox;
  var preisDerBoxen=[];
  var bestellung=[];
  var endsumme=0.0;
  var name;
  var k=0;
  let object;
  var sendeObjekt;

  endsumme=calcPrice();

for(i=0;i<document.liste.length;i++)
  {
    if(document.liste.elements[i].checked)
    {
      /*rechnung*/
      gecheckteBox = document.liste.elements[i].name;
      bestellung.push(gecheckteBox);
      preisDerBox = document.liste.elements[i].value;
      parseFloat(preisDerBox);
      preisDerBoxen.push(preisDerBox);



     bestellungJSON = {name: bestellung , preis: preisDerBoxen ,gesamtpreis: endsumme};

     object = JSON.stringify(bestellungJSON);
     sendeObjekt = JSON.parse(object);

    // bestellungsListe.push({name: gecheckteBox, preis: preisDerBox})
     //JSON erstellen
     //let json = JSON.stringify(bestellung);
    }/*ende if*/
  }/*ende for*/


  /* bestellung speichert alle namen */
  /*endsumme speichert den Preis */
}


window.addEventListener("load", calcPrice());

Mit Hilfe eines anderen Threads und einigen Korrekturen und Hilfen konnte ich bereits ein JSON Objekt erstellen.
Gewünschter Ablauf wäre also :
JavaScript erstellt JSON Objekt -> Objekt wird transportiert -> Java Programm empfängt JSON und wandelt es um.
Der nächste Schritt wäre dann bidirektional zu kommunizieren. Aber eins nach dem anderen.

LG !
 

EuroCent

Klappstuhl 2.0
Also Ich bin zwar kein Java Experte, aber irgendwie empfinde Ich, dass es sich sehr schwierig gestaltet.

Ich hab zwar noch nicht viel mit Java gemacht, aber wie willst Du das JSON an ein Java-Programm liefern?!
Das müsste ja dann über UDP-Pakete laufen, die Java empfangen kann.

Dazu muss aber sichergestellt werden, dass das Netzwerk auch anfragen zulässt.

Schau mal hier: Senden und Empfangen von UDP-Paketen mit Java? ob du damit was anfangen kannst.
 

ComFreek

Mod | @comfreek
Moderator
Die wichtigste Frage ist: in welchem Kontext läuft dein JS? Ist das eine normale Website, die von einem Browser geöffnet werden soll? Ist das eine Electron-App? Ist das ein headless Node.js-Prozess?

Wahrscheinlich Ersteres. Dann: unter welcher Domain ist die Website zugreifbar? Wo läuft das Java-Programm? Kann das Java-Programm auf derselben Domain unter einem anderen Port entweder HTTP- oder Websocketanfragen entgegennehmen? Das wäre der einfachste Fall.

Nichts für ungut, aber dein JS sieht wir aus dem frühen letzten Jahrzehnt aus:

  • var statt const und let
  • manuelle for-Schleifen (es gibt "for of")
  • unnötige Zeilen wie Number(betrag); und parseFloat(preisDerBox). Diese beiden Beispiele sind seiteneffektfrei, kannst du also guten Gewissens einfach streichen.
  • Zugriff auf das Formular via document.liste (wobei liste das name-Attribut des Formulars ist).
  • window.addEventListener("load", calcPrice()); macht nicht das, was du denkst. Du führst die Funktion calcPrice genau in dieser Zeile aus, und nicht erst, wenn das load-Event gefeuert hat. Entferne die Klammern um calcPrice.

Ich hab zwar noch nicht viel mit Java gemacht, aber wie willst Du das JSON an ein Java-Programm liefern?!
Das müsste ja dann über UDP-Pakete laufen, die Java empfangen kann.
Warum UDP? Mit einem Java-Programm, das auf einem Server läuft, kannst du alle möglichen Verbindungen unterstützen. Zumindest die, die die Firewalls deines Servers und Anbieters hergeben. UDP erscheint mir recht low-level. Warum nicht HTTP? Wenn es low-level sein muss, dann eher Websocket. Denn clientseitiges JS im Browser kann nur Websocket als geringstes Protokoll -- soweit ich das von vor paar Jahren richtig aufgeschnappt habe.
 

Neue Beiträge