Avatar billede mergelspir Seniormester
25. oktober 2017 - 15:13 Der er 4 kommentarer og
1 løsning

Er response.addCookie(cookie) afhængig af placering i .JSP?!?

Spørgsmål:
Hvor kan jeg læse, hvilke krav, der er til at tilføje en cookie?

Problemstilling:
Jeg har en .jsp, hvor jeg gerne vil placere en cookie hos klienten.
Jeg kan konstatere, at:
a) Hvis jeg skriver response.addCookie(cookie)  i de første linier kode, så bliver der oprettet en cookie.
b) Hvis jeg skriver response.addCookie(cookie)  længere nede i koden, så bliver der ikke oprettet en cookie.

(For at være helt sikker på at det er den samme cookie-kode, der afvikles, har jeg skrevet det ind i en metode. Jeg kalder metoden forskellige steder i min .jsp, men pludselig bliver cookien ikke længere oprettet. Efter bedste overbevisning foretager jeg mig ikke noget giftigt, jeg genererer blot et par hundrede liniers HTML)

Environment:
Java: 1.7.0_09
Tomcat Version: Apache Tomcat/7.0.33
Servlet Specification Version: 3.0
JSP version: 2.1

Kan man forestille sig, at serveren sende noget af HTML-koden til klienten inden jeg er færdig med at generere kode. Og når først serveren er begyndt på det, så kan jeg ikke længere oprette cookies?!?
Avatar billede arne_v Ekspert
25. oktober 2017 - 15:25 #1
Du har allerede gaettet det selv.

Cookies saettes i en HTTP header.

Formatet for HTTP protokollen er:

HTTP headers - en linie per header
en blank linie
indhold

Saa man kan ikke sende nogen HTTP headers efter at man er startet paa at sende HTML.
Avatar billede arne_v Ekspert
25. oktober 2017 - 15:29 #2
Hvis du ikke kender vaerdien foer laengere nede i JSP siden, saa skal du nok omstrukturere lidt saa du foerst har al logikken og derefter starter med at outputte.

Nogle gange er forward muligheden god til at struktuere med.
Avatar billede mergelspir Seniormester
25. oktober 2017 - 21:48 #3
Tak for svaret.
Jeg ville ikke begynde at omstrukturere, før jeg forstår problemet.
Avatar billede arne_v Ekspert
26. oktober 2017 - 02:08 #4
Nu har jeg lige laest lidt. Der er en anden mulighed, hvis du gerne vil undgaa store aendringer.

Som du har opdaget, saa kan du saette cookies lidt nede i JSP side uden at det gaar galt. Det er fordi at JSP output bufferes og at der foerst sendes noget til browser naar buffer er fuld (eller siden er faerdig). Og indtil buffer er fuld kan du godt saette cookie.

Du kan oege stoerrelsen af den buffer!

<%@ page buffer="100kb" %>

vil lade din JSP side skrive 100 KB foerend der sendes noget til browser.

(default er 8 KB)
Avatar billede arne_v Ekspert
26. oktober 2017 - 02:09 #5
Men den rigtige loesning maa stadig vaere at strukturere saa al logik er paa plads inden foerste HTML tag genereres.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester