Vandahil Geschrieben 14. Mai 2009 Geschrieben 14. Mai 2009 Hi Leutz. Also, ich hab n kleines Problem, das auch googlen nicht lösen konnte. In meiner JSP-Datei möchte ich nun auch obj.-or. programmieren und dafür Klassen einbinden. Leider funktioniert das nicht so, wie ich es gerne hätte. Folgend erstmal die JSP-Datei. Über den Nutzen brauchen wir uns nicht streiten. <%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> <title>Marci.de | Startseite</title> </head> <body> <%@ page import = "Klassen.*" %> Willkommen auf meiner Seite <% Testing test = new Testing(); test.print(); %> </body> </html> Und um sie euch nicht vorzubehalten natürlich auch noch die ominöse Testing Klasse: package Klassen; public class Testing { public void print() { System.out.println("Es funktioniert"); } } Wie ihr merkt, ist Testing mehr als wörtlich zu nehmen. In der JSP-Datei hatte ich auch bei Import bereits Klassen.Testing versucht, jedoch gibt er mir folgende Exception: Only a type can be imported. Klassen.Testing resolves to a package Auch das Umwandeln der print()-Methode in eine static Mehtode mit folgenden Aufruf Testing.print(); hat nicht funktioniert. Ich danke euch, wenn ihr mir helfen könnt. Wenn nicht, dann trotzdem danke für eure Mühen. P.S.: System: Windows XP Prof. SP3 frisch aktualisierte Eclipse-version Tomcat 6.0.18 (nach meinen Einschätzungen richtig konfiguriert ) Zitieren
kingofbrain Geschrieben 14. Mai 2009 Geschrieben 14. Mai 2009 Also Script-Blöcke in einer JSP solltest Du auf jeden Fall vermeiden. Verwende hier besser im einfachsten Fall ein vorgeschaltetes Servlet und verweise aus diesem heraus auf Deine JSP. Das Servlet macht die Logik, die JSP zeigt die Ergebnisse an (Model2 Architektur). An Deinem Beispiel kann ich auf den ersten Blick nichts falsches erkennen. Was ist denn der Fehler? Wenn Du erwartest, dass Deine Klasse etwas in das Ergebnis schreibt, musst Du sie ändern, denn sie loggt nur in den Standardausgabestrom. Peter Zitieren
Vandahil Geschrieben 14. Mai 2009 Autor Geschrieben 14. Mai 2009 (bearbeitet) Danke für die schnelle Antwort. Hab die Methode eben umgestellt, wieder nur zu Testzwecken. Danke für den Tipp mit den Servlets, hatte schon daran gearbeitet. Der Fehler sieht wie folgt aus: HTTP Status 500 - type Exception report message description The server encountered an internal error () that prevented it from fulfilling this request. exception [B]org.apache.jasper.JasperException: Unable to compile class for JSP: [/B] An error occurred at line: 6 in the generated java file [B]Only a type can be imported. Klassen.Testing resolves to a package[/B] An error occurred at line: 14 in the jsp file: /start.jsp Testing cannot be resolved to a type 11: 12: Willkommen auf meiner Seite 13: <% 14: Testing test = new Testing(); 15: test.print(); 16: %> 17: </body> An error occurred at line: 14 in the jsp file: /start.jsp Testing cannot be resolved to a type 11: 12: Willkommen auf meiner Seite 13: <% 14: Testing test = new Testing(); 15: test.print(); 16: %> 17: </body> Stacktrace: org.apache.jasper.compiler.DefaultErrorHandler.javacError(DefaultErrorHandler.java:92) org.apache.jasper.compiler.ErrorDispatcher.javacError(ErrorDispatcher.java:330) org.apache.jasper.compiler.JDTCompiler.generateClass(JDTCompiler.java:423) org.apache.jasper.compiler.Compiler.compile(Compiler.java:317) org.apache.jasper.compiler.Compiler.compile(Compiler.java:295) org.apache.jasper.compiler.Compiler.compile(Compiler.java:282) org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:586) org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:317) org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:342) org.apache.jasper.servlet.JspServlet.service(JspServlet.java:267) javax.servlet.http.HttpServlet.service(HttpServlet.java:717) note The full stack trace of the root cause is available in the Apache Tomcat/6.0.18 logs. Hab's mal nicht gekürzt, vllt. überseh ich einfach was... habe die zeilen markiert, welchen ich besondere Beachtung geschenkt habe. btw: Methode printed nicht mehr, sondern returned einfach den String.. dann mach ich das über out.println(test.print()); Info: Die Klasse liegt im package Klassen, daher die markierte Zeile. Google meinte, mit import etc. kann das package direkt angesprochen werden, daher verwirrt mich die Exception. Wie gesagt, ist alles sehr spartanisch, weil ich erst nach der Lösung anfange den eigentlichen Code zu schreiben. Muss halt nur auf andere Klassen zugreifen können. Danke nochmal und ich hoffe, man kann mir helfen. Marcel Bearbeitet 14. Mai 2009 von Vandahil Zitieren
Vandahil Geschrieben 14. Mai 2009 Autor Geschrieben 14. Mai 2009 Ergänzung: Die vorliegende Fehlermeldung wird von Mozilla ausgespuckt. Wenn ich den Server und die index.jsp mit Eclipse starte, funktioniert das Script und liefert mir den return-wert. Jedoch scheint dies nicht für den Browser zu gelten. Zitieren
kingofbrain Geschrieben 14. Mai 2009 Geschrieben 14. Mai 2009 Hmm, so ganz schlüssig ist mir Deine Beschreibung nicht. Mozilla gibt Dir diesen Fehler zwar zurück, aber auftreten tut er in Deinem Servlet Container. Welchen verwendest Du denn hier (der Stacktrace sieht nach Tomcat aus)? Kann es sein, dass Du neben der Klasse "Testing" auch ein Package "Testing" hast? Ist zwar sehr unwahrscheinlich, aber so hört es sich für mich in der Fehlermeldung an. Du sagst, in Eclipse klappt es? Wie meinst Du das? Du startest die Servlet Engine aus Eclipse heraus und öffnest die Seite über den integrierten Browser? Zeig doch mal bitte die komplette JSP und die komplette Java-Datei, die der Tomcat erzeugt (liegt im work-Verzeichnis, musst ein bisschen suchen). Peter Zitieren
Vandahil Geschrieben 14. Mai 2009 Autor Geschrieben 14. Mai 2009 (bearbeitet) Ok, versuche das nochmal schlüssig zu erklären: Benutze wie gesagt Tomcat 6.0.18 Wenn ich den tomcat "normal" mit der startup.bat starte, spreche ich die Seite in Mozilla über localhost:8080/Marci/ an und komme dort auf die index.jsp Diese spuckt mir sofort die obige Exception aus. Die Exception wird im dortigen iframe angezeigt, in der die start.jsp aufgerufen wird. Also wird der fehler nicht von der index.jsp verursacht, falls der gedanke aufkommen sollte. ^^ Wenn ich den Tomcat nicht mit der bat starte, sondern stattdessen die index.jsp über den Compilieren-Knopf von Eclipse starte, zeigt mir der interne Browser die Seite richtig an und printed mir auch den return-Wert der Funktion. Eine Testing-package existiert nicht. Weiß nicht, ob ich noch was ergänzen soll, wenn noch was fehlt dann frag ruhig. =) Folgende Dateien liegen in \work\Catalina\localhost\Marci\org\apache\jsp\ body_jsp.java index_jsp.java start_jsp.java body_jsp.class index_jsp.class Wie mir auffällt, fehlt die start_jsp.class. Dies ist auch die JSP-Datei, welche den Fehler verursacht. Vermutlich ist dies auch auf den Fehler zurückzuführen. Inhalt der start_jsp.java (Die restlichen jsp's funktionieren ja.. kann ich bei Bedarf auch posten) package org.apache.jsp; import javax.servlet.*; import javax.servlet.http.*; import javax.servlet.jsp.*; public final class start_jsp extends org.apache.jasper.runtime.HttpJspBase implements org.apache.jasper.runtime.JspSourceDependent { private static final JspFactory _jspxFactory = JspFactory.getDefaultFactory(); private static java.util.List _jspx_dependants; private javax.el.ExpressionFactory _el_expressionfactory; private org.apache.AnnotationProcessor _jsp_annotationprocessor; public Object getDependants() { return _jspx_dependants; } public void _jspInit() { _el_expressionfactory = _jspxFactory.getJspApplicationContext(getServletConfig().getServletContext()).getExpressionFactory(); _jsp_annotationprocessor = (org.apache.AnnotationProcessor) getServletConfig().getServletContext().getAttribute(org.apache.AnnotationProcessor.class.getName()); } public void _jspDestroy() { } public void _jspService(HttpServletRequest request, HttpServletResponse response) throws java.io.IOException, ServletException { PageContext pageContext = null; HttpSession session = null; ServletContext application = null; ServletConfig config = null; JspWriter out = null; Object page = this; JspWriter _jspx_out = null; PageContext _jspx_page_context = null; try { response.setContentType("text/html; charset=ISO-8859-1"); pageContext = _jspxFactory.getPageContext(this, request, response, null, true, 8192, true); _jspx_page_context = pageContext; application = pageContext.getServletContext(); config = pageContext.getServletConfig(); session = pageContext.getSession(); out = pageContext.getOut(); _jspx_out = out; out.write("\r\n"); out.write("<!DOCTYPE html PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\r\n"); out.write("<html>\r\n"); out.write("<head>\r\n"); out.write("<meta http-equiv=\"Content-Type\" content=\"text/html; charset=ISO-8859-1\">\r\n"); out.write("<title>Marci.de | Startseite</title>\r\n"); out.write("</head>\r\n"); out.write("<body>\r\n"); out.write("\r\n"); out.write("Willkommen auf meiner Seite\r\n"); Klassen.Testing test = new Klassen.Testing(); out.println(test.print()); out.write("\r\n"); out.write("</body>\r\n"); out.write("</html>"); } catch (Throwable t) { if (!(t instanceof SkipPageException)){ out = _jspx_out; if (out != null && out.getBufferSize() != 0) try { out.clearBuffer(); } catch (java.io.IOException e) {} if (_jspx_page_context != null) _jspx_page_context.handlePageException(t); } } finally { _jspxFactory.releasePageContext(_jspx_page_context); } } } Hoffe, das ist das, was du meintest. Danke für deine Hilfe. Bearbeitet 14. Mai 2009 von Vandahil Zitieren
kingofbrain Geschrieben 14. Mai 2009 Geschrieben 14. Mai 2009 So, ich habe das jetzt selbst mal ausprobiert. Bei mir funktioniert es. Allerdings fühle ich mich jetzt nach der Codierung von Skriptcode in der JSP ziemlich schmutzig und möchte gerne duschen. Wie deployst Du denn Deine Anwendung? Hast Du ein WAR und steckt in diesem WAR auch Deine kompilierte Klasse "Testing" im korrekten Package? Der Aufbau sollte so sein: WAR start.jsp WEB-INF classes Klassen Testing.class Und das es keine start.class gibt ist klar, weil er ja beim Compile rumzickt. Die von dir gepostete Klasse sieht übrigens nicht nach der aus, die er anmeckert, weil dort die Zeile 6 leer ist. Laut Stacktrace soll hier aber der Fehler stecken. Peter Zitieren
Vandahil Geschrieben 14. Mai 2009 Autor Geschrieben 14. Mai 2009 So, bei mir funktioniert es jetzt auch. Manchmal sieht man den Wald vor lauter Bäumen nicht... Hab auch als *.war deployed and it works... Vorher hab ich's über die Pfadangabe in Server.xml versucht... wie man sieht ohne Erfolg ^^' Danke dir aber auf jeden für deine Hilfe. Kriegst n Knutscher Grüße, Marcel PS: Sorry, dass du wegen mir duschen musstest ;D Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.