Toon posts:

JSP eigen classes topic

Pagina: 1
Acties:

Verwijderd

Topicstarter
Oke, ik ben wanhopig genoeg om een eigen topic te starten. Heb de andere topics gezien op dit onderwerp maar ik kan het bij mij nog steeds niet werkend krijgen dus dan maar zo.

Ik heb nu een Choice.jsp file die moet werken met enkele classes, namelijk een DBConnection.class, een Vraag.class en een Resultaat.class.

Ik heb eigenlijk al van alles geprobeerd (in map stoppen en package importeren, gewoon classes importeren, veel soorten combinaties met importeren constructies etc).

Pagina blijft errors geven dat die die classes niet kan vinden. Ik weet dus echt niet meer wat ik moet doen en ik moet dit toch afmaken. Zoveel tijd gestopt in die classes en het dan niet in jsp / Tomcat 4.1 kunnen oproepen is een slechte grap :(

Op deze pagina http://www.coreservlets.c...nd-4.0.html#Test-Servlets heb ik wel alle voorbeelden aan het werk gekregen, dus aan mijn instellingen zelf zal het waarschijnlijk niet liggen.

Dus mijn vragen specifieker:
In welke mappen moet ik die classes nou zetten? ROOT\WEB-INF\classes\? Of ROOT\WEB-INF\classes\(eigenpackagenaamverzinnen)?

En hoe ziet mijn import constructie er dan uit?

Moet ik nog naar iets specifieks verwijzen in mijn CLASSPATH?
Momenteel nu: .;G:\Program Files\Apache Group\Tomcat 4.1\common\lib\servlet.jar;C:\DevDir\;

Alvast bedankt voor de hulp...

  • -FoX-
  • Registratie: Januari 2002
  • Niet online

-FoX-

Carpe Diem!

Je dient je gecompileerde classes in de WEB-INF directory te plaatsen. Best even een een subdir zoals classes: WEB-INF\classes\com\test\package.

In je jsp pagina dien je dan een import te doen op package niveau of liever nog op class niveau:
<%@ page import="com.test.package.*" %> of <%@ page import="com.test.package.Vraag"%>

Je hoeft geen specifieke verwijzigingen naar je classpath te hebben, daar zorgt tomcat wel voor.

Ohja, je gebruikt wel een erg verouderde (>3j) versie van Tomcat. Upgrade eens naar een 5.0.x versie.

Verwijderd

Topicstarter
code:
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
<%@ page import="com.test.package.Vraag"%>
<%
   //Haal value van keuze op voor verdere verwerkingen
   String choice = request.getParameter( "Choice" );   
   boolean spelen = choice.equals("Go");    
%>

<HTML>
<BODY>

<%
//Kijk welke pagina opgevraagd moet worden. Spelen of einde.
if (spelen) 
{   
    DBConnection dbc = new DBConnection();
    Vraag[] vragenArray = dbc.selecteerVijf();  
    }

}
else
    {
        %><jsp:include page='Einde.html'/><%
    }
%>

</BODY>
</HTML>


Oke gedaan wat je hebt voorgesteld.

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: Unable to compile class for JSP

An error occurred at line: 10 in the jsp file: /Choice.jsp

Generated servlet error:
[javac] Compiling 1 source file

G:\Program Files\Apache Group\Tomcat 4.1\work\Standalone\localhost\_\Choice_jsp.java:7: <identifier> expected
import com.test.package.Vraag;
^
G:\Program Files\Apache Group\Tomcat 4.1\work\Standalone\localhost\_\Choice_jsp.java:31: 'try' without 'catch' or 'finally'
try {
^
G:\Program Files\Apache Group\Tomcat 4.1\work\Standalone\localhost\_\Choice_jsp.java:62: 'else' without 'if'
else
^


An error occurred at line: -1 in the jsp file: null

Generated servlet error:
G:\Program Files\Apache Group\Tomcat 4.1\work\Standalone\localhost\_\Choice_jsp.java:72: illegal start of type
} catch (Throwable t) {
^
G:\Program Files\Apache Group\Tomcat 4.1\work\Standalone\localhost\_\Choice_jsp.java:80: <identifier> expected
}
^
G:\Program Files\Apache Group\Tomcat 4.1\work\Standalone\localhost\_\Choice_jsp.java:81: 'class' or 'interface' expected
}
^
G:\Program Files\Apache Group\Tomcat 4.1\work\Standalone\localhost\_\Choice_jsp.java:82: 'class' or 'interface' expected
^
7 errors

Ligt dit aan mijn Choice.jsp of aan de classe die ik importeer?

En ik gebruik 4.1 omdat ik momenteel bezig ben met een opdracht voor school, vandaar...

  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 19:53

Creepy

Tactical Espionage Splatterer

Je krijgt nu zo te zien vrij duidelijke foutmeldingen in wat sourcefiles. Probeer die eens op te lossen, er staat precies wat en waar het mis gaat :)

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


Verwijderd

Topicstarter
Ik zal er indd nog even in gaan duiken.

Thanks voor de info (en over imports).

[ Voor 86% gewijzigd door Verwijderd op 28-06-2006 11:08 ]


Verwijderd

Ik vind de foutmelding niet echt duidelijk, want volgens mij betreft het in eerste instantie een foutje in het aantal accolades...

Probeer ook eens wat meer te lezen over "packages" en hoe deze corresponderen met je directory structuur...

Succes

  • -FoX-
  • Registratie: Januari 2002
  • Niet online

-FoX-

Carpe Diem!

"G:\Program Files\Apache Group\Tomcat 4.1\work\Standalone\localhost\_\Choice_jsp.java"

Dit is de gegenereerde sourcefile van je JSP. Bekijk deze eens om te zien of er je geen rare dingen opvallen. Verder staat er een accolade teveel in je if-statement

Verwijderd

Topicstarter
Edit: Oke even opnieuw proberen dan

Gestripte versie

Choice.jsp in G:\Program Files\Apache Group\Tomcat 4.1\webapps\ROOT\
code:
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
<%@ page import="com.test.*" %>
<%
   //Haal value van keuze op voor verdere verwerkingen
   String choice = request.getParameter( "Choice" );   
   boolean spelen = choice.equals("Go");    
%>

<HTML>
<BODY>

<%
//Kijk welke pagina opgevraagd moet worden. Spelen of einde.
if (spelen) 
{   
    DBConnection dbc = new DBConnection();
    Vraag[] vragenArray = dbc.selecteerVijf();     
    
}
else
    {
        %><jsp:include page='Einde.html'/><%
    }
%>

</BODY>
</HTML>


De rest in webapps\ROOT\WEB-INF\classes\com\test\
An error occurred at line: 10 in the jsp file: /Choice.jsp

Generated servlet error:
[javac] Compiling 1 source file

G:\Program Files\Apache Group\Tomcat 4.1\work\Standalone\localhost\_\Choice_jsp.java:55: cannot access com.test.DBConnection


An error occurred at line: 10 in the jsp file: /Choice.jsp

Generated servlet error:
bad class file: G:\Program Files\Apache Group\Tomcat 4.1\webapps\ROOT\WEB-INF\classes\com\test\DBConnection.class
class file contains wrong class: DBConnection
Please remove or make sure it appears in the correct subdirectory of the classpath.
DBConnection dbc = new DBConnection();
^
1 error

Wat doe ik verkeerd? Ik begrijp het niet. Ligt het aan mijn DBConnection.class? Mijn Vraag.class?

[ Voor 40% gewijzigd door Verwijderd op 28-06-2006 11:33 ]


  • -FoX-
  • Registratie: Januari 2002
  • Niet online

-FoX-

Carpe Diem!

Hoe ziet je DBConnection class er uit?

Verwijderd

Topicstarter
DBConnection.java

code:
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
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
import java.sql.*;
import java.sql.SQLException;

//verbinding maken met database hoofdstedenSpel
public class DBConnection
{
  private Connection link;
  private static final String URL = "jdbc:odbc:hoofdstedenSpel";
  private static final String LOGINNAME = "";
  private static final String PASSWORD = "";
  private static final String DRIVER = "sun.jdbc.odbc.JdbcOdbcDriver";

  public DBConnection()
  {
    try
    {
      Class.forName(DRIVER);
      link = DriverManager.getConnection(URL,LOGINNAME,PASSWORD);
    }
    catch (Exception e)
    {
      e.printStackTrace();
      System.exit(1);
    }
  }

//methoden voor ophalen van een array met 5 verschillende vragen (instanties vraag object)
  public Vraag[] selecteerVijf()
  {
    Vraag[] tempVragenArray = new Vraag[5];

    String select = "SELECT *"
                       + " FROM Vragen"
                       + " ORDER BY RAND()"
                       + " LIMIT 5";

    try
    {
      Statement statement = link.createStatement();

      ResultSet results = statement.executeQuery(select);
      int i = 0;
      while( results.next() )
      {
                Vraag nieuweVraag = new Vraag(results.getString("Vraag"), results.getString("Antwoord"));
                tempVragenArray[i] = nieuweVraag;
                i++;
      }


      results.close();
      statement.close();
    }
    catch (SQLException e)
    {
      e.printStackTrace();
      System.exit(1);
    }
    return tempVragenArray;

  }


//updaten van de resultaten na een spel
  public String updateResultaten(int correctN)
  {
    String select = "UPDATE Resultaten"
                     + " SET AantalDeelnemers = AantalDeelnemers + 1"
                     + " WHERE AantalJuistGeraden = '"+ correctN + "'";

      try
      {
        Statement statement = link.createStatement();

        ResultSet results = statement.executeQuery(select);

        results.close();
        statement.close();
      }
      catch (SQLException e)
      {
      e.printStackTrace();
        System.exit(1);
        }
        return "Update voltooid!";
  }


  //methoden voor ophalen van een array met 5 verschillende vragen (instanties vraag object)
    public Resultaat[] getResults()
    {
      Resultaat[] tempResultatenArray = new Resultaat[5];

      String select =   "SELECT AantalJuistGeraden, AantalDeelnemers, (SELECT AantalDeelnemers/(SELECT SUM(AantalDeelnemers FROM Resultaten) FROM Resultaten) AS Percentage"
                        + " FROM Resultaten";

      try
      {
        Statement statement = link.createStatement();

        ResultSet results = statement.executeQuery(select);
      int i = 0;
        while( results.next() )
        {
                Resultaat nieuwResultaat = new Resultaat(results.getInt("AantalJuistGeraden"), results.getInt("AantalDeelnemers"), results.getDouble("Percentage"));
                tempResultatenArray[i] = nieuwResultaat;
                i++;
          }


        results.close();
        statement.close();
      }
      catch (SQLException e)
      {
      e.printStackTrace();
        System.exit(1);
      }
    return tempResultatenArray;

  }

  public void close()
    {
      try
      {
        link.close();
      }
      catch(Exception e)
      {
      e.printStackTrace();
        System.exit(1);
      }
  }
}


Even in context plaatsen
Uitwerking
DB klasse:
• public DBConnection()
• public Vraag[] selecteerVijf()
• public String updateResultaten(int correctN)
• public Resultaat[] getResults()
• public void close()

Vraag Klasse
• public Vraag(String vraag, String antwoord)
• getVraag()
• getAntwoord()

Resultaat Klasse
• public Resultaat(int aantaljuistgeraden, int aantaldeelnemers, double percentage)
• public int getAantalJuistGeraden()
• public int getAantalDeelnemers()
• public double getPercentage()

Maak een webtoepassing van een vraag-en-antwoordspel, waarbij een speler kan raden naar de hoofdsteden van landen. De website bestaat uit 4 webpagina’s:

Pagina 1: welkom + gebruiker kan met radiobuttons kiezen: deelnemen aan het spel (naar 3) of stoppen (naar 2); in het welkom staat ook een korte uitleg van het spel.

Pagina 2: afscheidspagina, voor als de gebruiker voor stoppen heeft gekozen.

Pagina 3: de vraag-en-antwoord pagina, die de speler 5 keer voorgeschoteld krijgt, waarbij hij telkens een andere (random gekozen!) vraag uit de tabel Vragen van de database hoofdstedenSpel.mdb moet beantwoorden. De speler mag niet twee keer dezelfde vraag voorgelegd krijgen! Het beantwoorden geschiedt door het aanklikken van radiobuttons. Na vijf vragen beantwoord te hebben komt de gebruiker automatisch op de slotpagina.

Pagina 4, de slotpagina: hier krijgt de speler te zien 1) hoeveel vragen hij goed beantwoord heeft, 2) de vragen, die hij beantwoord heeft, met hun juiste antwoord en een + indien juist beantwoord en een – indien onjuist beantwoord, en 3) een overzicht van de behaalde resultaten van alle deelnemers tot nu toe aan het spel (inclusief de huidige speler):

Pagina 3 wordt dan Choice.jsp (althans dat is het idee erachter)

[ Voor 25% gewijzigd door Verwijderd op 28-06-2006 11:48 ]


  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 23:22

Janoz

Moderator Devschuur®

!litemod

In die source staat nergens 'package' (zou helemaal bovenaan moeten staan). Zoals al eerder aangegeven, verdiep je eens in hoe packages werken. Wat er nu fout gaat is dat je wel de directory structuur gebruikt, maar in de java niet aangeeft dat dat bestand ook daadwerkelijk in dat package zit.

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

Pagina: 1