[J2EE]Object vanuit Servlet aan JSP doorgeven

Pagina: 1
Acties:
  • 249 views sinds 30-01-2008
  • Reageer

  • kasper_vk
  • Registratie: Augustus 2002
  • Laatst online: 08-04-2025
Ik ben mij aan het verdiepen in JSP & Servlets. Tot dusver: helemaal :)

Het volgende probleem komt nu, maar de Java Webservices Tutorial en de GoT search geven geen antwoord op mijn vraag. Toch vrees ik dat het mogelijk heeeeel basic is, maar daarom is het ook des te frustererender :( dat het niet wil lukken.
Ik ben al errug lang best goed bekend met Java en ik werk nu dus a.d.h.v. de Java Webservices Tutorial.

Het probleem
Ik wil een lijst van ArtikelGroepen weergeven in mijn browser. Straks moet dat uit een database komen, maar eerst wilde ik het proberen zonder DB, om het wat eenvoudiger te houden.
In een servlet maak ik dus de lijst & de objecten (beans) aan, en vervolgens forward ik naar een JSP om het weer te geven.
Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
protected void doGet(HttpServletRequest req, HttpServletResponse resp) {
    try {
        String servletPath = req.getServletPath();
        if (servletPath.equals( "/assortiment.do" )) {
            //ArrayList list = new ArrayList(10);
            ArtikelGroep[] list = new ArtikelGroep[2];
            list[0] = new ArtikelGroep( 1, "Frisdrank" );
            list[1] = new ArtikelGroep( 2, "Bier" );

            //list.add( new ArtikelGroep( 1, "Frisdrank" ) );
            //list.add( new ArtikelGroep( 2, "Bier" ) );
            req.setAttribute( "ArtikelGroepen", list );
            req.getRequestDispatcher("/assortiment/artikelGroep.jsp").forward(req, resp);
        } else {
            /*stukje niet-relevante code*/
        }
    } catch (javax.servlet.ServletException se) {
    }
}

Ik voeg hier dus een Array van ArtikelGroepen toe aan de request scope, onder de naam 'ArtikelGroepen'.

Nu wil ik dus middels een JSP die 2 groepen weer weergeven:
Java Server Page:
1
2
3
4
5
6
7
8
9
10
11
12
13
<%@ page contentType="text/html; charset=UTF-8" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<html><head>
<link rel="stylesheet" type="text/css" href="main.css" />
</head>
<body>

<c:forEach var="groep" begin="0" items="${ArtikelGroepen}">
    ${groep.naam}</br>
</c:forEach>

</body>
</html>

Het probleem is erg voor de hand liggend: er komt dus niets in mijn browser terecht :( D.w.z.: ik zie (via 'view source') wel de HTML die de jsp genereerd, maar dus geen naam van een Artikelgroep: de body is gewoon leeg.

Ik heb geprobeerd om m.b.v. useBean de variabele ArtikelGroepen te declareren, om i.p.v. een array een arrayList door te geven, gebruikgemaakt van jsp:getProperty, maar dat mocht allemaal niet baten.

Kan iemand mij verder helpen? :? Ik zie het licht echt ff niet meer, terwijl ik gevoelsmatig toch iets ontzettend simpels wil doen...

The most exciting phrase to hear in science, the one that heralds new discoveries, is not 'Eureka!' but 'That's funny...'


  • Uncle Bob
  • Registratie: Juni 2000
  • Laatst online: 15-03 16:23
Twee opmerkingen:
1. Staan er fouten in je server log (na je deploy)?
2. Moet het geen include zijn ipv forward?

  • Gert
  • Registratie: Juni 1999
  • Laatst online: 05-12-2025
En servletpath is wel "/assortiment.do"? :o
[edit]Oja natuurlijk, anders kwam ie nooit bij die jsp uit. :z

Je snapt wel wat die for each jsp tag doet en weet zeker dat de syntax juist is?

[ Voor 68% gewijzigd door Gert op 26-04-2004 16:03 ]


  • kasper_vk
  • Registratie: Augustus 2002
  • Laatst online: 08-04-2025
@Uncle bob: include is goed, logs ga ff naar kijken

@Gert: ja, is goed, ik zie immers wel de door de jsp gegenereerde HTML, alleen niet de waarden van die variabelen edit: precies ;)

[ Voor 6% gewijzigd door kasper_vk op 26-04-2004 16:05 ]

The most exciting phrase to hear in science, the one that heralds new discoveries, is not 'Eureka!' but 'That's funny...'


  • Magnetism
  • Registratie: Augustus 1999
  • Laatst online: 13:57
probeer eens expliciet de scope te vermelden, dus iets als:

<c:forEach var="groep" begin="0" items="${requestScope.ArtikelGroepen}">

--<BR>Duh?<BR>


  • kasper_vk
  • Registratie: Augustus 2002
  • Laatst online: 08-04-2025
Ik heb de logs nagekeken, maar daar stonden geen recente foutmeldingen in, alleen foutmeldingen van de alternatieven die ik probeerde.
Het plaatsen van requestscope. voor de variabelenaam maakt weinig verschil.

Ik krijg als body nu:
HTML:
1
    $(groep.naam)</br>

The most exciting phrase to hear in science, the one that heralds new discoveries, is not 'Eureka!' but 'That's funny...'


  • grhmpf
  • Registratie: December 2000
  • Laatst online: 29-05-2022

grhmpf

Android <3

Misschien kan je container geen EL of JSP 2.0 ?

  • kasper_vk
  • Registratie: Augustus 2002
  • Laatst online: 08-04-2025
Ik gebruik Tomcat 5.0, die ondersteund servlets 2.4 en JSP 2.0.

The most exciting phrase to hear in science, the one that heralds new discoveries, is not 'Eureka!' but 'That's funny...'


  • jAnO!
  • Registratie: Januari 2002
  • Laatst online: 01-05 18:22

jAnO!

lalalavanillevla

Java:
1
2
3
<c:forEach var="emp" items="employees">
    Employee: <c:out value="${emp.name}"/>
</c:forEach>

[ Voor 26% gewijzigd door jAnO! op 26-04-2004 17:04 ]

When some people work at a place for ten years they get ten years of experience, other people work at a place for ten years and get one year of experience ten times.


  • kasper_vk
  • Registratie: Augustus 2002
  • Laatst online: 08-04-2025
Ik heb net geprobeert in een (simpele) string over te geven van Servlet naar JSP, maar ook zonder succes.
Servlet:
Java:
1
2
3
4
5
6
ArtikelGroep[] list = new ArtikelGroep[2];
list[0] = new ArtikelGroep( 1, "Frisdrank" );
list[1] = new ArtikelGroep( 2, "Bier" );
req.setAttribute( "ArtikelGroepen", list );
req.setAttribute( "stringetje", "TESTstring" );
req.getRequestDispatcher("/assortiment/artikelGroep.jsp").forward(req, resp);

artikelGroep.jsp:
Java Server Page:
1
2
3
4
5
6
7
8
9
<jsp:useBean id="stringetje" class="java.lang.String" scope="request"/>
<c:out value="$(stringetje)"/>
$(stringetje)
</br>
</br>
<c:forEach var="groep" items="${requestScope.ArtikelGroepen}">
    <c:out value="$(groep.naam)"/>
    </br>
</c:forEach>

Dit geeft de volgende output:
HTML:
1
2
3
4
5
6
7
8
<body>
$(stringetje)
$(stringetje)
</br>
</br>
    $(groep.naam)
    </br>
</body>
Het lijkt erop dat er helemaal niets wordt doorgegeven van servlet --> jsp... ;(

Ik heb toch ook nog geprobeerd om include i.p.v. forward te gebruiken, maar dat maakt geen verschil.

En weer verder zoeken... :(

The most exciting phrase to hear in science, the one that heralds new discoveries, is not 'Eureka!' but 'That's funny...'


  • bigbeng
  • Registratie: Augustus 2000
  • Laatst online: 26-11-2021
Ik ben niet zo'n held met tag gebruik in jsp's, ik gooi meestal nog gewone code tussen mn html.
Maar die $() is dat geen PHP? Kan me er niks van herinneren in mijn JSP cursus.
Heb je sowieso al eens iets van het volgende geprobeerd:
code:
1
2
3
4
5
6
7
8
9
<%
String stringetje = request.getAttribute("stringetje");
if ( stringetje == null ) {
   out.println("leeg!");
}
else {
   out.println("stringetje=" + stringetje);
}
%>


Dit stukje in je jsp pagina zetten, natuurlijk.

Verwijderd

$(bla) != ${bla}
En vergeet niet voor elke bean en array van beans een useBean-tag aan je JSP toe te voegen.

[ Voor 79% gewijzigd door Verwijderd op 26-04-2004 18:36 ]


  • kasper_vk
  • Registratie: Augustus 2002
  • Laatst online: 08-04-2025
Die laatste 2 zijn (alweer) nuttige adviezen; ik ben nu inmiddels niet meer op mijn werk, maar ik zal ze morgen gaan uitproberen :Y) . Uiteraard post ik mijn bevindingen weer.

Thanx!

The most exciting phrase to hear in science, the one that heralds new discoveries, is not 'Eureka!' but 'That's funny...'


  • MrBarBarian
  • Registratie: Oktober 2003
  • Laatst online: 07-03-2023
bigbeng schreef op 26 april 2004 @ 18:13:
Ik ben niet zo'n held met tag gebruik in jsp's, ik gooi meestal nog gewone code tussen mn html.
Maar die $() is dat geen PHP? Kan me er niks van herinneren in mijn JSP cursus.
Heb je sowieso al eens iets van het volgende geprobeerd:
code:
1
2
3
4
5
6
7
8
9
<%
String stringetje = request.getAttribute("stringetje");
if ( stringetje == null ) {
   out.println("leeg!");
}
else {
   out.println("stringetje=" + stringetje);
}
%>


Dit stukje in je jsp pagina zetten, natuurlijk.
Dat is eigelijk 'not done'! Java code en JSP code moeten zoveel mogelijk gescheiden worden/blijven. Anders krijg je absoluut niet onderhoudbare code!

TS:
Google eens op Core Servlets and JSP.pdf (oid). Dat is een gratis eBook, dat voor mij zeer nuttig is geweest!

iRacing Profiel


  • kasper_vk
  • Registratie: Augustus 2002
  • Laatst online: 08-04-2025
Ik heb de suggesties volop geprobeert, maar ik zie nu in de log het volgende staan:

2004-04-27 10:35:08 ApplicationDispatcher[/MagIShop-0.1-dev] Servlet.service() for servlet jsp threw exception
org.apache.jasper.JasperException: Unable to compile class for JSP

No Java compiler was found to compile the generated source for the JSP.
This can usually be solved by copying manually $JAVA_HOME/lib/tools.jar from the JDK
to the common/lib directory of the Tomcat server, followed by a Tomcat restart.
If using an alternate Java compiler, please check its installation and access path.


Leuk, maar tools.jar staat al in de gegeven directory... :?

Nu krijg ik zelfs helemaal niets meer op mijn scherm van mijn JSP; zelfs geen 'gewone' tekst in de body.

The most exciting phrase to hear in science, the one that heralds new discoveries, is not 'Eureka!' but 'That's funny...'


  • watzie
  • Registratie: Juni 2001
  • Laatst online: 16-05 15:09
Jij maken tpyevaud?

  • kasper_vk
  • Registratie: Augustus 2002
  • Laatst online: 08-04-2025
Wat voor tpyevaut dan? Als het gaat om de $() i.p.v. ${}, daar werd al op gewezen en die fout heb ik hersteld, maar de zaak het nog steeds niet.
Je bedoeld het vast behulpzaam, maar ik heb er weinig aan zo :)

Inmiddels de omgevingsvariabelen nagelopen, het zaakje geheel geher-installeerd en nu i.p.v. jwsdp Tomcat geinstalleerd --> zelfde verschijnsel, maar Tomcat logt zelfs helemaal niets. Dus gewoon weer teruggaan naar jwsdp; misschien wel JBoss checken...

Iemand nog suggesties? ;(

The most exciting phrase to hear in science, the one that heralds new discoveries, is not 'Eureka!' but 'That's funny...'


  • Cuball
  • Registratie: Mei 2002
  • Laatst online: 21-05 15:06
kan je aan de default tomcat webpagina... als dit niet lukt is er waarschijnlijk iets verkeerd met de configuratie

"Live as if you were to die tomorrow. Learn as if you were to live forever"


  • bigbeng
  • Registratie: Augustus 2000
  • Laatst online: 26-11-2021
MrBarBarian schreef op 27 april 2004 @ 09:38:
[...]


Dat is eigelijk 'not done'! Java code en JSP code moeten zoveel mogelijk gescheiden worden/blijven. Anders krijg je absoluut niet onderhoudbare code!

TS:
Google eens op Core Servlets and JSP.pdf (oid). Dat is een gratis eBook, dat voor mij zeer nuttig is geweest!
Check, dat wist ik ook al. Maar een beetje debuggen mag toch wel met Java code? Daar bedoelde ik mijn stukje code voor eigenlijk. Met Java code kun je nou eenmaal iets meer dan met JSP tags.

  • kasper_vk
  • Registratie: Augustus 2002
  • Laatst online: 08-04-2025
Ik krijg wel de tomcat homepage te zien op localhost:8080, via de application manager deploy ik vervolgens mijn applicatie.
De voorbeeld JSP's doen het allemaal, van de JSP uit mijn eigen app. doen alleen die pagina's het, waar alleen pure HTML in staat of uiterst trivale constructies als
Java:
1
2
3
4
<b>Hallo allemaal!</b>
<c:if test="true">
1 == 1.
</c:if>

Zodra ik het volgende toevoeg aan een JSP en vanuit een servlet daarnaartoe forward, gaat het mis.
Java:
1
2
<jsp:useBean id="stringetje" class="java.lang.String" scope="session"/>
"${stringetje}"

Misgaan betekend in dit geval dat ik de volgende html te zien krijg:
HTML:
1
2
Hallo allemaal! 1 == 1
${stringetje}

De bedoeling is dat ik (keurig volgens Model-2) alles via 1 servlet laat lopen, die vervolgens de juiste actie uitzoekt & uitvoert, data laat manipuleren & opzoeken en vervolgens naar de juiste JSP forward om de data weer te geven.
Maar da's verder offtopic: voorlopig werkt er uberhaubt geen JSP, wat mij bijna ertoezet om maar alles met servlets te gaan maken :r

[ Voor 7% gewijzigd door kasper_vk op 27-04-2004 17:00 ]

The most exciting phrase to hear in science, the one that heralds new discoveries, is not 'Eureka!' but 'That's funny...'


  • Uncle Bob
  • Registratie: Juni 2000
  • Laatst online: 15-03 16:23
Weet je zeker dat zelfs die triviale zaken het doen.
Heb je de eerste code stuk ook getest met test = false?

  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06-2025

drm

f0pc0dert

Weet je uberhaupt zeker dat de prefix 'c' wel meegenomen wordt? Doe bij het stukje output dat je kreeg
code:
1
2
Hallo allemaal! 1 == 1
${stringetje}
eens een view source, en kijk eens of er stiekem niet gewoon een <c:...>1 == 1</c:...> in de output staat?

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


  • Cuball
  • Registratie: Mei 2002
  • Laatst online: 21-05 15:06
kasper_vk schreef op 27 april 2004 @ 16:59:

De bedoeling is dat ik (keurig volgens Model-2) alles via 1 servlet laat lopen, die vervolgens de juiste actie uitzoekt & uitvoert, data laat manipuleren & opzoeken en vervolgens naar de juiste JSP forward om de data weer te geven.
Maar da's verder offtopic: voorlopig werkt er uberhaubt geen JSP, wat mij bijna ertoezet om maar alles met servlets te gaan maken :r
probeer dan es het Struts framework uit ! Doet het allemaal voor jou

"Live as if you were to die tomorrow. Learn as if you were to live forever"


  • Casteloni
  • Registratie: November 2001
  • Laatst online: 19-05 19:09
En wat gebeurt er als je request.getAttribute("stringetje") in je JSP aanroept? En die vervolgens op het scherm zet?

Kijk ook even of er echt wel iets in het request object zit, er zal vast wel een methode voor zijn :9

  • kasper_vk
  • Registratie: Augustus 2002
  • Laatst online: 08-04-2025
Uncle bob: Nee, idd, ook met test="false" komt het stuk tussen de <if> tags gewoon in beeld te staan.

Drm: ja, de c-prefix wordt wel meegnomen: ik zie dus niet de <c:if ... > tags enzo, als ik view source doe

Cuball: bedankt voor de tip, als Tomcatje eindelijk zijn best eens gaat doen, zal ik er zeker naar gaan kijken!

Ik krijg nu de indruk dat m'n jsp's gewoon net als html bestanden behandeld worden... wat zou daar de oorzaak van kunnen zijn? (ik ga zelf ook ff zoeken, natuurlijk)


Wanneer ik het volgende in mijn JSP zet
Java:
1
2
3
4
<%
Object a = request.getAttribute("stringetje");
response.getOutputStream.println( a );
%>

krijg ik vervolgens niets meer te zien van mijn JSP. In de jwsdp-log staan vervolgens weer:
2004-04-28 09:18:04 ApplicationDispatcher[/MagIShop-0.1-dev] Servlet.service() for servlet jsp threw exception
org.apache.jasper.JasperException: Unable to compile class for JSP
No Java compiler was found to compile the generated source for the JSP.
This can usually be solved by copying manually $JAVA_HOME/lib/tools.jar from the JDK to the common/lib directory of the Tomcat server, followed by a Tomcat restart. If using an alternate Java compiler, please check its installation and access path.

The most exciting phrase to hear in science, the one that heralds new discoveries, is not 'Eureka!' but 'That's funny...'


  • kasper_vk
  • Registratie: Augustus 2002
  • Laatst online: 08-04-2025
VampireSlayer schreef op 27 april 2004 @ 22:56:
...
Kijk ook even of er echt wel iets in het request object zit, er zal vast wel een methode voor zijn :9
Wat bedoelde je daar eigelijk mee? (net over het hoofd gezien, ben nog een beetje :O ;))

The most exciting phrase to hear in science, the one that heralds new discoveries, is not 'Eureka!' but 'That's funny...'


  • Stephan Oudmaijer
  • Registratie: Oktober 2000
  • Laatst online: 16-08-2023
kasper_vk schreef op 27 april 2004 @ 10:40:
Ik heb de suggesties volop geprobeert, maar ik zie nu in de log het volgende staan:

2004-04-27 10:35:08 ApplicationDispatcher[/MagIShop-0.1-dev] Servlet.service() for servlet jsp threw exception
org.apache.jasper.JasperException: Unable to compile class for JSP

No Java compiler was found to compile the generated source for the JSP.
This can usually be solved by copying manually $JAVA_HOME/lib/tools.jar from the JDK
to the common/lib directory of the Tomcat server, followed by a Tomcat restart.
If using an alternate Java compiler, please check its installation and access path.


Leuk, maar tools.jar staat al in de gegeven directory... :?

Nu krijg ik zelfs helemaal niets meer op mijn scherm van mijn JSP; zelfs geen 'gewone' tekst in de body.
geupgrade naar J2SE 1.5?

ik zie .do in je code... waarom gebruik je dan geen Struts ? ;)

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 00:01

Janoz

Moderator Devschuur®

!litemod

Heb je op de computer waar tomcat op draait wel de JDK geinstaleerd (en niet alleen de jre) en ook de JAVA_HOME enviroment var geset?
Cuball schreef op 27 april 2004 @ 22:03:
probeer dan es het Struts framework uit ! Doet het allemaal voor jou
Dan hou je nog steeds hetzelfde probleem. Struts adviseert de core taglib te gebruiken en die werkt hier niet optimaal.

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


  • kasper_vk
  • Registratie: Augustus 2002
  • Laatst online: 08-04-2025
Ik gebruik j2sdk1.4.2_04, de JAVA_HOME heb ik ingesteld; als ik vanaf de command line de server start en vervolgens 'set' intype, dan staat daar de JAVA_HOME var bij met de correcte waarde.
FF voor de volledigheid: (sterretjes = censuur toegepast, zegmaar)
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
ALLUSERSPROFILE=C:\Documents and Settings\All Users
APPDATA=C:\Documents and Settings\*********\Application Data
CATALINA_HOME=c:\jwsdp-1.3
CLASSPATH=c:\j2sdk1.4.2_04\lib\tools.jar
CommonProgramFiles=C:\Program Files\Common Files
COMPUTERNAME=*********
ComSpec=C:\WINNT\system32\cmd.exe
FILESERVER=\\*********
HOMEDRIVE=H:
HOMEPATH=\
HOMESHARE=*********
JAVA_HOME=C:\J2SDK1.4.2_04
LOGONSERVER=\\PVF-CURA-01
NUMBER_OF_PROCESSORS=1
OS=Windows_NT
Os2LibPath=C:\WINNT\system32\os2\dll;
Path=C:\WINNT\system32;C:\WINNT;C:\WINNT\System32\Wbem;C:\MSSQL7\BINN;C:\jwsdp-1.3\jwsdp-shared\bin
PATHEXT=.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH
PROCESSOR_ARCHITECTURE=x86
PROCESSOR_IDENTIFIER=x86 Family 15 Model 1 Stepping 2, GenuineIntel
PROCESSOR_LEVEL=15
PROCESSOR_REVISION=0102
ProgramFiles=C:\Program Files
PROMPT=$P$G
SystemDrive=C:
SystemRoot=C:\WINNT
TEMP=C:\DOCUME~1\R13DE~1.DRI\LOCALS~1\Temp
TMP=C:\DOCUME~1\R13DE~1.DRI\LOCALS~1\Temp
USERDNSDOMAIN=*********
USERDOMAIN=*********
USERNAME=*********
USERPROFILE=C:\Documents and Settings\*********
windir=C:\WINNT


Overigens even een correctie op wat ik daarnet schreef: op de een-of-andere manier doet
Java:
1
<c:if test="false">1 == 1.</c:if>

het nu wel: ik krijg 1 == 1 dus niet te zien. Dus de c-prefix wordt goed gepakt en de if-tag doet ut dus.

[ Voor 5% gewijzigd door kasper_vk op 28-04-2004 09:44 ]

The most exciting phrase to hear in science, the one that heralds new discoveries, is not 'Eureka!' but 'That's funny...'


  • Casteloni
  • Registratie: November 2001
  • Laatst online: 19-05 19:09
kasper_vk schreef op 28 april 2004 @ 09:20:

[knip]

Wanneer ik het volgende in mijn JSP zet
Java:
1
2
3
4
<%
Object a = request.getAttribute("stringetje");
response.getOutputStream.println( a );
%>

krijg ik vervolgens niets meer te zien van mijn JSP. In de jwsdp-log staan vervolgens weer:

...error ....
En dit werkt nog steeds niet? Krijg je die error nog? Volgens mij wordt die if-statement ook omgezet in java-code, dus dan zou dit ook moeten werken.

  • kasper_vk
  • Registratie: Augustus 2002
  • Laatst online: 08-04-2025
Onder het motto: post ook de oplossing:

Uiteindelijk ben ik (om emotionele 8)7 redenen) overgestapt naar JBoss als applicatieserver.
Ik weet nog steeds niet wat er mis was met mijn JWSDP installatie i.c.m. Ant, maar dat het zaakje nu (met JBoss) wel loopt is een feit.
Overigens zonder gebruik te maken van expression language, zoals ${blaat}.

Verder: Struts & Eclipse roelen echt zwaar! _/-\o_
Die kan ik echt iedereen aanraden die iets met J2EE willen doen, al is een goeie struts tutorial wel handig, zeker als je (net als ik) nog maar net in het j2ee bootje bent gestapt. Ik heb http://www.jspinsider.com/content/jsp/struts/strutsintro.jsp gebruikt: kort maar krachtig.
Verder is het aan te raden om een XML-plugin te gebruiken, wanneer je zelf niet 1-2-3 je eigen fouten in je struts-config.xml ziet :X .

Bedankt voor de reacties! :)

The most exciting phrase to hear in science, the one that heralds new discoveries, is not 'Eureka!' but 'That's funny...'

Pagina: 1