Erste Schritte Grundsatzfragen Unterschied Java / PHP

shredding

Mitglied
Hallo zusammen,

ich habe mich entschlossen, ein Webseitenprojekt serverseitig mit Java umzusetzen. Ich habe einige Erfahrung mit serverseitiger (OOP)-Programmierung in PHP und beherrsche mit Actionscript 3 eine javaähnliche Sprache recht gut.

Ich habe lokal Tomcat eingerichtet und meine ersten kleineren Anwendungen zum laufen gebracht. Dabei haben sich mir einige grundsätzliche Fragen gestellt:

In der Skriptsprache PHP ist es so, dass bei jedem Aufruf alles gemacht wird: Das Framework wird gebootet, Klassenbibliotheken werden eingebunden, Konfigurationsdateien eingelesen und verfügbar gemacht, grundsätzliche Dinge werden aus der DB eingelesen etc.

Jetzt ist es bei Java doch anders: Das Programm läuft immer, sobald es einmal gestartet wurde. Richtig?

Ich hab als kleinen Test mal ein Singleton gebaut und darin eine Variable über Parameter gesetzt - das war auch beim Reload der Seite (und auch in einem anderen Browser) noch da.

Verstehe ich das richtig: Das "Programm" das ich schreibe läuft halt "immer" und nur die Servlets stellen einen Thread (also das was in PHP Prozesse waren) dar, die beendet werden, sobald der Prozess durch ist?

Wenn dem so ist, wann startet das Programm? Wenn ich es das erste mal aufrufe? Oder kann ich eine Initalisierungsklasse schreiben, die bestimmte Werte definiert, so dass sie verfügbar sind?

Wie lange sind die Variablen verfügbar? Also anders gefragt: Wenn ich in einer idealen Welt Leben würde, in der es unendlich viel Speicher gibt & der Server 100% verfügbar wäre, bräuchte ich dann gar keine Datenbank, sondern Speichere alles in Klassen?

Und zu guter Letzt: Wenn ich etwa eine reine API bereitstellen will, brauch ich dann zwingend eine indes.jsp oder kann ich auch nur mit Servlets arbeiten?

Vielen Dank!
 
B

bygones

Gast
Jetzt ist es bei Java doch anders: Das Programm läuft immer, sobald es einmal gestartet wurde. Richtig?
es laeuft solange der Kontext (zb Tomcat) aktiv ist. Ansonsten laeuft das, was beim Laden der Klassen geschieht (je nach dem wieviel Logik du bei Klasseninitialisierungen drin hast), es wird aber nicht sofort der Gesamtecode abgearbeitet und alle Instanzen erstellt etc.

Ich hab als kleinen Test mal ein Singleton gebaut und darin eine Variable über Parameter gesetzt - das war auch beim Reload der Seite (und auch in einem anderen Browser) noch da.
Welcher Client wann und wieoft anfraegt ist bei einer serveranwendung egal. Solange diese aktiv ist, ist bei statischen Werten der Wert immer der gleiche und immer verfuegbar.
Bei nicht statischen Instanzen/Werten ist es dann Sessionbasierend.

Wenn dem so ist, wann startet das Programm? Wenn ich es das erste mal aufrufe? Oder kann ich eine Initalisierungsklasse schreiben, die bestimmte Werte definiert, so dass sie verfügbar sind?
Das Programm startet sobald der Servercontainer startet, je nach dem was du in deinen Konfigurationen definierst werden Klassen initialisiert.
Die zweite Frage ist etwas unklar.... welche Werte wie und wann verfuegbar?

Wie lange sind die Variablen verfügbar? Also anders gefragt: Wenn ich in einer idealen Welt Leben würde, in der es unendlich viel Speicher gibt & der Server 100% verfügbar wäre, bräuchte ich dann gar keine Datenbank, sondern Speichere alles in Klassen
bei statischen Sachen solange bis der Kontext weg ist, dann ists aber egal ob Herr X oder Frau Y es nutzen, du hast immer gleiche werte. Bei nicht-statischen bist in Sessions und da halten die Werte eben solange es die Session gibt.
Wegen Datenbank etc - bring nicht Klassen und Daten durcheinander. Eine Persistierung ist relevant um Daten konstant (sicher und gueltig) speichern zu koennen.

Und zu guter Letzt: Wenn ich etwa eine reine API bereitstellen will, brauch ich dann zwingend eine indes.jsp oder kann ich auch nur mit Servlets arbeiten?
Servlets sind KEINE API. Deine Api sollte frei davon sein, in welchem Kontext sie benutzt wird. Die Servlets sind dann eine Adaption deiner API fuer einen Webclient.
 

shredding

Mitglied
Vielen Dank, jetzt wird mir einiges klarer.

Bei nicht statischen Instanzen/Werten ist es dann Sessionbasierend.
Aber die Session anlegen und verwalten muss ich doch selbst, oder? Ich sehe lediglich, das im WEB-INF Order, in der web.xml, dass dort - von Netbeans automatisch - eine session-config angelegt wurde. Aber Session Daten werden - zumindest laut Firebug - nicht angelegt.

Das Programm startet sobald der Servercontainer startet, je nach dem was du in deinen Konfigurationen definierst werden Klassen initialisiert.
Das verstehe ich eben nicht. Solange ich nicht mindestens 1x eine Anfrage gemacht habe, wird doch auch nichts initalisiert. Oder kann ich irgendwo eine Klasse angeben, die immer gestartet wird, wenn auch der Servercontainer gestartet wird?

Die zweite Frage ist etwas unklar.... welche Werte wie und wann verfuegbar? [...] bei statischen Sachen solange bis der Kontext weg ist, dann ists aber egal ob Herr X oder Frau Y es nutzen, du hast immer gleiche werte. Bei nicht-statischen bist in Sessions und da halten die Werte eben solange es die Session gibt.
Ich meinte das im Vergleich mit PHP. Wenn ich dort eine statische Variable anlege, existiert diese ja nur für den jeweiligen Prozess - wenn die nächste Anfrage kommt geht alles wieder von vorne los. Während Java die jeweiligen Sachen wohl im Speicher hält.

Servlets sind KEINE API. Deine Api sollte frei davon sein, in welchem Kontext sie benutzt wird. Die Servlets sind dann eine Adaption deiner API fuer einen Webclient.
Ja, ich meine wenn ich was bereitstelle, wo andere dann nur Daten abrufen; wenn ich also gar keine eigenen Webseiten generieren würde.
 

shredding

Mitglied
Hier mal ein Beispiel, das ich meine:

Java:
public class TestServlet1 extends HttpServlet {
    
    private int count = 1;            
            
     @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        
        count++;
                
        if (request.getParameterMap().containsKey("val")) {
            String val = request.getParameter("val");
            TestStatic.test = val;
        }
        
        
        response.setContentType("text/html;charset=UTF-8");
        PrintWriter out = response.getWriter();
        try {

            out.println("<p>Statische Variable: "+TestStatic.test+"</p>");
            out.println("<p> Instanzvariable: "+count+"</p>");


        } finally {            
            out.close();
        }
    }
}

Ich habe jetzt mal das Servlet einmal in Firefox und einmal in Chrome geöffnet. Wie erwartet bleibt die statische Klasse im Speicher.

Aber: der count, eine Instanzvariable, zählt in beiden Browsern hoch. Ich hatte erwartet, dass diese Instanzvariable nur für den Zeitraum der Abfrage existiert. Ich hatte gedacht das die Klasse nur solange existiert, wie der Request kommt & dass sie dann vom Garbage Collector eingesammelt wird.

Noch mehr verwundert es mich, dass es in beiden Browsern den gleichen Count gibt (wenn ich 5x refreshe im Firefox, springt er im Chrome auch 5 +1 Schritte hoch beim nächsten Refresh.

Ich hatte gedacht, dass für jeden Request eine eigene Klasseninstanz angelegt wird - vor allem wenn die Anfrage von verschiedenen Clients kommt.
 
Zuletzt bearbeitet:

mvitz

Top Contributor
Wenn man mal in die Servlet API Specification guckt ( The Java Community Process(SM) Program - JSRs: Java Specification Requests - detail JSR# 315 ), dann steht dort
...
2.2 Number of Instances
...
For a servlet not hosted in a distributed environment (the default), the servlet
container must use only one instance per servlet declaration. However, for a servlet
implementing the SingleThreadModel interface, the servlet container may
instantiate multiple instances to handle a heavy request load and serialize requests
to a particular instance.
...

Es gibt also nur genau eine Instanz eines Servlets im Server und dementsprechend ist deine Instanzvariable für jeden Nutzer (Browser) deines Servlets auf dem selben Wert.
 

JanHH

Top Contributor
Du solltest Dich vielleicht mit dem Konzept der Scopes vertraut machen.. also quasi Sichtbarkeitsbereiche bzw. Gültigkeitsbereiche von Variablen. Relevant sind da vor allem Application Scopre (quasi globale Variablen, die die gesamte Anwendung über bestehen und von allen Clients/Sessions aus Sichtbar sind), und Session Scope (an die jeweilige HTTP-Session gebunden). Jeder Aufruf der Anwendung führt dazu, dass ein Session-Objekt erzeugt wird (automatisch, darum musst Du Dich nicht kümmern), sofern zu der jsessionid des clients keins gefunden wird. Typische anwendung von Session-Variablen ist die Warenkorb-Funktionalität.

Sofern man beleibig speicher hätte, bräuchte man in der tat keine Datenbank, ausser für Sachen, die zwischen ab- und anmelden eines Users bestehen bleiben sollen (wie z.B. Username/Passwort). Könnte man allerdings auch im Application Scope speichern. Eine einfache Webanwenudng kann man in der tat ohne Persistenz realisieren.
 

shredding

Mitglied
Vielen Dank für eure Hilfe. Jetzt ist mir einiges klarer.

Ich lese mich mal ein & werde sicher noch das ein oder andere Mal im Basics Forum aufschlagen ^^
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
B Grundsatzfragen zu meinem neuen Projekt Einnahmen-Ausgaben App Java Basics - Anfänger-Themen 8
B Paar kleine Grundsatzfragen zu Java Java Basics - Anfänger-Themen 5
MoxMorris Integer.MAX_VALUE und Double.MAX_VALUE Unterschied Java Basics - Anfänger-Themen 3
R Java boolean Unterschied " == " und " = " Java Basics - Anfänger-Themen 3
berserkerdq2 Größter unterschied von extends thread und implements runnable? Java Basics - Anfänger-Themen 2
P Unterschied Installation von zipped JDK vs Installer-JDK (auf Windows)? Java Basics - Anfänger-Themen 2
S Unterschied zwischen Denkweisen Java Basics - Anfänger-Themen 13
M Unterschied Integer.toString(x) und x.toString() Java Basics - Anfänger-Themen 22
H Arrays: Größten Zahlen Unterschied herausfinden Java Basics - Anfänger-Themen 20
Ras Unterschied zwischen parser xml and api xml Java Basics - Anfänger-Themen 7
K Unterschied Information Hiding und Kapselung? Java Basics - Anfänger-Themen 2
X Was ist der Unterschied zwischen materialisierten und nichtmaterialisierten Attributen einer Klasse? Java Basics - Anfänger-Themen 1
jhCDtGVjcZGcfzug Was ist der Unterschied zwischen diesen Quellcodes? Java Basics - Anfänger-Themen 3
G Methoden wo ist der Unterschied?? Java Basics - Anfänger-Themen 11
D Unterschied charAt() substr() Java Basics - Anfänger-Themen 3
Y Unterschied zwischen WindowBuilder und herkömmlichen erstellen des GUI´s? Java Basics - Anfänger-Themen 9
U Worin besteht der Unterschied zwischen call by reference und call by value? Java Basics - Anfänger-Themen 14
D Unterschied == und equals in Arrays Java Basics - Anfänger-Themen 2
H Unterschied Konstruktor und Klassenname x = new Klassenname; Java Basics - Anfänger-Themen 3
H .jar unterschied .class Java Basics - Anfänger-Themen 3
E Unterschied zwischen new und import Java Basics - Anfänger-Themen 5
O Unterschied Arrays, Listen, Mengen Java Basics - Anfänger-Themen 24
K Unterschied for-Schleife Java Basics - Anfänger-Themen 14
B Unterschied zwischen (List<T> a) und (T[] a) Java Basics - Anfänger-Themen 7
M Schlüsselworte Unterschied: String.matches und Pattern.compile Java Basics - Anfänger-Themen 2
G Unterschied Instanz- Klassenvariable Java Basics - Anfänger-Themen 11
C Methoden Unterschied zwichen public int, public static int und public static void Java Basics - Anfänger-Themen 2
Aprendiendo Unterschied zwischen Referenzvariable und Instanzvariable. Java Basics - Anfänger-Themen 2
H Unterschied BufferedReader und BufferedInputStream Java Basics - Anfänger-Themen 4
N Unterschied von Post- und Preinkrement Java Basics - Anfänger-Themen 3
N Unterschied zwischen Checked und Unchecked Exceptions Java Basics - Anfänger-Themen 12
T Unterschied dynamischer und statischer Laufzeittyp Java Basics - Anfänger-Themen 1
schoenosrockos Unterschied zwischen Objekten und vererbungen Java Basics - Anfänger-Themen 1
D Unterschied Date - Calendar Java Basics - Anfänger-Themen 1
J Variablen Unterschied zwischen lokalen-, Instanz-, Klassenvariablen Java Basics - Anfänger-Themen 6
J Warum ist das ein Unterschied (Integer / int) Java Basics - Anfänger-Themen 2
S Erste Schritte Unterschied "if" und "else if" Java Basics - Anfänger-Themen 27
F Erste Schritte Unterschied: Array "leer" / "null" Java Basics - Anfänger-Themen 3
V Unterschied x++ und x=x++ Java Basics - Anfänger-Themen 6
O Unterschied Baum <-> Automat Java Basics - Anfänger-Themen 2
A Klassen Unterschied Warteschlange, Stapel und Liste Java Basics - Anfänger-Themen 3
L Unterschied zwischen Klassen - und Instanzvarbiablen Java Basics - Anfänger-Themen 1
M Wo liegt der Unterschied? Deklaration Klasse oder Konstruktur Java Basics - Anfänger-Themen 3
S Unterschied print() und println() Java Basics - Anfänger-Themen 3
S Unterschied .jar Datei ausführen und junit Testfall... Java Basics - Anfänger-Themen 3
S Datentypen Unterschied elementare und zusammengesetzte/strukturierte Datentypen Java Basics - Anfänger-Themen 5
M Unterschied zwischen Classpath eines Eclipse Projektes und dem CLASSPATH? Java Basics - Anfänger-Themen 3
S Unterschied Ausführung in IDE <-> Befehlszeile Java Basics - Anfänger-Themen 0
C Unterschied Objekte! Java Basics - Anfänger-Themen 13
D Unterschied zwischen double und Double Java Basics - Anfänger-Themen 4
Q Unterschied zwischen static und keinem Modifier Java Basics - Anfänger-Themen 15
A Unterschied Textdatei und Quelltextdatei Java Basics - Anfänger-Themen 5
K Unterschied zwischen Jar, war und ear Dateien Java Basics - Anfänger-Themen 3
R Erste Schritte Unterschied Array-Parameter zu Array als Parameter? Java Basics - Anfänger-Themen 7
V Unterschied Array & ArrayList Java Basics - Anfänger-Themen 13
D Geschwindigkeits unterschied bei import? Java Basics - Anfänger-Themen 13
T Unterschied zwischen Integrationstest und JUnit test? Java Basics - Anfänger-Themen 12
L Unterschied zu C++ Java Basics - Anfänger-Themen 6
A Unterschied JDK SDK Java Basics - Anfänger-Themen 4
L Objekterzeugung Unterschied..? Java Basics - Anfänger-Themen 6
K Unterschied zwischen break und continue in einer Schleife Java Basics - Anfänger-Themen 14
B Klassen Unterschied Konstruktoren. Java Basics - Anfänger-Themen 3
A Exakte Unterschied zwischen Java EE und Java SE? Java Basics - Anfänger-Themen 4
J Unterschied zwischen statische und nicht statische Methoden? Java Basics - Anfänger-Themen 14
S Interface Unterschied: setContentPane() & getContentPane().add Java Basics - Anfänger-Themen 5
Helgon Unterschied runnable und normale jar Java Basics - Anfänger-Themen 6
D Unterschied bidirectional unidirectional Java Basics - Anfänger-Themen 10
F Interface Unterschied von Attributen und Methoden bei abstrakten Klassen und Interfaces Java Basics - Anfänger-Themen 5
O Java unterschied zwischen Interface und Interface_Referenzen!!?? Java Basics - Anfänger-Themen 7
I Unterschied Lizenz EPL und LGPL Java Basics - Anfänger-Themen 7
P Unterschied Windowclosed / WindowClosing Java Basics - Anfänger-Themen 10
J scheduleAtFixedRate scheduleWithFixedDelay Unterschied? Java Basics - Anfänger-Themen 17
P Unterschied JRE innerhalb/ außerhalb des JDK Verzeichnisses? Java Basics - Anfänger-Themen 5
H printf: Unterschied %f und %g Java Basics - Anfänger-Themen 5
M Unterschied SDK 1.4 und 1.6 Java Basics - Anfänger-Themen 5
S Unterschied java.util.prefs / java.util.Properties Java Basics - Anfänger-Themen 3
J unterschied zwischen awt und swing Java Basics - Anfänger-Themen 6
T Unterschied in Zahlendarstellungen Java Basics - Anfänger-Themen 2
F Unterschied JPanel und JFrame Java Basics - Anfänger-Themen 5
K Unterschied Klassen- und Instanzattribute Java Basics - Anfänger-Themen 4
L Unterschied Konstruktor / Getter Setter Java Basics - Anfänger-Themen 13
S Unterschied Comparable und Comparator Java Basics - Anfänger-Themen 2
C unterschied generische typen und supertypen als methodenparameter Java Basics - Anfänger-Themen 3
J Instanzvariablen - Lokale Variablen - warum der Unterschied? Java Basics - Anfänger-Themen 5
P Unterschied dieser 2 code Zeilen Java Basics - Anfänger-Themen 12
I Datentypen Unterschied in Deklaration von ArrayList Java Basics - Anfänger-Themen 26
G Unterschied e extends y vs ? extends y Java Basics - Anfänger-Themen 5
M Unterschied append / write aus der Klasse Writer Java Basics - Anfänger-Themen 2
M unterschied OutpuStreamWriter und BufferedWriter Java Basics - Anfänger-Themen 5
B Unterschied zwischen String & char Array? Java Basics - Anfänger-Themen 5
J Unterschied Instanzattribut und Referenzvariable Java Basics - Anfänger-Themen 4
J Unterschied bei Schleifen Java Basics - Anfänger-Themen 2
B Was ist der unterschied zwischen Singleton und Strategy? Java Basics - Anfänger-Themen 6
B Variablen: unterschied zwischen Klassen und Instanzvariable Java Basics - Anfänger-Themen 2
W Unterschied JFrame und JLabel bezüglich Layout? Java Basics - Anfänger-Themen 2
B Generische Vererbung was ist der Unterschied? Java Basics - Anfänger-Themen 4
B ArrayList generisch? was ist der Unterschied? Java Basics - Anfänger-Themen 4
H Unterschied zwischen 2 Date in Sekunden am einfachsten? Java Basics - Anfänger-Themen 5
tanja Der Unterschied Zwischen Arrays in Java und ADA Java Basics - Anfänger-Themen 11
ModellbahnerTT Unterschied zwischen zwei Frame close Varianten Java Basics - Anfänger-Themen 3

Ähnliche Java Themen

Neue Themen


Oben