Toon posts:

[Servlet] cookies uitlezen

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik heb een webpage die een aantal parameters in een cookie opslaat in het formaat
code:
1
var1:var2:var3:var4

Deze kan ik met een servlet weer inlezen dmv request.getCookies(). Hierna heb ik dus een lange string met de variablen erin.

Nu moet die string weer worden opgedeelt in aparte strings, dit kan door String.split(var1:var2:var3:var4 : )

Het resultaat gaat dan {"var1", "var2", "var3", "var4"} zijn (dit is een array?)

maar, hoe kan ik er nu voor zorgen dat var1 (enz) een aparte string wordt? Dus dat er bv. String naam = var1 komt?

Hmm, als je een betere manier weet is die uiteraard ook meer dan welkom (ik ben nog aardig nieuw met Java), en als er helemaal geen donder van klopt word ik graag een stukje de goeie kant op geduwt ;)

  • mbravenboer
  • Registratie: Januari 2000
  • Laatst online: 06-11-2025
beurdy: Hmm, als je een betere manier weet is die uiteraard ook meer dan welkom (ik ben nog aardig nieuw met Java), en als er helemaal geen donder van klopt word ik graag een stukje de goeie kant op geduwt ;)
Dan duw ik maar ff ;) .

Je probleem heeft helemaal niets met servlets te maken. Je hebt al gezien hoe je een String kunt opsplitsen. Je krijgt dan inderdaad een array terug.

Wat jij wilt is gewoon elementen uit deze array halen en toewijzen aan een variabele dmv een assigment statement. Hoe je dat kunt doen kan je hier lezen in de Java Tutorial.
code:
1
2
3
4
5
6
String value = "var1:var2:var3";
String[] values = value.split(":");

String var1 = values[0];
String var2 = values[1];
String var3 = values[2];

Als je aantal elementen variabel is, kan je ze nooit aan individele variabelen toewijzen, dus je zult dan direct met de array moeten blijven werken.

Overigens kan je eventueel ook een java.util.StringTokenizer gebruiken. Je kunt dan ongeveer dit doen:
code:
1
2
3
4
5
6
String value = "var1:var2:var3";
StringTokenizer tokenizer = new StringTokenizer(value, ":");

String var1 = tokenizer.nextToken();
String var2 = tokenizer.nextToken();
String var3 = tokenizer.nextToken();

Dit is wat meer code, maar zal waarschijnlijk wel iets sneller zijn omdat String.split reguliere expressies gebruikt. Zie voor het gebruik van deze tokenizer de API docs :) .

Blog, Stratego/XT: Program Transformation, SDF: Syntax Definition, Nix: Software Deployment


Verwijderd

Topicstarter
tnx, je duwt goed ;)

Maar helemaal lukke wil het nog niet :( Ik heb nu dit:
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
public void doGet(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException      {
      
      response.setContentType("text/html");
      PrintWriter out = response.getWriter();
      
      Cookie[] cookies = request.getCookies();
      for(int i=0; i < cookies.length; i++) {
        Cookie thisCookie = cookies[i];
        if (thisCookie.getName().equals("testCookie")) {
            dataCook = cookies[i].getValue();
        } else {
            System.out.println("No cookie found!");
        }
      }
      
      
      System.out.println("test = " + dataCook); // testen of het inlezen gelukt is
      
      StringTokenizer tokenizer = new StringTokenizer(dataCook, ":");
      String mapViewerURL = tokenizer.nextToken();
      String dataSource = tokenizer.nextToken();
      String title = tokenizer.nextToken();
      String baseMap = tokenizer.nextToken();
      double cx = Double.valueOf(tokenizer.nextToken()).doubleValue();
      double cy = Double.valueOf(tokenizer.nextToken()).doubleValue();
      double size = Double.valueOf(tokenizer.nextToken()).doubleValue();
      double boxLLX = Double.valueOf(tokenizer.nextToken()).doubleValue();
      double boxLLY = Double.valueOf(tokenizer.nextToken()).doubleValue();
      double boxURX = Double.valueOf(tokenizer.nextToken()).doubleValue();
      double boxURY = Double.valueOf(tokenizer.nextToken()).doubleValue();

Maar om een of andere reden wil het inlezen van de waarde van het cookie niet lukken. Als ik het servlet run, dan stopt ie ermee met een NoSuchElementException bij het tokenizen van de eerste string.

Waaom wordt het cookie nu niet uitgelezen?

edit:

inhoud van het cookie:
code:
1
2
3
4
5
6
7
8
9
testCookie
http://ngdwpc3:8888/mapviewer/omserver:ngdwpc3:lkuh:ljl
~~local~~/C:\JavaFiles\
0
2563432544
29491961
2563432544
29491961
*

  • AQuaTiX
  • Registratie: Augustus 2001
  • Laatst online: 21-07 16:59
Misschien is het handig als je eerst dataCook definieert als String? Die komt nu ergens uit het niets vallen. Daardoor verslikt ie zich dan ook in het aanmaken van de StringTokenizer, wat resulteert in de NoSuchElementException. Succes verder :)

Verwijderd

Topicstarter
Op vrijdag 24 mei 2002 10:21 schreef AQuaTiX het volgende:
Misschien is het handig als je eerst dataCook definieert als String? Die komt nu ergens uit het niets vallen. Daardoor verslikt ie zich dan ook in het aanmaken van de StringTokenizer, wat resulteert in de NoSuchElementException. Succes verder :)
excusez, dataCook staat al gedefinieerd als string:
code:
1
2
3
4
5
6
7
8
9
10
public class MapViewer extends HttpServlet {
    
    String mapRequest = "";
    String mapResponse = "";
    String imgURL = "";
    double imgCX = 0;
    double imgCY = 0;
    int width = 400;
    int height = 360;
    String dataCook = "";

Verwijderd

Topicstarter
:( :( help help, het werkt nogsteeds niet :( :(

bij nader inzien blijkt ie dus het hele cookie niet eens te vinden :(

Verwijderd

Topicstarter
Hmmz, ooit gaat het wel werken, hoop ik... Een update:

Ik heb de code aangepast (lees "overgetikt uit een boek": Core Servlets and JSP):
code:
1
2
3
4
5
6
7
8
9
public static String getCookieValue(Cookie[] cookies, String cookieName, String defaultValue) {
      
      for(int i=0; i<cookies.length; i++) {
        Cookie cookie = cookies[i];
        if (cookieName.equals(cookie.getName()));
        return(cookie.getValue());
      }
      return(defaultValue);
    }

en even verder:
code:
1
2
3
4
Cookie[] cookies = request.getCookies();
      dataCook = MapViewer.getCookieValue(cookies, "testCookie", "default");
         
      System.out.println("testValue = " + dataCook);

En als output zie ik dus "testValue = default".
Das dus niet het gewenste resultaat.

Als ik invul (dus testCookie door iets anders vervangen) dat ie naar een ander cookie (dat ook bestaat) moet zoeken, krijg ik ook "default" als resultaat terug. Hieruit maak ik op dat hij dus niet goed zoekt.

Alle Strings zijn gedefinieert (de zooi compiled gewoon).

Iemand een idee waaron het niet wil?

Verwijderd

Topicstarter
:( :( kick :( :(

niemand een idee?

Verwijderd

ik heb het gevoel dat de cookie met de naam testCookie niet bestaat. (let op hoofdlettergevoeligheid)

zo maak je bijv. een cookie aan:
code:
1
2
3
Cookie userCookie = new Cookie("testCookie","waarde");
userCookie.setMaxAge(60*60*24*365); // 1 jaar
response.addCookie(userCookie);

en anders moet je nog even met Cookie.setDomain(String domainPattern) en Cookie.setPath(String path) gaan stoeien... (blz. 185)

good luck !
Pagina: 1