[JSP] Webproject werkt wel in Netbeans, niet onder Tomcat

Pagina: 1
Acties:

  • MatthiasDS
  • Registratie: December 2005
  • Laatst online: 26-03 11:11
Hallo iedereen.

Ik heb een vrij lastig probleempje. Ik heb een webprojectje ontwikkeld in netbeans, en de bedoeling is dat het in een tomcat webapps directory zal gedropt worden om zo zonder IDE te runnen.

Nu, netbeans maakt een .war file aan, als ik die drop in de webapps dir krijg ik een NullPointerException als ik ze probeer te runnen, en hetzelfde geldt voor als ik de .war gewoon uitpak in een directory in de webapps dir.

Het lijkt me aan de databasetoegang te liggen, want als ik pagina's niet include die databasetoegang vereisen kan ik m'n projectje wel bekijken (met heel beperkte functionaliteit uiteraard), maar ik zou absoluut niet weten hoe het komt dat het dan wel werkt in netbeans en niet in tomcat.

De database staat geregistreerd in windows -> ODBC gegevensbronnen.

De code voor toegang te krijgen tot de databank is de volgende:

public void openDB(){
try{
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
con = DriverManager.getConnection("jdbc:odbc:blogbase", "", "");
}
catch(Exception e){
e.printStackTrace();
}
}


De error die ik krijg is de volgende:

HTTP Status 500 -

type Exception report

message

description The server encountered an internal error () that prevented it from fulfilling this request.

exception

org.apache.jasper.JasperException
org.apache.jasper.servlet.JspServletWrapper.servic e(JspServletWrapper.java:370)
org.apache.jasper.servlet.JspServlet.serviceJspFil e(JspServlet.java:314)
org.apache.jasper.servlet.JspServlet.service(JspSe rvlet.java:264)
javax.servlet.http.HttpServlet.service(HttpServlet .java:802)

root cause

java.lang.NullPointerException
org.apache.jsp.index_jsp._jspService(org.apache.js p.index_jsp:306)
org.apache.jasper.runtime.HttpJspBase.service(Http JspBase.java:97)
javax.servlet.http.HttpServlet.service(HttpServlet .java:802)
org.apache.jasper.servlet.JspServletWrapper.servic e(JspServletWrapper.java:322)
org.apache.jasper.servlet.JspServlet.serviceJspFil e(JspServlet.java:314)
org.apache.jasper.servlet.JspServlet.service(JspSe rvlet.java:264)
javax.servlet.http.HttpServlet.service(HttpServlet .java:802)


Wie kan me hiermee helpen? Alleszins bedankt voor de hulp en mijn excuses indien deze post op 1 of andere manier niet volgens de regels zou zijn, ik ben nieuw hier en heb de stickies wel gelezen, maar kan wel nog een foutje gemaakt hebben.

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 21-04 10:43

Janoz

Moderator Devschuur®

!litemod

Wat staat er op regel 306 van index.jsp? Roep je daar voor het eerst je driver aan? Ik heb namelijk het idee dat je je JDBC driver niet in de libs van je server hebt staan en dat je applicatie deze daarom niet kan vinden.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


  • bodiam
  • Registratie: December 2001
  • Laatst online: 31-12-2024
Wellicht dat je wat logging (of desnoods System.out's) in je JSP wilt gooien, om te kijken tot hoever de code komt in de JSP pagina. Wat je ook kunt doen is de Java file waarin die NullPointer expection zit openen in een editor. Wanneer een JSP wordt aangeroepen, wordt deze eerst omgezet in een Java file, waarna deze wordt gecompileerd. Als je de omgezette JSP ergens kunt vinden (zeer waarschijnlijk in de tomcat/work/Catalina/localhost directory, ergens in je program files?), ga dan eens naar die regel 306, en kijk wat daar staat.

Verwijderd

Janoz schreef op dinsdag 20 december 2005 @ 09:29:
Wat staat er op regel 306 van index.jsp? Roep je daar voor het eerst je driver aan? Ik heb namelijk het idee dat je je JDBC driver niet in de libs van je server hebt staan en dat je applicatie deze daarom niet kan vinden.
Klinkt aannemelijk maar ik kan me ergens niet voorstellen dat het resulteert in een NullPointerException. Ik zou dat een ClassNotFoundException verwachten. Maar het antwoord staat inderdaad op regel 306...

  • bigbeng
  • Registratie: Augustus 2000
  • Laatst online: 26-11-2021
Verwijderd schreef op dinsdag 20 december 2005 @ 09:54:
[...]

Klinkt aannemelijk maar ik kan me ergens niet voorstellen dat het resulteert in een NullPointerException. Ik zou dat een ClassNotFoundException verwachten. Maar het antwoord staat inderdaad op regel 306...
Ware het niet dat die middels de try/catch wordt afgevangen. Er wordt zo te zien niets met een exception gedaan die optreedt bij het aanmaken van een connection, behalve een print van de stacktrace die waarschijnlijk ergens in een logfile terechtkomt.

  • MatthiasDS
  • Registratie: December 2005
  • Laatst online: 26-03 11:11
Ik ben even gaan kijken naar de bewuste code. Ik wist trouwens niet dat er een index.java file verscheen ergens diep in de tomcat directory, bedankt voor de tip.

Dit is het blok waarin lijn 306 zit:

ArrayList artikelLijst = dbc.getArtikelLijst();
Iterator it = artikelLijst.iterator();
int i = 0;
while(it.hasNext() && i < 5){
Artikel a = (Artikel) it.next();
int aid = a.getArtikelID();
i++;

En lijn 306 is dan: int i = 0;

Ik kan er weinig fout aan vinden... Ik vermoed dat het toch bij dbc.getArtikelLijst() ligt, en het dus de connectie met de database is.


Logging via System.out lijkt me wel iets, maar als ik dat start via tomcat (5.5.14 denkik, de laatste nieuwe), waar verschijnen die berichten dan?

  • MatthiasDS
  • Registratie: December 2005
  • Laatst online: 26-03 11:11
Janoz schreef op dinsdag 20 december 2005 @ 09:29:
Ik heb namelijk het idee dat je je JDBC driver niet in de libs van je server hebt staan en dat je applicatie deze daarom niet kan vinden.
Je praat tegen een webapps newbie ;)

Welk bestand moet ik waar zetten?

Verwijderd

bigbeng schreef op dinsdag 20 december 2005 @ 11:26:
Ware het niet dat die middels de try/catch wordt afgevangen. Er wordt zo te zien niets met een exception gedaan die optreedt bij het aanmaken van een connection, behalve een print van de stacktrace die waarschijnlijk ergens in een logfile terechtkomt.
Ja je hebt gelijk, ik had de code niet bekeken, dan moet het maar tussen de juiste tags staan. Normaliter ga je natuurlijk ClassNotFoundExceptions niet inslikken of enkel loggen, dan moet domweg je applicatie eruit knallen.

Verwijderd

waarschijnlijk declareer je i meer dan 1 keer, je kan instellen of tomcat dit soort dingen negeert of een exceptie throwt.

  • bigbeng
  • Registratie: Augustus 2000
  • Laatst online: 26-11-2021
MatthiasDS schreef op dinsdag 20 december 2005 @ 11:55:
<knip>

Logging via System.out lijkt me wel iets, maar als ik dat start via tomcat (5.5.14 denkik, de laatste nieuwe), waar verschijnen die berichten dan?
In principe zou hij in het opstartscherm van tomcat en/of in de logfile van tomcat (onder logs/localhost<datum>.log moeten loggen.

Werk je toevallig met een access database?
Verwijderd schreef op dinsdag 20 december 2005 @ 11:58:
waarschijnlijk declareer je i meer dan 1 keer, je kan instellen of tomcat dit soort dingen negeert of een exceptie throwt.
Uh, nullpointer exception op een primitive type? Wat jij beschrijft zou een compilatie fout moeten geven.

Verwijderd

bigbeng schreef op dinsdag 20 december 2005 @ 12:07:
Uh, nullpointer exception op een primitive type?
Het kan tegenwoordig (java 5) wel ;)
Java:
1
2
Integer integer = null;
int i = integer;

[ Voor 10% gewijzigd door Verwijderd op 20-12-2005 12:10 ]


  • MatthiasDS
  • Registratie: December 2005
  • Laatst online: 26-03 11:11
bigbeng schreef op dinsdag 20 december 2005 @ 12:07:

Werk je toevallig met een access database?
Jazeker, en ik heb al van nog mensen gehoord dat ze hetzelfde probleem kregen.

Ik zal eens dat logging proberen, en dan iets laten weten.

  • bigbeng
  • Registratie: Augustus 2000
  • Laatst online: 26-11-2021
Staan je padverwijzingen naar die Access database wel goed?
Verwijderd schreef op dinsdag 20 december 2005 @ 12:10:
[...]
Het kan tegenwoordig (java 5) wel ;)
Java:
1
2
Integer integer = null;
int i = integer;
Woeps... ik moet toch eens dieper in die verschillen tussen 1.4 en 1.5 gaan duiken :)

[ Voor 75% gewijzigd door bigbeng op 20-12-2005 12:16 ]


  • MatthiasDS
  • Registratie: December 2005
  • Laatst online: 26-03 11:11
bigbeng schreef op dinsdag 20 december 2005 @ 12:14:
Staan je padverwijzingen naar die Access database wel goed?
De database staat geregistreerd in Windows (ODBC Data Sources), ik verwijs naar de naam waaronder die geregistreerd staat, en in Netbeans werkt dat alleszins perfect. Moet ik nog iets meer doen om m'n app standalone in tomcat te draaien?

Verwijderd

zou je het blok voor dit blok kunnen geven en dit blok ook?

  • MatthiasDS
  • Registratie: December 2005
  • Laatst online: 26-03 11:11
Natuurlijk. Dit is alles qua logica wat ervoor komt. Waar staat "out.write" mag je een heleboel out.write(" ")'s indenken, ik heb het enkel wat ingekort om de boel overzichtelijker te maken.

Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
Gebruiker gebruiker = (Gebruiker) session.getAttribute("user");
 
if (session.getAttribute("pagemode") == null){
      session.setAttribute("pagemode", new Integer(1));
}

int pagemode = ((Integer) session.getAttribute("pagemode")).intValue();
out.write();
if( gebruiker != null){
      out.write
}
if( gebruiker != null && gebruiker.isAdmin()){
      out.write
}
     

if( gebruiker == null){
      out.write
}
else {
      out.write
 if(gebruiker.isAdmin()){
      out.write
 }
      
 if(gebruiker.isEigenaar()){
      out.write
  }
      out.write
}


out.write

if( pagemode == 1 ){
      out.write
 ArrayList artikelLijst = dbc.getArtikelLijst();
        Iterator it = artikelLijst.iterator();
        int i = 0;
    while(it.hasNext() && i < 5){
        Artikel a = (Artikel) it.next();
                int aid = a.getArtikelID();
                i++;

      out.write
}

[ Voor 6% gewijzigd door MatthiasDS op 20-12-2005 14:53 ]


  • bodiam
  • Registratie: December 2001
  • Laatst online: 31-12-2024
Een kleine tip: kun je code even tussen [code] tags zetten? En bij voorkeur [code=java] ..

Ik heb nu het idee dat er wat dingetjes missen, tenzij je die ook hebt verwijderd.

[ Voor 32% gewijzigd door bodiam op 20-12-2005 14:30 ]


  • MatthiasDS
  • Registratie: December 2005
  • Laatst online: 26-03 11:11
Wist niet dat code tags hier werken, bij deze is het aangepast. Nogmaals: let niet op de out.prints :)

Verwijderd

Lijkt mij ook het meest waarschijnlijke dat de driver niet gevonden kan worden als ik zo heel snel even het probleem aanschouw.

Deze driver kun je in je applicatie zelf meenemen, waardoor ie dan in WEB-INF/lib komt te staan van je applicatie.

Alternatief kun je hem buiten je applicatie houden, en in de [tomcat install dir]/common/lib neerzetten. Mocht je gebruik gaan maken van JNDI en Tomcat dan MOET je de driver buiten de applicatie houden.

ps

Ik zou eigenlijk geen Java code op de JSP pagina's neerzetten als ik jou was. Dat is nogal slechte style (problemen met onderhoudbaarheid, uitbreidbaarheid en hergebruik code), en bemoeilijkt tevens het debuggen.

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 21-04 10:43

Janoz

Moderator Devschuur®

!litemod

MatthiasDS schreef op dinsdag 20 december 2005 @ 12:25:
[...]


De database staat geregistreerd in Windows (ODBC Data Sources), ik verwijs naar de naam waaronder die geregistreerd staat, en in Netbeans werkt dat alleszins perfect. Moet ik nog iets meer doen om m'n app standalone in tomcat te draaien?
Waarschijnlijk zul je de JDBC/ODBC driver jar ook in de serverlib moeten zetten. Ik kan niet anders dan concluderen dat er bij het aanmaken van de connectie een exception optreed die naar de errorlog geschreven wordt (die je nog niet bekeken hebt en daardoor neit gezien hebt). Hierdoor wordt er niks aan con toegekend en levert een aanroep op dit object dus een nullpointer exception op.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


  • Gert
  • Registratie: Juni 1999
  • Laatst online: 05-12-2025
De jdbc odbc driver is standaard onderdeel van de JRE, tenzij je de Microsoft JRE gebruikt.

Heb je wel een system dsn aangemaakt en geen user dsn? De laatste is wat moeilijk te lezen voor een webserver.

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 21-04 10:43

Janoz

Moderator Devschuur®

!litemod

Hmm, ik wist niet dat deze er standaard in zat (heb eigenlijk alleen nog maar met niet odbc connecties gewerkt). Maar goed, dan staat de rest van mijn verhaal nog wel, alleen zal er dan niet een ClassNotFound exception in de logs staan, maar een foutmelding mbt het falen van het aanmaken van de verbinding.

@TS: Heb je die stacktrace nu al gevonden in je log?

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'

Pagina: 1