[Java] servlet, problemen met ParameterMap

Pagina: 1
Acties:

  • Expander
  • Registratie: Februari 2001
  • Niet online
edit2:
Misschien hoort dit topic straks in ANS.

De hele week heb ik me suf zitten zoeken naar een oplossing, maar ik kom er niet uit zonder hulp van GoT (mét denk ik ook niet).

OS: Debian Linux unstable
Java versie: 1.4.0_01
Tomcat versie: 4.0.4 (uit de distributie (natuurlijk))

Het probleem doet zich voor als ik vanuit een servlet een parameter van het servlet wil parsen. Bijvoorbeeld in een methode in een HttpServlet extending class:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
 public void parameterParse()
  {
    String queryString = request.getQueryString();
    StringTokenizer queryTokens = new StringTokenizer(queryString, "&");
    while (queryTokens.hasMoreTokens())
    {
      String name = queryTokens.nextToken();
      easParameterMap.put(name, request.getParameter(name));
    }
//    for (Enumeration values = request.getParameterNames(); values.hasMoreElements();)
//    {
//      String name = (String)values.nextElement();
//      easParameterMap.put(name, request.getParameter(name));
//    }
  }

Tomcat geeft een ServletException en daarna "java.lang.NoClassDefFoundError: org/apache/catalina/util/ParameterMap" bij de regel met de request.getParameter(name).

Als ik het onderste deel uncomment en het bovenste comment, dan hangt hij met een exception bij request.getParameterNames().

Het probleem is dus dat ik niets met parameters kan doen, zelfs niet met de hand parsen zoals ik al geprobeerd heb.

edit:
De preciezere eerste Exception is trouwens:
code:
1
2
3
4
5
6
7
8
javax.servlet.ServletException: Servlet execution threw an exception
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:269)
    at org.apache.catalina.core.ApplicationFilterChain.access$000(ApplicationFilterChain.java:98)
    at org.apache.catalina.core.ApplicationFilterChain$1.run(ApplicationFilterChain.java:176)
    at java.security.AccessController.doPrivileged(Native Method)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:172)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:243)
(enzovoorts)

[ Voor 0% gewijzigd door Expander op 08-08-2002 22:50 . Reden: toevoeging ]

Expanding the inexpandable


Verwijderd

Ik vraag me af hoe je binnen die method aan die request variabele komt, waar heb je hem geinitialiseerd?
Wat krijg je als inhoud van queryString?

Mijn voorkeur zou trouwens uitgaan naar die Enumeration oplossing, maar dan toch iets anders:

code:
1
2
3
4
5
6
7
8
Enumeration values = request.getParameterNames();
String name;

while (values.hasMoreElements())
{
  name = (String) values.nextElement();
  eenParameterMap.put(name, request.getParameter(name));
}


Een while loop is imho beter op zijn plaats als je het aantal parameters niet weet.

[ Voor 0% gewijzigd door Verwijderd op 09-08-2002 01:26 . Reden: typo ]


  • Alarmnummer
  • Registratie: Juli 2001
  • Laatst online: 09-07-2024

Alarmnummer

-= Tja =-

Verwijderd schreef op 09 augustus 2002 @ 01:13:
Een while loop is imho beter op zijn plaats als je het aantal parameters niet weet.
Ik zie zijn constructie wel vaker, en in c# is er zelfs een speciale statements voor toegevoegd: forall. Ik weet zelf ook nog niet helemaal wat ik er van moet denken, maar ik gebruik dit bv ook:

code:
1
2
3
for(Iterator itt = ..; itt.hasNext();){
   doIets(itt.next());
}


In principe weet je hoeveel iteraties je gaat lopen, namelijk size van enumeratie (alhoewel je die waarde dus zelf niet weet). Maar je gaat dus wel ieder element van de iteratie bij langs. En in dat opzicht zou je voor een for moeten kiezen ipv een while.

Verwijderd

edit: Lezen |:(
edit:

Dit lijkt me toch een classpath probleem, staan alle tomcat jars in je classpath, is tomcat wel goed geinstalleerd? Misschien kun je Resin eens proberen, of tomcat opnieuw installeren

  • Expander
  • Registratie: Februari 2001
  • Niet online
De request variabele is een klasse-variabele (goede term?) waar ik een bewerking op uitvoer. this.request dus eigenlijk. Deze krijgt een waarde in de doPost method. (this.request = req, req is dan HttpServletRequest argument van doPost).

Andere dingen doen met de request lukt wel.

Cheatah's methode, die eigenlijk de beste is, werkt niet. Met als resultaat de twee zelfde exceptions.

En inderdaad houd ik ook meer van de Enumeration methode, maar ik was wat aan het proberen omdat het niet werkte.

Expanding the inexpandable


  • Expander
  • Registratie: Februari 2001
  • Niet online
Als ik de Tomcat Security Manager uit zet (of java.security.AllPermission neerzet), werkt alles gewoon. Het is dus een configuratieprobleem m.b.t. Tomcat.

Expanding the inexpandable

Pagina: 1