# web apllication tomcat - servlet kompilieren?



## klammer (15. September 2005)

für eine webapplication am tomcat soll ich ein servlet .java kompilieren. leider weiss ich nicht wie. kompiliert man am tomcat? wo und wie? bitte um hilfe!

der code von login.java ist:

package com.onjava;

import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;
import java.util.*;

public class login extends HttpServlet {

 private String target = "/welcome.jsp";

 private String getUser(String username, String password) {

// Just return a static name
  // If this was reality, we would perform a SQL lookup
  return "Bob";
 }

 public void init(ServletConfig config)
  throws ServletException {

  super.init(config);
 }

 public void doGet(HttpServletRequest request,
  HttpServletResponse response)
  throws ServletException, IOException {

  // If it is a get request forward to doPost()
  doPost(request, response);
 }

 public void doPost(HttpServletRequest request,
  HttpServletResponse response)
  throws ServletException, IOException {

  // Get the username from the request
  String username = request.getParameter("username");
  // Get the password from the request
  String password = request.getParameter("password");

  String user = getUser(username, password);

  // Add the fake user to the request
  request.setAttribute("USER", user);

  // Forward the request to the target named
  ServletContext context = getServletContext();

  RequestDispatcher dispatcher =
   context.getRequestDispatcher(target);
  dispatcher.forward(request, response);
 }

 public void destroy() {
 }
}


----------



## RMI_17 (15. September 2005)

hast du das Zeugs in Eclipse erstellt?


----------



## klammer (15. September 2005)

nein, das ist aus dem tutorial dass ich mache


----------



## RMI_17 (15. September 2005)

Achso, du hast den Code nur herauskopiert?


----------



## klammer (15. September 2005)

ja - ich konnte bisher alle schritte im tutorial nachvollziehen.

der nächste wäre eben:

To deploy a servlet as part of a web application you first need to compile the servlet and move it into the web application's /WEB-INF/classes directory. For this example, you should compile this servlet and move it to the /onjava/WEB-INF/classes/com/onjava/ directory.

(danach ist der code von oben angeben login.java)

leider weiß ich nicht wie ich diesen punkt umsetzen soll, kannst du mir helfen?

tomcat version jakarte 4.1.30


----------



## RMI_17 (15. September 2005)

Ja das kann ich.

Jedoch ist das ist ohne Eclipse sehr umständlich da du zum compilieren eine Datei namens servlet.jar benötigst die mit Tomcat mitgeliefert wird. Dann musst du verschiedene Einträge in einer xml Datei machen. Verzeichnisse erstellen. usw......

Weißt du was.

Ich mach die heute Abend eine Doku und poste sie dir morgen gleich.

Mfg Rmi


----------



## klammer (15. September 2005)

ersteinmal danke fuer deine hilfe, nur leider bräuchte ich das ganze ziemlich dringend, weil ich das tutorial jetzt abschliessen müsste. ich hätte eclipse installiert. meinst du ich kann es damit selbst schaffen, wenn du mir sagst wie?


----------



## klammer (15. September 2005)

falls es hilft es handelt sich um dieses tutorial http://www.onjava.com/lpt/a/780


habe jetzt das gesamte tutorial zuende gelesen und dabei gesehen dass ich auch noch einen tag-handler (HelloTag.java) kompilieren müsste

vielen vielen dank für hilfe



----

package com.onjava;

import javax.servlet.jsp.JspException;
import javax.servlet.jsp.JspTagException;
import javax.servlet.jsp.tagext.TagSupport;

public class HelloTag extends TagSupport
{
 public void HelloTag() {

 }

 // Method called when the closing hello tag is encountered
 public int doEndTag() throws JspException {

  try {

   // We use the pageContext to get a Writer
   // We then print the text string Hello
   pageContext.getOut().print("Hello");
  }
  catch (Exception e) {

   throw new JspTagException(e.getMessage());
  }
  // We want to return SKIP_BODY because this Tag does not support
  // a Tag Body
  return SKIP_BODY;
 }

 public void release() {

  // Call the parent's release to release any resources
  // used by the parent tag.
  // This is just good practice for when you start creating
  // hierarchies of tags.
  super.release();
 }
}


----------



## RMI_17 (15. September 2005)

Tja....

du bräuchtest Eclipse 3.0 mit dem Sysdeo Plugin!

Hast du das?


----------



## RMI_17 (15. September 2005)

Hier ist mal ne beschreibung von mir.

Sie ist zwar noch leicht lückenhaft aber ich werde sie noch bearbeiten!

Warum musst du unbedingt heute fertig werden?

ICh habe das Sysdeo Plugin installierfertig auf meinem PC. Wenn du nen FTP-Server oder so hast kann ich dir das da raufladen!

Obwohl: Es hat nur 300 kb also könnte ich es dir auch als Mail schicken!

mFg Rmi


----------



## RMI_17 (15. September 2005)

Tja....

Sorry, kann dir erst ab Morgen wieder helfen! Ich muss jetzt leider weg!

Viel Glück


----------



## klammer (15. September 2005)

ich hab das sysdeo installiert

wenn du mir erst morgen helfen kannst, muss ich halt warten. die eile kommt weil ich ohne dem mit meinem projekt nicht viel weiterkomme

aber trotzdem danke und ich hoffe ich bekomme das morgen hin!


----------



## klammer (16. September 2005)

ich habe mir deine anleitung angesehen, weiß aber noch immer nicht, was ich genau tun muss
installiert habe ich alles. ich müsste wie gesagt nur das file kompilieren. leider weiß ich nicht wo man in eclipse den befehl dazu eingibt?
zuerst muss ich eine neue klasse erstellen und dort den code reinpasten oder?


----------



## RMI_17 (16. September 2005)

Nö!

Du erstellst in Eclipse ein neues Tomcat Projekt. File -- New -- Other -- Java -- Tomcat Projekt.

Nun erstellt Eclipse die richtige ordnerstruktur von selbst. Nun kannst du einen neue Klasse erstellen damit du siehest in welches Verzeichniss du deine KLasse hineinkopieren musst.

Dann kannst du den Code hineinkopieren oder die Klasse importieren.

Wenn du auf Speichern klickst kompiliert Eclipse ein Servlet von selbst und erstellt alle notwendigen einträge in den xml-Dateien.

Weitere Tipps kommen noch.

Bin ab 12:00 nicht mehr hier. Heute repariere ich meinen Internetzugang zuhause und melde mich spätestens am Abend!

Mfg Rmi


----------



## RMI_17 (16. September 2005)

Ok...

Nachdem du auf neues Tomcat Projekt geklickt hast musst du einen namen für dein Projekt eingeben. Dann auf next klicken... 

Dann gibst du bei der Anwendungs URI ein /dein Projektname
du kannst das Servlet dann später unter http://localhost:8080/dein Projektname aufrufen
Es gibt noch ein Textfeld irgendwas mit Unterverzeichnisse LASS DORT ALLES SO WIE ES IST!!

Nun müsst dein Tomcat Projekt angelegt werden..


----------



## klammer (16. September 2005)

ok. ich bin scheinbar zu dumm um eclipse zu verwenden. ich habe ein neues tomcat projekt angelegt (File -- New -- Other -- Java -- Tomcat Projekt) namens login 
jetzt sollte ich die neue klasse anlegen namens login.java 
wenn ich aber auf file -- new --class gehe und dort nur den namen login eingebe, reicht das nicht aus... was muss ich noch machen?


----------



## RMI_17 (16. September 2005)

Probiers so


Rechtklick auf das soeben erstellte Tomcat Projekt und dann New --  Class


----------



## klammer (16. September 2005)

klasse ist angelegt, problem ist noch das kompilieren - wo gibt man den befehl ein? javac... etc wenn ich auf run gehe wird zwar kompiliert bekomme aber auch die fehlermeldung

The declared package does not match the expected package 	login.java	login/WEB-INF/src
mit bezug auf die zeile 1 "package com.onjava;"

kurz vorm verzweifeln...


----------



## RMI_17 (16. September 2005)

Da musst du nur mal auf Speichern klicken!! Dann sollte Eclipse automatisch alle unkompilierten Klassen neu kompilieren.


MFG Rmi


----------



## klammer (17. September 2005)

ich hab zwar jetzt irgendwie (ob richtig weiss ich nicht) das java file kompiliert und die klasse sowie java file in das vorhergesehene file am tomcat abgespeichert, aber ich bekomme am tomcat dennoch eine fehlermeldung... brauch ich irgendeine bean oder so? (bin ein anfänger)

alles was ich gemacht habe ist das:


1.	Tomcat Ordnerstruktur erstellen:

<TOMCAT_HOME>/webapps/onjava
=====> images (directory)
=====> WEB_INF
==========> classes
==========> lib

2.	web.xml erstellen in <TOMCAT_HOME>/webapps/onjava/WEB_INF

<?xml version="1.0" encoding="ISO-8859-1"?>

<!DOCTYPE web-app
PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/j2ee/dtds/web-app_2_3.dtd">

<web-app>
</web-app>

3.	ServletContext hinzufügen in <TOMCAT_HOME>/conf/server.xml

<Context path="/onjava" docBase="onjava" debug="0" reloadable="true" />

4.	login.jsp erstellen in <TOMCAT_HOME>/webapps/onjava/

<html>
<head>
 <title>OnJava Demo</title>
 <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>

<body bgcolor="#FFFFFF" onLoad="document.loginForm.username.focus()">

 <table width="500" border="0" cellspacing="0" cellpadding="0">
  <tr>
   <td> </td>
  </tr>
  <tr>
  <td>
   </td>
  </tr>
  <tr>
   <td> </td>
  </tr>
 </table>
 <table width="500" border="0" cellspacing="0" cellpadding="0">
  <tr>
   <td>
    <table width="500" border="0" cellspacing="0" cellpadding="0">
     <form name="loginForm" method="post" action="servlet/com.onjava.login">
     <tr>
      <td width="401"><div align="right">User Name: </div></td>
      <td width="399"><input type="text" name="username"></td>
     </tr>
     <tr>
      <td width="401"><div align="right">Password: </div></td>
      <td width="399"><input type="password" name="password"></td>
     </tr>
     <tr>
      <td width="401"> </td>
      <td width="399"><br><input type="Submit" name="Submit"></td>
     </tr>
     </form>
    </table>
   </td>
  </tr>
 </table>
</body>
</html>

5.	Testen der JSP (Tomcat starten)

http://localhost:8080/onjava/login.jsp




6.	welcome.jsp login.jsp erstellen in <TOMCAT_HOME>/webapps/onjava/

<html>
<head>
 <title>OnJava Demo</title>
 <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>

 <table width="500" border="0" cellspacing="0" cellpadding="0">
  <tr>
   <td> </td>
  </tr>
  <tr>
  <td>
   <img src="/onjava/images/monitor2.gif"></td>
  <td>
   <b>Welcome : <%= request.getAttribute("USER")
%></b>
  </td>
  </tr>
  <tr>
   <td> </td>
  </tr>
 </table>
</body>
</html>

7.	kompilieren von login.java

package com.onjava;

import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;
import java.util.*;

public class login extends HttpServlet {

 private String target = "/welcome.jsp";

 private String getUser(String username, String password) {

// Just return a static name
  // If this was reality, we would perform a SQL lookup
  return "Bob";
 }

 public void init(ServletConfig config)
  throws ServletException {

  super.init(config);
 }

 public void doGet(HttpServletRequest request,
  HttpServletResponse response)
  throws ServletException, IOException {

  // If it is a get request forward to doPost()
  doPost(request, response);
 }

 public void doPost(HttpServletRequest request,
  HttpServletResponse response)
  throws ServletException, IOException {

  // Get the username from the request
  String username = request.getParameter("username");
  // Get the password from the request
  String password = request.getParameter("password");

  String user = getUser(username, password);

  // Add the fake user to the request
  request.setAttribute("USER", user);

  // Forward the request to the target named
  ServletContext context = getServletContext();

  RequestDispatcher dispatcher =
   context.getRequestDispatcher(target);
  dispatcher.forward(request, response);
 }

 public void destroy() {
 }
}
8.	login.java und login.class speichern in <TOMCAT_HOME>/webapps/onjava/WEB_INF/classes/com/onjava

9.	Servlet Eintrag im web.xml hinzufügen (<TOMCAT_HOME>/webapps/onjava/WEB_INF)

<servlet>
<servlet-name>login</servlet-name>
<servlet-class>com.onjava.login</servlet-class>
</servlet>

<servlet-mapping>
<servlet-name>login</servlet-name>
<url-pattern>/servlet/*</url-pattern> 
</servlet-mapping>

10.	Invoker nicht kommentieren in <TOMCAT_HOME>/conf/web.xml

(2 Stellen)

11.	Testen der login.jsp und welcome.jsp (Tomcat neu starten)

http://localhost:8080/onjava/login.jsp


Fehlermeldung 404

resource: onjava/servlet/login ist not available


ich hoffe du kannst mir helfen


----------



## RMI_17 (17. September 2005)

Hallo

Das was du da unter login.jsp erstellt hast solltest du mal unter login.html abspeichern.

Hier sind noch n paar Links.


Openbook http://www.galileocomputing.de/openbook/javainsel4/


Alles über Servlets und Jsp Tomcat und Eclipse

http://www.galileocomputing.de/openbook/javainsel4/javainsel_17_000.htm#Xxx999380

Übrigens musst du jsp nicht unbedingt beherrschen um Servlets programmieren zu können also würde ich dir empfehlen dieses Kapitel zu überspringen!

MFG Rmi


----------



## RMI_17 (17. September 2005)

Wenn du den Invoker freigeschalten hast dann probier dein Servlet so zu starten

<html>

<head>
<Title>Testpage</Title>
</head>

<body>

<a href = servlet/login.class>Servlet starten</a>

</body>

</html>


----------



## klammer (17. September 2005)

hi!

mir ist nicht ganz klar warum ich die login.jsp auch als login.html abspeichern soll, denn die login.jsp wird mir ja auch angezeigt - erst wenn ich dort passwort und username eingebe komme ich zu der seite mit der fehlermeldung 

habe invoker freigeschalten

habe auch den test mit der login.html seite zum starten des servlet gemacht aber auch wenn ich hier auf servlet starten gehe bekomme ich die gleiche fehlermeldung  

kann es sein dass ich beim kompilieren mist gebaut habe?


----------



## RMI_17 (18. September 2005)

Nö denke ich nicht!

UNowWhat Ich kann dir ja mal ne fertige anwendung schreiben und dann schicke ich dir den Ordner per Mail mit meiner Tomcat-Server-config. Dann kannst du das Zeug testen und dir ansehen wie das funktioniert!!

Musst mir nur deine Mail-Adresse schicken (am besten per mail an meinen Nick, posten währe ja nicht so gut), dann kann ich dir das Zeugs morgen schicken!

Die ganze komplizierte Fehlersuche nervt langsam ;-)

MFG Rmi


----------



## klammer (18. September 2005)

eines fällt mir noch ein - ich find in meinem tomcat 4.1.30 keine context.xml - jem. hat gemeint die müsste man einbinden - hilft das weiter?

hab dir eine pm geschickt


----------



## RMI_17 (19. September 2005)

Nö der meinte sicher dass du den Context in der config.xml eintragen musst. jedoch wenn der Invoker freigeschalten ist ist das nicht mehr nötig.


----------



## RMI_17 (19. September 2005)

Hallo

Ich kann dir leider nicht mehr helfen weil mein Laptop nicht richtig eingerichtet ist. Ich müsste alles neu installieren.

ABER:

Wenn du alles (damit meine ich auch den Quelltext) aus meiner Beschreibung nimmst MUSS es einfach funktionieren.

Wichtig: Die Dateien müssen auch richtig benannt werden!!

Mfg Rmi


----------



## klammer (19. September 2005)

dann werd ich einmal mein glück mit deiner anwendung versuchen - hab gestern noch versucht ein jsf bsp mit eclipse und tomcat zu testen (ein ganz anderes) und ich bekam genau die gleiche fehlermeldung...


----------



## klammer (19. September 2005)

so hab dein bsp getestet

dazu drei anmerkkungen/fragen:

1. wenn ich FirstServlet.java in eclipse erstelle (sprich deinen code hineinpaste) erhalte ich schon in eclipse fehlermeldungen (9errors)
2. muss ich  den eintrag context path um variablen ergänzen oder einfach direkt wie in deiner anleitung pasten (sprich der ist schon vorhanden in meiner server.xml)
3. beide invoker freischalten (oder nur den von dir angegebenen)

bitte bitte erbarme dich meiner hoffnungslosigkeit


----------



## RMI_17 (19. September 2005)

Also

Die Fehlermeldungen in Eclipse erkläre ich mir so:

Die servlet.jar ist nicht zum *Tomcat* Projekt hinzugefügt.

Wenn der Eintrag in der server.xml schon genauso vorhanden ist dann musst du ihn natürlich nicht nochmal hineinpasten.+

Invoker müssen beide freigeschalten werden (Habe ich da n Fehler in der Doku?)

Mfg RMi


----------



## klammer (19. September 2005)

servlet jar hab ich in eclipse zugewiesen


----------



## klammer (19. September 2005)

es funkt. hatte einen tippfehler (...)

dann werd ich mich jetzt wohl auf fehlersuche bei meinem login bsp begeben müssen


----------



## RMI_17 (19. September 2005)

Puhhhh

Endlich geschafft ;-)))))

Falls du nochmal hilfe brauchst komm nicht zu mir

NEEE

Kannst mich natürlich gerne wieder was fragen, bin zwar kein Profi aber ich hoffe ich konnte dir helfen.

MFG Rmi


----------



## klammer (19. September 2005)

jetzt trau ich mich aber gar nicht mehr fragen 

vielen dank nochmal für deine hilfe!

und ich hätt natürlich noch eine frage wenn seins darf: wenn ich mein gepostetes login.java in eclipse öffne bekomme ich eine fehlermeldung:
"The declared package does not match the expected package - 	login.java	login/WEB-INF/src line1"
kann ich das beim kompilieren ignorieren?
oder soll ich die verzeichnisstruktur vom tomcat webapps bsp hier im eclipse "nachbauen"


----------



## RMI_17 (19. September 2005)

Lösch doch einfach die Package declaration und schau was dann passiert.

Entweder brauchst du die gar nicht und falls doch schlägt er dir die richte Version vor.

Tipp: Wenn du auf das gelbe bzw. bei Fehlern im Code rote Symbol klickst kommen Vorschläge und Fehlermeldungen.

Vielleicht wusstest dus schon aber ich poste es trotzdem nochmal.


----------



## klammer (20. September 2005)

vielen vielen dank

danke auf für die tipps in eclipse - ich bin ein blutiger anfaenger ;-)

endlich funkt auch meine eigene appliaktion

ich habe gelesen es empfiehlt sich ein war. file am ende zu erstellen. hast du für mich tipps wie ich das am einfachsten lösen kann


----------



## RMI_17 (20. September 2005)

Nein tut mir leid!

Habe sowas selbst nur mal zum Test gemacht, kenn mich da nicht aus. Es ist auch nicht notwendig.

Ich würde dir raten die eine Doku zu schreiben weil wenn du nicht oft damit zu tun hast vergisst du das Zeug in 2 Wochen schon wieder.

So gings mir jedenfalls.

Mfg Rmi


----------



## klammer (20. September 2005)

doku hab ich bereits geschrieben, ich vergess das alles noch vor 2 wochen ;-)


----------



## klammer (20. September 2005)

hast du vielleicht auch schon mit jdbc realm zu tun gehabt - das ist der eigentliche grund warum ich mir das antue ;-)

ich habe bereits eine sql datenbank angelegt und user und passwörter eingegeben
jdbc realm code habe ich in server.xml hinzugefügt
und den sql driver in lib entzippt

der letzte schritt lt. anleitung wäre: 
Make sure that the JAR file containing the JDBC driver referenced by the driverName attribute is placed in Tomcat's CLASSPATH.

leider ist das f´ür mich chinesisch


----------



## klammer (23. September 2005)

ganze login logout funkt jetzt einwandfrei


----------



## RMI_17 (26. September 2005)

Sorry das ich erst jetzt schreibe aber

1. War ich schon lang nicht mehr auf der Page
2. Hab ich aus irgendeinem Grund keine E-Mail bekommen (von wegen neue Antwort und so)

Also,... Ich bin wohl schon zu spät wie? Funktioniert eh alles schon.

Du solltest mal nachsehen wie man Servlets richtig einbindet.

Das mit dem Invoker ist ein Sicherheitsrisiko hab ich mir sagen lassen!
Das hab ich dir alles nur geschrieben weil dus eilig hattest. Richtig einbinden ohne den Invoker kann ichs auch nicht da ich sehr wenig mit Tomcat und Servlets arbeite, währe nett wenn du mir mal ne beschreibung per Mail schicken würdest.

Mfg Rmi


----------



## klammer (27. September 2005)

hi ja einstweilen funkt alles so weit

ich empfehle dir die beiden tutorial von onjava

erstellung der webapp: http://www.onjava.com/pub/a/onjava/2001/04/19/tomcat.html
ergänzen des jdbc realm: http://www.onjava.com/pub/a/onjava/2001/07/24/tomcat.html?page=2

falls du irgendwo fragen haben solltest, kannst du mir ja gerne posten ;-)

kennst du dich eigentlich mit javaServer Faces aus? ich wollte gerade ein bsp umsetzen, aber eclipse zeigt mir beim java code wiedermal eine fehlermeldung an


----------



## RMI_17 (27. September 2005)

Nein kenn mich leider nicht aus!


----------

