Servlet Methoden Aufruf im Servlet

moon0815

Mitglied
Hallo Community,

vorab einen schönen Abend zusammen!

Ich brauche Verständnishilfe und/oder Tipps zum lösen folgendes Problem: Ich möchte in meinem Servlet im doGet eine Java Methode in HTML Code aufrufen, damit wenn ich die Seite über meinen Localhost öffne dann eine Ausgabe bekomme.
Ausgabe ist der Inhalt eines Arrays, welches in einer printMethode ausgegeben wird.

Momentan komme ich in folgendem Bezug nicht weiter: Wie kann ich Methode im doGet unterbringen und die Umsetzung des Mappings von Java nach HTML erstellen?

Beste Grüße
 

stg

Top Contributor
Ich möchte in meinem Servlet im doGet eine Java Methode in HTML Code aufrufen,

Der Satz ergibt nicht im geringsten irgendeinen Sinn.

Wie kann ich Methode im doGet unterbringen
Was meinst du damit? Ein Servlet ist eine "ganz normale" Java-Klasse. Innerhalb der doGet-Methode kannst du natürlich "ganz normal" irgendwelche weiteren Methoden aufrufen. da gibt es überhaupt nichts spezielles zu beachten.

Mappings von Java nach HTML
Was soll das bedeuten?
 

moon0815

Mitglied
Hallo stg, danke für deine Antwort. Ja, die Erklärung zu was ich meine ist nicht ganz einfach, wahrscheinlich weil es einfach ein Verständnis Problem ist. Vielleicht hilft das ein wenig: Gerne würde ich die printCatalog Methode im Body aufrufen.

Beste Grüße

Java:
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        PrintWriter out = response.getWriter();

        out.println("<html>");
        out.println("<head>");
        out.println("<title>Servlet</title>");
        out.println("</head>");
        out.println("<body>" );  
        out.println("</body>");
        out.println("</html>");
        out.close();


public void Shop() {
    }

   private void printCatalog() {

        shop.getArticles();

            System.out.println(shop.getArticles());

        }
 

stg

Top Contributor
Das Problem ist deine printCatalog-Methode. In dieser legst du dich (mehr oder weniger) auf das Ausgabe-Medium "Konsole" fest. Vielmehr solltest du aber eine Methode haben, die dir lediglich die gwünschten Daten zurückgibt. Die Daten dann für das jeweilige Ausgabe-Medium entsprechend aufzubereiten ist Aufgabe des Aufrufers.
 

moon0815

Mitglied
Hallo stg,
danke dir für die Antwort. TODO eins also die Print Methode zu überarbeiten.
eine Java Methode in HTML Code
Dann kommen wir zu dem Punkt, meines größten Fragezeichen im Kopf. Wie könnte ich dann die richtige PrintMethode im HTML Code aufrufen? Kannst du mir dsbzgl. auch noch einen Tipp/ Gedankenanstoß geben?

Beste Grüße
 

httpdigest

Top Contributor
Was willst du denn eigentlich erreichen? Was soll das Endergebnis sein?
Bevor du Fragen stellst, wie: "wie kann ich aus HTML heraus eine Java-Methode aufrufen", wo sich alle schon fragen "Was will er? Wie soll denn der Browser, der das HTML auswertet und rendert, denn jetzt eine _Java_ Methode irgendwo im Server aufrufen?", schreib doch ersteinmal auf, was du eigentlich erreichen willst.
Also: Warum willst du denn aus "HTML heraus" eine "Java"-Methode aufrufen?
Möchtest du das HTML etwa wie ein Template behandeln und Technologien wie JavaServer Pages oder JavaServer Faces oder einfach nur Template-Engines wie FreeMarker, Velocity oder Thymeleaf einsetzen, um das zum Client/Browser gesendete HTML mittels einer Templatesprache anzupassen?
Schreib doch erstmal auf, was eigentlich das Ziel sein soll, und nicht der Weg, mit dem du glaubst, das Ziel erreichen zu können.
 

moon0815

Mitglied
Hallo httpdigest,
das Ergebnis soll folgendes sein: Beim Aufruf der Seite http://localhost:8080/Inkrement2/showCatalog möchte ich, dass mir dort Artikel angezeigt werden in einer Tabellarischen Form.
Die Artikel sind dabei angelegt in einem Array.

Die Frage
Warum willst du denn aus "HTML heraus" eine "Java"-Methode aufrufen
stellte sich mir, da ich mir das vorgestellt habe das bei dem Aufruf der Seite beim Laden des HTML Codes eine Referenz auf die Methode zum anzeigen der Artikel sein muss. Vielleicht ist mein Verständnis diesbezüglich auch falsch?

mit freundlichen Grüßen
 

httpdigest

Top Contributor
Eine sehr einfache aber auch sehr "dreckige" Lösung wäre, deine existierende PrintWriter.println() Variante zu erweitern und dort einfach eine Schleife über alle Artikel einzubauen. Hier würden wir also Java selbst als Template-Sprache verwenden und entsprechend HTML-Elemente als Strings rausschreiben:
Java:
out.println("<html>");
out.println("<head>");
out.println("<title>Servlet</title>");
out.println("</head>");
out.println("<body>");
out.println("<table>");
out.println("<tr>");
out.println("<th>Name</th>");
out.println("<th>Preis</th>");
out.println("</tr>");
for (Article article : shop.getArticles()) {
  out.println("<tr>");
  out.println("<td>" + article.getName() + "</td>");
  out.println("<td>" + article.getPrice() + "</td>");
  out.println("</tr>");
}
out.println("</table>");
out.println("</body>");
out.println("</html>");

Eine nächste mögliche Verbesserung (meiner Meinung nach) wäre, dass du das Gerüst deiner HTML-Seite ersteinmal als separate HTML Datei abspeicherst. Nun benötigen wir aber eine externe Template-Sprache, die wir in dieses HTML einbetten können. Da gibt es viele viele Möglichkeiten, die ich bereits in der obigen Antwort erwähnt hatte.

Mit FreeMarker könnte das etwa so aussehen:
HTML:
<html>
<head><title>Servlet</title></head>
<body>
<table>
<tr>
  <th>Name</th>
  <th>Preis</th>
</tr>
<#list articles as article>
<tr>
  <td>${article.name}</td>
  <td>${article.price}</td>
</tr>
</#list>
</table>
</body>
</html>

Bitte schaue dir einmal Tutorials/Artikel zu den genannten Lösungen an.

Es gäbe auch die Möglichkeit, im Client/Browser die anzuzeigenden Daten per HTTP-Schnittstelle abzurufen und dann per JavaScript dynamisch im Browser im DOM-Baum hinzuzufügen. Das ist nochmal eine Schwierigkeitsstufe mehr, die ich erstmal nicht empfehlen würde.
 

moon0815

Mitglied
Hallo httpdigest, danke für deine ausführliche Antwort!

Ich werde mir erstmal die "dreckige" Variante ansehen, da wir wohl das Projekt noch weiter ausbauen werden und bestimmt später zu einer externen HTML Datei übergehen.

Edit:
Java:
private void printCatalog() {
        Set<Article> catalog = shop.getArticles();
       
        for (Article article :catalog) {
            float price;
            String name;
           
            out.println("<html>");
            out.println("<head>");
            out.println("<title>Servlet</title>");
            out.println("</head>");
            out.println("<body>" );
           
            out.println("<table>");
                out.println("<tr>");
               
                    out.println("<td>");
                    out.println(name = article.getName());
                    out.println("</td>");
                    out.println("<td>");
                    out.println(price = article.getPrice());
                    out.println("</td>");
                   
                out.println("</tr>");
                out.println("<a href=localhost:8080/Inkrement2/showCatalog>");
            out.println("</table>");
           
            out.println("</body>");
            out.println("</html>");
            out.close();

Habe es nun so gelöst. Mir wird nun auch ein Artikel immer richtig angezeigt, nur leider scheint meine Schleife nicht wirklich zu funktionieren, damit er mir meine 2 weiteren Artikel auch anzeigt.
 

httpdigest

Top Contributor
Habe es nun so gelöst.
Warum?
Warum hast du die Schleife der Artikel nun um die _gesamte_ HTML Seite gezogen und generierst somit nun soviele komplette <html> Elemente/Seiten wie du Artikel hast??? Das wird jetzt natürlich vom Browser leise abgewiesen und der Browser rendert (vermutlich) nur das erste vollständige <html> Element.
Du solltest dich erstmal über HTML an sich informieren. Eine HTML-Seite darf nur ein einziges <html> Element haben.
Und du willst doch die Zeilen der Tabelle pro Artikel replizieren und nicht die gesamte Seite...
 

moon0815

Mitglied
Hallo httpdigest,
danke für den Hinweis, macht bzgl. der HTML Elemente natürlich auch Sinn (obwohl mir das durch aus bekannt ist), der Tag war vielleicht einfach zu lang.
Hab es nun so hinbekommen wie gewünscht. Vielen dank für die Hilfe!

Beste Grüße
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
W Methoden Aufruf in der JSP funktioniert nicht. Allgemeines EE 4
R Variablen statt Java-Methoden in EL's Allgemeines EE 4
J Datenbankmanipulation, methoden des Entity-Managers ? Allgemeines EE 3
S ein array mit methoden? Allgemeines EE 2
A Servlets: Service-Methoden generell Allgemeines EE 2
RaoulDuke EJB 3.0 - Exceptions aus Methoden einer Session Bean Allgemeines EE 2
S Methoden in JSTL Allgemeines EE 2
K Page-import greift nicht in Methoden Allgemeines EE 5
E Methoden einer Bean aufrufen? Allgemeines EE 4
T statische Methoden versus Application-Bean Allgemeines EE 2
J JavaScript erstelltes Script in JSP einbinden+Methoden verw. Allgemeines EE 1
D Remote Aufruf von EJB funktioniert nicht Allgemeines EE 1
OnDemand XHTML Aufruf verbieten? Allgemeines EE 4
S Aufruf eines EJBs aus einer nativen Java-Applikation Allgemeines EE 1
S [Design] Dynamischer EJB Aufruf von Servlet Allgemeines EE 3
F Session abgelaufen und direkter Aufruf Allgemeines EE 10
J Problem mit EJB Aufruf und DualCore Rechner Allgemeines EE 4
B tag lib aufruf falsch Allgemeines EE 7
G Aufruf des Garbage-Collectors Allgemeines EE 4
N Seiten aufruf in einer JSP Allgemeines EE 4
M Fehler aufruf von Index.html Allgemeines EE 7
M Probleme bei Aufruf von JSPs in Unterverzeichnissen Allgemeines EE 2
S Kompilieren der JSP-Seiten ohne Aufruf Allgemeines EE 7
G Jakarta Servlet API 5.0 Allgemeines EE 1
pkm Frage wegen AJAX-Zugriff auf ein Servlet Allgemeines EE 1
Dimax Servlet Servlet Kommunikation Allgemeines EE 18
K Unterschied zwischen JSP & Servlet gegenüber REST mittels JAX-RS Allgemeines EE 1
Dimax Servlet läuft in Eclipse, aber nicht im Browser Allgemeines EE 74
M URL Servlet Request getParameter Allgemeines EE 2
J 404 Not found (Servlet) Allgemeines EE 1
J Asynchrones Servlet löst NullPointerException aus Allgemeines EE 5
E Servlet Servlet das richtige? Allgemeines EE 11
B HTTP-Header-Inspektor-Servlet Allgemeines EE 1
N JSP Servlet mit JSP ansprechen Allgemeines EE 2
F Mehrere Bilder aus MySQL DB via Servlet darstellen. Allgemeines EE 1
J FTP und Servlet Allgemeines EE 11
H Post an Servlet Allgemeines EE 2
A Binärdatei vom Servlet erzeugen lassen Allgemeines EE 3
S Servlet Authentication Filter Allgemeines EE 0
S LDAP JAAS oder Servlet Allgemeines EE 0
G Problem: Servlet in JSP einbinden mit <jsp:include> Allgemeines EE 3
F eigene Anwendung per Servlet Container starten Allgemeines EE 9
F Servlet Daten im Speicher ablegen Allgemeines EE 3
L Servlet ClassNotFoundException Servlet Allgemeines EE 3
G Allgemeine Frage zu Authentifizierung mittels Servlet API Allgemeines EE 2
J Servlet "package does not exist" Allgemeines EE 5
K Servlet-Mapping Allgemeines EE 9
0 Servlet mit ArrayList Allgemeines EE 3
E Servlet unter mehreren Adressen Allgemeines EE 16
S Pfad-Zugriff über Servlet-init() Allgemeines EE 2
E Servlet Wie kann ich ohne Hilfe von Eclipse in JBoss mein servlet aufrufen Allgemeines EE 2
S Servlet.service() threw exception Allgemeines EE 4
A Servlet erkennt request Objekt nicht Allgemeines EE 8
G Direkter Zugriff auf Servlet- doPost Allgemeines EE 15
G Servlet doGet, doPost Allgemeines EE 3
A Kodierungsproblem bei Parameterübergabe von Browser an Servlet (GET) Allgemeines EE 2
Antoras servlet-mapping auf dynamische URLs Allgemeines EE 17
0 Problem mit librarys javax.servlet.http.HttpServletRequest cannot be resolved Allgemeines EE 1
MQue Ajax - Servlet Allgemeines EE 2
MQue Servlet Allgemeines EE 9
S Servlet auf JBoss 5? Allgemeines EE 11
B HttpSession bekommen wenn nicht in Servlet Allgemeines EE 8
MQue Servlet / Button Allgemeines EE 5
S In Eclipse werden die "Servlet-Klassen" nicht gefu Allgemeines EE 2
U javax.faces und javax.servlet cannot be resolved Allgemeines EE 2
W Potentielles Memory Leak bei Servlet Allgemeines EE 6
B unterschied servlet und bean Allgemeines EE 2
Escorter Servlet .sar und jede Menge .jar Archive Allgemeines EE 2
N Servlet und JSF (URL-Rewriting)? Allgemeines EE 3
A jsf: Servlet aufrufen, wie geht das? web.xml Fehler? Allgemeines EE 13
N Servlet zyklisch aktualisieren Allgemeines EE 2
zilti Verbindung Applet <-> Servlet Allgemeines EE 5
ARadauer Servlet Bild Rückgabe Allgemeines EE 2
I Über Formular Daten zu Servlet Allgemeines EE 36
H Servlet - Zwischenmeldung anzeigen bei längerer Berechnung Allgemeines EE 2
G Ordner mit Umlauten einlesen - Servlet Allgemeines EE 3
A web.xml für Servlet in Tomcat 5.5 erstellen Allgemeines EE 2
M Zwei Buttons in einem Servlet Allgemeines EE 2
M Servlet lässt sich nicht aufrufen Allgemeines EE 6
A web.xml für Servlet in Tomcat erstellen Allgemeines EE 6
B Servlet Allgemeines EE 3
G EJB - EJB wird nicht ins Servlet geladen Allgemeines EE 3
K load-on-startup -> in der Servlet Klasse Allgemeines EE 6
G Objekt an Servlet übergeben - oder Objekt global definieren? Allgemeines EE 4
W Was bei Servlet-Entwicklung alles beachten? Allgemeines EE 8
R Zugriff auf Filter Servlet Allgemeines EE 10
I JBOSS Jsp Files Pfad im Servlet? Allgemeines EE 4
N Servlet-Request abbrechen? Allgemeines EE 3
D Java Servlet mit Radio Buttons Allgemeines EE 2
G Servlet debugging Allgemeines EE 8
N Thread von Servlet aus starten Allgemeines EE 16
N JSP: Collection im Servlet überwachen (mit AJAX)? Allgemeines EE 5
J Socket daten darstellen per jsp,servlet Allgemeines EE 2
W servlet über https Allgemeines EE 2
L Servlet kann Funktion nicht aufrufen Allgemeines EE 3
B Parameterübergane von Servlet an JSP funktioniert nicht ? Allgemeines EE 2
M Aus einem Servlet auf ein anderes zugreifen ? Allgemeines EE 2
G Servlet Serializable Allgemeines EE 2
B Servlet-Api.jar auf JBoss? (Migration von Tomcat zu JBoss) Allgemeines EE 4
H Servlet - Importieren von Code Allgemeines EE 2

Ähnliche Java Themen

Neue Themen


Oben