Is dat niet de melding die je krijgt als je gecompileerde class een andere major JDK release heeft gebruikt dan de JRE waarmee je het runt? Mischien dat je compiled in Java 5.0 format en probeerd te draaien met een 1.4.2 VM?
Ik ben er nog niet helemaal achter hoe dit komt! Ik wil namelijk een sessie starten, zo wordt ook het HTML en JSP netjes gescheiden in bestanden.
Mischien dat je nu een beetje bij het punt bent aangekomen dat je toch eens wat theorie moet gaan lezen, zodat je een beetje weet wat je aan het doen bent. Lees eens de hoofdstukken goed door van core servlets and jsp's op bijvoorbeeld:
http://pdf.coreservlets.com/
Ik merk heel duidelijk in je posting dat je heel veel termen en begrippen echt door elkaar haalt. Een sessie start je niet expliciet, die maakt de application server/servlet container (bv Tomcat) automatisch voor je. Een session is feitelijk een hashmap waar je objecten in kunt stoppen. Beans, maar ook gewoon Strings of Integers, etc.
Vervolgens is er geen sprake van dat je HTML en JSP netjes gescheiden moet houden. Een JSP pagina
IS een HTML pagina, met daartussen taglib tags, EL, en eventueel een beetje scriptlets (=java).
Niet erg makkelijk begrijp ik, maar niet onmogelijk! Het wil mij echter nog niet helemaal duidelijk worden hoe ik nou om moet springen met zo'n Bean.
Het is juist erg makkelijk. Een bean is gewoon een java class, waarbij je de fields benader door middel van zogenaamde getters en setters. Ook in 'gewone' java classes heb je al bijna altijd de conventie (gebruik) om getters en setters te gebruiken. Bv getPassWord(), of getUserName(). Etc.
- inlog.jsp = HTML/JSP (Opgeven gebruikersnaam en wachtwoord)
- inlog_dbcon.jsp = JSP (Database connectie)
- NextPage.jsp = JSP (Uiteindelijke te bereiken pagina)
- UserData.class = Bean
(Locatie waar username/password opgeslagen worden in de sessie)
Dit gaat kwa structuur al niet helemaal lekker. Een aparte JSP page voor een DB connection?
Vervolgens begrijp je ook niet 100% wat nou precies een session is. Het is niet perse zo dat je alleen via de bean iets in de session kan zetten. In jouw voorbeeld staat een object van type UserData wel in de session, dus zal die set functies calls inderdaad wat in de session zetten, maar het is niet zo dat je die bean daar perse voor nodig hebt.
Niet dat je nu zo moet doen, maar even voor het begrip, zet je met de volgende code ook iets in de session:
<%
String user = "joop!";
session.setAttribute("user", user); %>
%>
Gebruikelijker is echter dat je toch de bean gebruikt. Als je aan de pagina waarop de useBean tag staat de page parameters username en password meegeeft (bv in de browser aanroepen met mypage.jsp?username=piet&password=bla), dan zet je met de tag:
Java:
1
| <jsp:setProperty name="user" property="*"/> |
Meteen alles tegelijk. Feitelijk is dit een afkorting van ongeveer iets als:
Java:
1
2
3
4
5
6
| <%
String username = request.getParameter("username");
if (username != null && username.length() > 0 ) {
user.setUsername(username);
}
%> |
Ik zit er nu namelijk mee dat als je iets invoert in inlog.jsp, je daar dus de Bean declareerd als:
Java:
1
| <jsp:useBean id="user" scope="session" class="UserData"/> |
Volgens mij is het ook niet (meer) legaal om een class uit de unnamed package te gebruiken. Zet je class UserData dus in een package. Bv maak een directory beginner aan in je source tree, en zet dan boven in je UserData.java, package beginner; Vervolgens gebruik je in de useBean tag, class="beginner.UserData".
Java:
1
2
3
4
| <%
user.setUsername(username);
user.setPassword(password);
%> |
Maar dit gaat dus niet goed anders zou ik die foutmelding nooit krijgen, want volgens mij wijst die erop dat er niks in de Bean staat
??? Als de variable user naar "niks' zou verwijzen, dan zou je een nullpointer exception krijgen. Een setter zal geen foutmelding opleveren omdat er nog "niks" in de bean staat (wat dat in jouw terminologie dan ook precies mag betekenen

).
Normaal zou dit wel moeten werken opzich. Ik zou het eerst eens gaan zoeken in het gebruik van een package en gezien de magic number melding in het gebruik van de zelfde compiler en runtime versie.
Deze moeten dan eerst nog gecontroleerd worden in inlog_dbcon.jsp om te kijken of de gebruikersnaam en het wachtwoord wel goed is. Dus dan zou ik bij dit een resultaat moeten toevoegen, wat ook weer wordt opgeslagen in de Bean?
Eigenlijk is dit typisch servlet werk, maar goed als je die persie niet wilt gebruiken zou ik eerder op je inlog pagina 1 functie van bean aanroepen die checked of de name and password kloppen.
bv:
Vervolgens staat AL je DB code in deze doLogin functie. Als je via de DB gecontroleerd hebt of de inlog klopt, dan zet je een boolean op true. Voor deze boolean maak je dan een getter in je bean, bijvoorbeeld boolean getLogin(); // (isLogin() mag ook)
Op de pagina zelf zet je dan iets van:
Java:
1
2
3
4
5
6
7
8
9
| <c:choose>
<c:when test="$ { user.login == true }" >
<jsp:forward page="NextPage.jsp" />
</c:when>
<c:otherwise>
<HTML> <body> Inlog klopt niet... bla bla... inlog form hier enz </body> </html>
</c:otherwise>
</c:choose> |
Java:
1
2
3
4
5
6
7
8
9
10
| <%
public UserData makeUser(resultSet rs)
{
UserData user = new UserData();
user.setUsername(rs.getString("username"));
user.setPassword(rs.getString("password"));
return bean;
}
%> |
In deze situatie lijkt me dit niet de manier. username en password komen van via een form van de user. Deze zet je in je bean. Dan controlleer je of een record met die combinatie in de DB voorkomt. Is er tenminste 1 rij met die combinatie? Dan zet je de boolean op true, anders op false.