# Java Klasse via Javascript



## xall (21. Mai 2010)

Hallo,
eine kurze vorgeschichte.
Ich habe einen Server A welcher von einem anderen Server B Informationen abgreift.
Soweit so gut.
Nun möchte ich das Anwender auf diesen Server A zugreifen können via einer HTML seite. soweit so gut. Auf Server A läuft ein Java Programm welches dauerhaft Informationen rausgreift.
Nun möchte ich das wenn man die HTML Seite aufruft eine Klasse des dauerhaft laufenden Programms aufruft um einen return wert zu bekommen.

Nun ist meine Frage ist das im laufenden Betrieb des Programms eigentlich möglich, dass eine bestimmte Klasse nur dann aufgerufen wird wenn der Benutzer das will? Also er drückt einen Button das Java Programm liefert den Rückgabe wert hört aber mit seinen normalen Betrieb eigentlich nicht auf?

zweitens. wie würde ich sowas, wenn es möglich ist realisieren? Ich habe im moment einen Javascript code welcher so aussieht

[Java]<HTML><HEAD></HEAD><BODY>
<SCRIPT>
function getVal() {
   alert("Daten:" + 
         document.myApplet.JXTCProxy_DeltaHistoryDaten());
   }
</SCRIPT>
<FORM>
<INPUT type="button" value="call JAVA" 
   onClick = "getVal()">
</FORM>
<APPLET CODE="JXTCProxy_DeltaHistoryDaten.class"  
        NAME="myApplet" 
        HEIGHT=100 WIDTH=100>
</APPLET>
</BODY></HTML>[/code]

Soll ja lediglich zu test zwecken dienen im moment.
Doch wie kann er auf die Klasse zugreifen so weiß er ja nicht wo sich das dokument befindet. Danke für die hilfe


----------



## Noctarius (21. Mai 2010)

Wieso sollte das nicht möglich sein? Was macht ein Servlet denn anderes? Irgendwie glaube ich, ich habe die Frage nicht verstanden.

Eine normale HTML Seite ist doch immer aktiviert durch User-Interaktion. Automatisches, selbstständig Updaten von Informationen ist doch das Problem.


----------



## SlaterB (21. Mai 2010)

ein Browser kann doch wohl nur HTTP- oder FTP-Anfragen in die Welt senden,
ob dann auf einen entfernten Server ein Java-Programm oder PHP oder C++ sitzt, ist ganz egal,

die Frage hat wenig mit Java zu tun, außer dass du vielleicht einen J2EE-Server eben mit Servlets + JSP usw. brauchst, falls noch nicht bekannt,
oder Sockets

ein Java-Programm an sich kann nicht einfach so kommunizieren


----------



## xall (21. Mai 2010)

Die HTML seite ist ja eigentlich gar nicht so das Problem
Ich hol noch etwas weiter aus.
Das Java Programm wirft jede Minute 24 stunden am Tag Daten die er von einem Server B bekommt in eine Datenbank.
So nun muss dieses Programm aber um weitere Funktionen erweitert werden so das es durch User Interaktion (via der HTML Seite) an Informationen kommt die auf Server B liegen (dafür muss das Programm aber halt die notwendigen Informationen erstmal vom Server B holen ehe er sie via Return an die HTML Seite sendet) Also ist die frage ob das Programm nun schnell wenn der User das möchte in diese Klasse Springen kann die notwendigen Informationen sendet und weiter macht ohne das das Programm nicht seinen eigentlich Betrieb aufgibt (z.B die Daten in die Datenbank schreiben)

edit:
Es soll ja nicht auf einen weit entfernten Server das Javaprogramm aktiviert werden, die HTML Seite und das Programm liegen schon auf einen Server das Java Programm kommuniziert mit einem anderen Server.


----------



## Noctarius (21. Mai 2010)

Button-Click -> Standard HTTP-Get Request ans Servlet -> Servlet kennt die Klasseninstanz und ruft Methode auf -> Servlet schmeisst das Ergebnis raus

Irgendwie scheint mir, dass du das ganze Prinzip noch nicht verstanden hast, oder?


----------



## xall (21. Mai 2010)

Ja ok, das kann sein, deswegen bin ich ja in der Anfänger Sektion.
Auf jedenfall hab ich das wie du schon erwähnt hast nicht ganz verstanden.

Wie benutze ich denn so ein Servlet? (Entschuldigung das ich so fragen stelle, aber ich brauche das wirklich dringend) 

Also wie sende ich das Request an das Servlet und wie muss der Grundriss eines solchen Servlets aussehen?


----------



## Noctarius (21. Mai 2010)

Was benutzt du denn bisher um dein Html generieren zu lassen?

A Hello, World Servlet


----------



## xall (21. Mai 2010)

Bisher wird mein HTML nicht generiert sondern ist einfach da so wie ich es programmiert habe (also im moment eine seite mit einem einfachen Button

Nun soll ja nachdem klick auf dem Button alles passieren (was es noch nicht macht)

Klick auf dem button->Klasse wird aufgerufen->Klasse bekommt Daten vom Server B-> Klasse speichert die Daten im String->String wird zurück gegeben->String wird ausgegeben

das ist das was passieren soll. Nur an der stelle mit dem aufrufen und ausgeben harkt es.
Die Klasse macht soweit genau das was ich will und die Seite sieht auch genauso aus wie soll.

Gut hab mir das ganze mal durchgelesen was du mir da gegeben hast.

Heißt das ich müsste am webserver Updates vornehmen um ein solches Servlet laufen zu lassen?


----------



## Noctarius (21. Mai 2010)

Fangen wir klein an:
Nimm statt einem Button einen Link. Der Link verweist auf das Servlet welches die Daten zum Anzeigen aufbereitet (Der Link führt beim Anklicken einen HTTP-Get Request aus). Das Servlet bearbeitet die Daten, generiert das HTML und schickt dieses an den Client zurück.

Der Client kann kein Java ausführen, außer du hast ein Applet.


----------



## xall (21. Mai 2010)

Ja gut das hab ich jetzt schon aber nochmal zu dem Servlet

ich habe gesehen dafür brauch man immer einen Zusatz am Server damit er das händeln kann. Stimmt das oder habe ich da was falsches gelesen?


----------



## Noctarius (21. Mai 2010)

Du brauchst einen Servlet-Container. Also z.B. Tomcat oder Jetty. Nur Apache oder so geht nicht.


----------



## xall (25. Mai 2010)

so, danke ich bin jetzt glaub ich schon nen stück weiter, zumindest kann ich jetzt einfache Servlets ausführen allerdings bin ich jetzt schon einen schritt weitergegangen und habe eine klasse programmiert.

[Java]public class JXTCProxy_DeltaHistoryDaten extends HttpServlet{

     //shared instance
    private JXTCProxy_Shared __shared;
    //log writing instance

    private String __ID="";


     //Creates a new instance of JXTCProxy_DeltaHistoryDaten
    public  JXTCProxy_DeltaHistoryDaten()
    {
         String __received ="";
         int error = 0;
               //#####################################GET DATA FROM SERVERS ####################################
                __received = __shared.getServerData("xx.xx.xx.xx","xxxx"
                            ,"xx.xx.xx.xx",
                            "xxxx","GetVal \"KKS\"");
                //set error to 1 if NoData received
                if(__received.equals("NoData"))
                {
                  error = 1;
                }







    }

    public void doGet(HttpServletRequest request, HttpServletResponse response)




            throws IOException, ServletException
    {
        response.setContentType("text/html");
        PrintWriter out = response.getWriter();
        out.println("<html>");
        out.println("<head>");
        out.println("<title>Hello World!</title>");
        out.println("</head>");
        out.println("<body>");
        out.println("<h1>Hello </h1>");
        out.println("</body>");
        out.println("</html>");
    }
}[/Java]

JXTC Proxy Shared sollte eigentlich auch richtig sein, denn diese hat immer funktioniert(habe ich nicht selber programmiert aber die läuft jetzt schon seit 2005)

so nun ruf ich dieses Serlvet aus und erwarte eigentlich ein Hello (die daten die er vorher bekommt wollte ich noch nicht ausgeben da dies lediglich ein Test sein sollte)

Fehler:


> description The server encountered an internal error () that prevented it from fulfilling this request.
> 
> exception
> 
> ...


----------



## Noctarius (25. Mai 2010)

Die Fehlermeldung sagt doch alles, die XMLOutputter Klasse wurde nicht gefunden, also ab damit in den WEB-INF/lib Ordner.

PS: Die Variablen- und der Klassenname sind ja richtig richtig pfui


----------



## xall (25. Mai 2010)

Hm kannst du dir da nen reim drauf machen, hab die outputter klasse darein gelegt jetzt sagt der mir das das servlet nicht existiert ich bekomm ide Fehlermeldung nicht weg.

Die Namen habe ich so übernommen ist nicht von mir


----------



## xall (26. Mai 2010)

ok nochmal ich.

Also, im moment bin ich soweit das ich eigentlich alle klassen die gebraucht werden in den ordnern habe, nun kommt aber dieser Fehler:



> exception
> 
> javax.servlet.ServletException: Servlet execution threw an exception
> 
> ...



in Zeile 31 steht bei mir:


```
__received = __shared.getServerData("xx.xxx.xx.xx","xxxx","xx.xxx.xx.xx","xxxx","GetVal \"KKS\"");
```

so die dazugehörige klasse die mit shared angesprochen wird ist auch vorhanden nun frage ich mich wo nun weiter der Fehler liegen kann


----------



## Noctarius (26. Mai 2010)

Warum packst du nicht einfach das JAR in den Lib Ordner? Sicher, dass du dich nicht noch etwas mit Java Grundlagen befassen solltest?


----------

