Wo sind die Servlet-Klassen?

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
Benutzeravatar
Columbus
Beiträge: 1051
Registriert: 30.04.2002 15:25:02
Wohnort: Mainz
Kontaktdaten:

Wo sind die Servlet-Klassen?

Beitrag von Columbus » 03.02.2005 17:45:46

Hi,
ich bin immer noch am Servlet backen für Tomcat.
Mitlerweile läuft Tomcat und ich möchte meine Servlets zum laufen bringen, aber jetzt gibts was neues zum kotzen :x
Mein Java-Compiler hat die servlet-Klassen nicht.
Ich habe das Java Packet j2sdk-1_4_2_06-linux-i586.bin von Sun runtergeladen und wie unter http://www.debianforum.de/wiki/JavaPackageGenerator beschrieben in ein Debian-Packet gewandelt und installiert. Soviel aus der Doku hervorgeht sollte da doch alles drin sein ( sogar die J2EE Klassen???? ) aber jetzt gibt der Compiler mir hier aus, dass er die Packages javax.servlet.http nicht kennt.
Muss ich mir die gesondert runterladen und direkt installiern und wo?

Gruss Christian

Benutzeravatar
puddlejumper
Beiträge: 58
Registriert: 22.01.2005 00:29:52

Beitrag von puddlejumper » 03.02.2005 22:44:23

Hallo Christian,

Im normalen Java SDK sind weder die Servlet-Klassen, noch die Enterprise Klassen enthalten.

Du bräuchtest wohl noch das JWSDK (java web service developement kit) oder evtl. müsste es auch reichen, wenn Du das servlet.jar aus den Tomcat-Verzeichnissen mit in den Classpath beim compilieren aufnimmst.

Gruss,
PuddleJumper.

Benutzeravatar
Columbus
Beiträge: 1051
Registriert: 30.04.2002 15:25:02
Wohnort: Mainz
Kontaktdaten:

Beitrag von Columbus » 04.02.2005 10:48:47

Hallo puddlejumper,

reicht es nicht wenn ich das servlet.jar in /usr/share/java lege?
Also offensichtlich funktioniert es nicht, denn ich habe es probiert und der Compiler hat es nicht gefunden. Was müsste ich den tun, wenn ich die J2EE und die J2ME-Klassen auch noch zur verfügung haben möchte?

Gruss Christian

Benutzeravatar
hupfdule
Beiträge: 1864
Registriert: 09.12.2002 15:04:37
Wohnort: Berlin
Kontaktdaten:

Beitrag von hupfdule » 04.02.2005 11:30:53


Benutzeravatar
Columbus
Beiträge: 1051
Registriert: 30.04.2002 15:25:02
Wohnort: Mainz
Kontaktdaten:

Beitrag von Columbus » 04.02.2005 12:20:31

Und dann? Kann man das auch als .deb umwandeln oder direkt in /usr/share/java installieren?

Gruss Christian

Benutzeravatar
hupfdule
Beiträge: 1864
Registriert: 09.12.2002 15:04:37
Wohnort: Berlin
Kontaktdaten:

Beitrag von hupfdule » 04.02.2005 16:29:22

Als deb umwandeln wird wohl nicht sehr sinnvoll sein. Du musst auf jeden Fall die entsprechenden jar-Dateien im Classpath referenzieren.

Benutzeravatar
suntsu
Beiträge: 2947
Registriert: 03.05.2002 10:45:12
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: schweiz
Kontaktdaten:

Beitrag von suntsu » 04.02.2005 21:28:11

puddlejumper hat geschrieben:Hallo Christian,

Im normalen Java SDK sind weder die Servlet-Klassen, noch die Enterprise Klassen enthalten.

Du bräuchtest wohl noch das JWSDK (java web service developement kit) oder evtl. müsste es auch reichen, wenn Du das servlet.jar aus den Tomcat-Verzeichnissen mit in den Classpath beim compilieren aufnimmst.

Gruss,
PuddleJumper.
imo brauchst du kein jwsdk, weil das für webservice da ist, und nicht für servlets.
Es reicht imo wenn du servler.jar in den Pfad aufnimmst.

gruss
manuel

Benutzeravatar
puddlejumper
Beiträge: 58
Registriert: 22.01.2005 00:29:52

Beitrag von puddlejumper » 05.02.2005 00:46:50

hupfdule hat geschrieben:Als deb umwandeln wird wohl nicht sehr sinnvoll sein.
Ich muss gestehen, dass ich bei Java, Tomcat etc. bisher nicht nach existierenden Paketen gesucht habe. Die habe ich immer von "Hand" installiert (soll heissen unter /usr/local entsprechend entpackt/verlinkt...)

Aber jar-Dateien musst Du eh immer explizit in den Classpath aufnehmen, es sei denn, es laeuft ein Script etc. welches Jar-Files in einem Verzeichniss automatisch in den Classpath aufnimmt. (siehe NetBeans ext/lib etc.)

Gruss,
PuddleJumper.

Benutzeravatar
finupsen
Beiträge: 1327
Registriert: 21.04.2004 20:07:05
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Dortmund
Kontaktdaten:

Beitrag von finupsen » 05.02.2005 01:08:14

hallo,

exakt so, wie "suntsu" schreibt .....

Wenn du beim compilieren eine ClassNotFoundException o.ä. fliegt, musste die fehlenden
klassen javax.servlet.* usw.dem compiler mitteilen. Die tomcat klassen (JAR`s) findest
du unter <tomcat-root>/common/lib/ .
Du kannst die auch in deiner ide (meist unter projekt-eigenschaften) angeben (oder compiler-options - wo auch immer;) )

Jedenfalls brauchst du weder J2ME, JWSDK oder irgendein enterprise-beans-zeugs.
JDK und tomcat reicht aus ..... sofern du auch nur servletten oder jsp`s schreiben möchtest.

> Und dann? Kann man das auch als .deb umwandeln oder direkt in /usr/share/java installieren?

Am besten J2SE nach /usr/lib entpacken und das ganze dann verlinken:
ln -s /usr/lib/j2se-xxxx /usr/lib/java
Das verzeichnis /usr/lib/java/bin/ im $PATH aufnehemen oder die exec.-files einzeln nach /usr/bin/ verlinken.
Das wars ....

Benutzeravatar
puddlejumper
Beiträge: 58
Registriert: 22.01.2005 00:29:52

Beitrag von puddlejumper » 05.02.2005 13:14:55

Wenn Du etwas an dem Paket-Manger auf einer Maschiene vorbei installierst, würde ich das immer unter /usr/local packen.

Gruss,
PuddleJumper.

Benutzeravatar
hupfdule
Beiträge: 1864
Registriert: 09.12.2002 15:04:37
Wohnort: Berlin
Kontaktdaten:

Beitrag von hupfdule » 05.02.2005 20:43:02

puddlejumper hat geschrieben:Wenn Du etwas an dem Paket-Manger auf einer Maschiene vorbei installierst, würde ich das immer unter /usr/local packen..
Nur wenn es sich an die Unix Dateisystemstruktur hält. Da java alles andere tut, sollte es nach /opt. Dort gehörten Programme hin, die alles in einem eigenen Wurzelverzeichnis halten.

Benutzeravatar
Columbus
Beiträge: 1051
Registriert: 30.04.2002 15:25:02
Wohnort: Mainz
Kontaktdaten:

Beitrag von Columbus » 06.02.2005 22:09:21

Also ich habe wie oben erwähnt das SDK 1.4 direkt von Java und mit make-jpkg schön sauber in ein Debian-Packet umgewandelt. Die JVM und die anderen Executebles liegen jetzt in /usr/lib/j2sdk1.4-sun, die Klassen liegen unter /usr/share/java.
Also dachte ich packste das servlet.jar auch da rein oder erstellst ein Unter-Verzeichnis "javax" dort und legst es dort rein. Aber nix. Der Compiler findet es nicht.
<dumme Frage> muss ein Servlet vom Javac kompiliert werden? Oder macht das der Tomcat alleine? Kann ich mir ja nicht vorstellen. Und wie ist das mit J2EE? Da werden ja auch keine main Executebles erzeugt sondern Threats die von Bea oder Jboss aufgerufen werden!?!</dumme Frage>

Benutzeravatar
finupsen
Beiträge: 1327
Registriert: 21.04.2004 20:07:05
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Dortmund
Kontaktdaten:

Beitrag von finupsen » 06.02.2005 23:07:48

hallo,

> Also dachte ich packste das servlet.jar auch da rein oder erstellst ein Unter-Verzeichnis "javax" dort und legst es dort rein. Aber nix.

Lass die doch dort, wo sie ist und teile deinem compiler mit wo sie liegt .
Du solltest auch unbedingt eine IDE besorgen, da du sonst die übersicht deiner jar`s (und deren pfade) verlieren wirst.

> muss ein Servlet vom Javac kompiliert werden?

ja, selbstverstandlich.

> Oder macht das der Tomcat alleine?

nein, tomcat kompiliert selbst nicht und verfügt auch nicht über ein hotdeploy wie etwa beim jboss, weblogic etc.

Benutzeravatar
Columbus
Beiträge: 1051
Registriert: 30.04.2002 15:25:02
Wohnort: Mainz
Kontaktdaten:

Beitrag von Columbus » 08.02.2005 12:44:22

Lass die doch dort, wo sie ist und teile deinem compiler mit wo sie liegt .
Ja aber das isses doch. Ich habe meinen Classpath auf /usr/lib/j2sdk1.4-sun:/usr/share/java:/usr/sharetomcat4/common/lib gesetzt.
Dort liegen reichlich servlet.jar's, aber keine von denen erkennt er. Habe ich was ausgelassen?
Du solltest auch unbedingt eine IDE besorgen, da du sonst die übersicht deiner jar`s (und deren pfade) verlieren wirst.
Brauche ich für Servlets in Eclipse einen eigenes Pluggin?

Dank schonmal...

Gruss Christian

Benutzeravatar
finupsen
Beiträge: 1327
Registriert: 21.04.2004 20:07:05
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Dortmund
Kontaktdaten:

Beitrag von finupsen » 08.02.2005 13:30:17

hallo,

es ist ein unterschied, ob man den classpath so setzt:

/usr/lib/xyz/

oder

/usr/lib/xyz/servlet.jar

setzt.

Nochmal, du musst deinem compiler die jars mitteilen. Z.B. so:
javac -cp /usr/lib/java/lib/rt.jar meineklasse.java (als beispiel)

Und wie gesagt, IDE`s sind etwas komfortabler, denn da musste den compiler nicht per
console starten. In den optionen des compilers (project properties o.ä.) kannste so viele
JAR`s angeben wie du lust hast. Das sind grundlegende eigenschaften einer IDE, dafür
brauchste auch keine speziellen plugins.
Niemand hat vor eine zentrale Datensammelbehörde aufzubauen. Es handelt sich vielmehr um dezentrale IT-Systeme die miteinander vernetzt werden.
... und Wasser ist naß.

Benutzeravatar
eC
Beiträge: 354
Registriert: 24.07.2002 13:34:13
Wohnort: karlsruhe

Beitrag von eC » 08.02.2005 13:36:01

EDIT: Mist war zu langsam ;)
Christian Stalp hat geschrieben:/usr/lib/j2sdk1.4-sun:/usr/share/java:/usr/sharetomcat4/common/lib gesetzt.
Dort liegen reichlich servlet.jar's, aber keine von denen erkennt er. Habe ich was ausgelassen?
Hi,
eine IDE ist nicht nötig aber praktisch ;)
Du kannst, so mache ich das, Deinen Classpath über die .bashrc erweitern.
Du musst aber darauf achten, dass Du jedes (!) einzelne .jar/.zip File explizit angibst.
Verzeichnisse nützen nichts.
BSP:

Code: Alles auswählen

CLASSPATH=.:/usr/local/j2ee/lib/j2ee.jar:/usr/local/classes/classes12.zip:/usr/local/classes/mm.mysql-2.0.13-bin.jar
Du kannst natürlich auch die Skript Idee weiter oben aufgreifen ;)

gruss
eC

Benutzeravatar
finupsen
Beiträge: 1327
Registriert: 21.04.2004 20:07:05
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Dortmund
Kontaktdaten:

Beitrag von finupsen » 08.02.2005 13:48:22

> Du kannst, so mache ich das, Deinen Classpath über die .bashrc erweitern.

Das geht, ist aber die denkbar schlechteste lösung.

Nochmal:
Zum compilieren den classpath mit der option -cp angeben (bzw. über die IDE)
Zum starten eines java-progis baut man sich ein startscript mit einer CLASSPATH-variable
mit einer überprüfung und ggfl. einer exit 1 meldung (jre not found o.ä.)

stell dir vor, $PATH liegt auf /usr/lib/jsdk-1.4/bin und $CLASSPATH auf /usr/lib/jsdk-1.5/....
was passiert ? ... bockmist ;)
... oder du möchtest dein javaprogi jemand anders geben, nix funktioniert
... oder du möchtest eine jar (main in manifest) per mausklick starten, geht nicht, da kde nix von CLASSPATH weiss.

also man kann das machen, perönlich würde ich aber davon abraten ...
(nur meine meinung)
Niemand hat vor eine zentrale Datensammelbehörde aufzubauen. Es handelt sich vielmehr um dezentrale IT-Systeme die miteinander vernetzt werden.
... und Wasser ist naß.

Benutzeravatar
Columbus
Beiträge: 1051
Registriert: 30.04.2002 15:25:02
Wohnort: Mainz
Kontaktdaten:

Beitrag von Columbus » 08.02.2005 14:41:45

Gut dann lag bei mir ein Missverständnis vor. Ich dachte der Compiler kann direkt auf die jar-Packete in /usr/share/java zugreifen. Denn dort liegen schon ein ganzer Haufen von Jar's, die ich nicht selbst dort hin kopiert habe, sondern das von mir mit java-package erstellte Debian-Packet.
Aber nur mal interessehalber: WO liegen die Bibliotheken, die ich nicht extra refferenzieren muß ? Also die ganz normalen java.io-Klassen usw.?

Gruss Christian

Benutzeravatar
finupsen
Beiträge: 1327
Registriert: 21.04.2004 20:07:05
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Dortmund
Kontaktdaten:

Beitrag von finupsen » 08.02.2005 16:15:02

hallo,

java.io ist IMHO in lib/rt.jar

aber ich bin irgendwie auf den geschmack gekommen und hab mir nun
auch mal den tomcat installiert ;)

... dabei habe ich auch gleich mal die gelegenheit genutz ein kleine tut zuschreiben:

hier isset: http://212.184.10.254/tomcat.txt

vielleicht hilfts dir (oder jemand anders) ein wenig...
Niemand hat vor eine zentrale Datensammelbehörde aufzubauen. Es handelt sich vielmehr um dezentrale IT-Systeme die miteinander vernetzt werden.
... und Wasser ist naß.

Benutzeravatar
Columbus
Beiträge: 1051
Registriert: 30.04.2002 15:25:02
Wohnort: Mainz
Kontaktdaten:

Beitrag von Columbus » 08.02.2005 17:07:45

Was ich noch herausgefunden habe ist, dass man weitere Jar-Bibliotheken einfach in das Verzeichnis .../jre/lib/ext reinkopiren kann, die dort dann ohne speziell refferenziert zu sein, eingelesen werden.

Wahrscheinlich ist das ein alter Hut, aber für mich ist das der Punkt warum ich dachte, die Jar-Bibliotheken die im Classpath abgelegt sind, werden ALLE automatisch erkannt und eingelesen.

Gruss Christian

Antworten