/ Forside / Teknologi / Udvikling / Java / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
Java
#NavnPoint
molokyle 3688
Klaudi 855
strarup 740
Forvirret 660
gøgeungen 500
Teil 373
Stouenberg 360
vnc 360
pmbruun 341
10  mccracken 320
iriterende problem
Fra : dejan


Dato : 14-12-01 09:18

Hej igen,
jeg bruger System.getProperties().put("key", "keyValue") for at "dele" nogle
objekter mellem mine servlets. Men på et tidspunkt vil jeg gerne have at
mine servlets "glemmer" dette (dvs. når jeg kalder
System.getProperties().get(key") så skal det returnere "null"). Jeg har
prøvet at bruge System.getProperties().remove("key") men uden held. De andre
servlets "modtager" ikke null.
Hvad skal jeg gøre for at nulstille ovenstående?
Jeg bruger ellers Tomcat 4

mvh Dejan




 
 
Dennis Thrysøe (14-12-2001)
Kommentar
Fra : Dennis Thrysøe


Dato : 14-12-01 11:15

dejan wrote:

> Hej igen,
> jeg bruger System.getProperties().put("key", "keyValue") for at "dele" nogle
> objekter mellem mine servlets.


Hvis det er servlets i samme web applikation burde du nok bruge
atributter på ServletContext i stedet.

-dennis





dejan (14-12-2001)
Kommentar
Fra : dejan


Dato : 14-12-01 23:54


"Dennis Thrysøe" <dt@netnord.dk> wrote in message
news:3C19D11B.1040907@netnord.dk...

> Hvis det er servlets i samme web applikation burde du nok bruge
> atributter på ServletContext i stedet.

Jo, jeg ved det godt, men jeg valgte alligevel at bruge System properties da
det så ret nemt ud, men måske bliver jeg nød til at ændre det hele nu. Surt.

mvh Dejan

> -dennis
>
>
>
>



Dennis Thrysøe (16-12-2001)
Kommentar
Fra : Dennis Thrysøe


Dato : 16-12-01 00:53

dejan wrote:

> "Dennis Thrysøe" <dt@netnord.dk> wrote in message
> news:3C19D11B.1040907@netnord.dk...
>
>
>>Hvis det er servlets i samme web applikation burde du nok bruge
>>atributter på ServletContext i stedet.
>>
>
> Jo, jeg ved det godt, men jeg valgte alligevel at bruge System properties da
> det så ret nemt ud, men måske bliver jeg nød til at ændre det hele nu. Surt.

Jeg opfatter da Context attributter (eller attributter i 'application
scope') som mindst ligeså nemme at bruge. Plus, at der ikke er adgang
(læse/skrive) for 'uvedkommende' kode.

-dennis


dejan (15-12-2001)
Kommentar
Fra : dejan


Dato : 15-12-01 03:19


"Dennis Thrysøe" <dt@netnord.dk> wrote in message
news:3C19D11B.1040907@netnord.dk...

> Hvis det er servlets i samme web applikation burde du nok bruge
> atributter på ServletContext i stedet.

Jeg har fundet kilden til mit problem. Det er nemlig fordi jeg i en af mine
servlets har lavet en constructor hvor jeg af en eller anden grund
deklarerede min bolske variabel bol=false. Senere i doGet metoden tjekker
jeg relevante nøgler i System Properties og hvis de var ok så sættes denne
variabel til "true". Jeg regnede vist med at variablen vil få værdi "false"
som udgangspunkt hver gang jeg kalder min servlet (som så skulle "kigge"
forbi constructoren). Men dette er vist ikke tilfælde. Da jeg flyttede denne
"bol=false" i doGet metoden så var alt ok. Problemet er bare at jeg ikke
aner hvorfor systemet ikke kigger i constructor hver gang servlet startes.
Jeg ved faktisk at det gør, da jeg har konstrueret flere objekter i
konstruktøren, som så senere bruges i doGet metoden. Hvis konstruktøren ikke
blev kaldt så ville disse objekter ikke fungere som de skulle. Men hvorfor
får min "bol" variabel ikke "false" hver gang servleten kaldes....mystisk.
Godt nok har jeg flere servlets som hver for sig har denne variabel, men da
den er deklareret som "private" så skulle det ikke volde nogle problemer.
Bruger man overhovedet konstruktør i tilfælde af servlets?

mvh Dejan


> -dennis
>
>
>
>



Dennis Thrysøe (16-12-2001)
Kommentar
Fra : Dennis Thrysøe


Dato : 16-12-01 00:58

dejan wrote:

> "Dennis Thrysøe" <dt@netnord.dk> wrote in message
> news:3C19D11B.1040907@netnord.dk...
>
>
>>Hvis det er servlets i samme web applikation burde du nok bruge
>>atributter på ServletContext i stedet.
>>
>
> Jeg har fundet kilden til mit problem. Det er nemlig fordi jeg i en af mine
> servlets har lavet en constructor hvor jeg af en eller anden grund
> deklarerede min bolske variabel bol=false. Senere i doGet metoden tjekker
> jeg relevante nøgler i System Properties og hvis de var ok så sættes denne
> variabel til "true". Jeg regnede vist med at variablen vil få værdi "false"
> som udgangspunkt hver gang jeg kalder min servlet (som så skulle "kigge"
> forbi constructoren). Men dette er vist ikke tilfælde. Da jeg flyttede denne
> "bol=false" i doGet metoden så var alt ok. Problemet er bare at jeg ikke
> aner hvorfor systemet ikke kigger i constructor hver gang servlet startes.
> Jeg ved faktisk at det gør, da jeg har konstrueret flere objekter i
> konstruktøren, som så senere bruges i doGet metoden. Hvis konstruktøren ikke
> blev kaldt så ville disse objekter ikke fungere som de skulle. Men hvorfor
> får min "bol" variabel ikke "false" hver gang servleten kaldes....mystisk.
> Godt nok har jeg flere servlets som hver for sig har denne variabel, men da
> den er deklareret som "private" så skulle det ikke volde nogle problemer.
> Bruger man overhovedet konstruktør i tilfælde af servlets?
>



Servlet specifikationen siger, at en Servlet kan blive genbrugt af flere requests

(alt andet ville også koste unødig performance). Det betyder at constructoren kun

kaldes en gang i en Servlet's livsforløb.


Derfor SKAL Servlet's være trådsikre. ELler i det mindste stateless i
forhold til requests. Man kan aldrig vide hvilket request der lige har
være på besøg, og hvilken tilstand andre tråde evt. er i på et givet
tidspunkt.

Typisk bruger man slet ikke constructoren i Servlet's til noget
fornuftigt. Man bruger derimod init() metoden til at initialisere
Servlet'en og evt. eksterne resourcer som er fælles for alle requests.


-dennis


dejan (15-12-2001)
Kommentar
Fra : dejan


Dato : 15-12-01 03:24

Ja, og en ting til: hvad er fordel ved at bruge ServletContext (og hermed
getAttribute(*), removeAttribute(*) og setAttribute(*,*) metoder) frem for
System properties (og System.getProperties().put(*,*),
System.getProperties().remove(*) og System.getProperties().get(*) metoder)?

mvh Dejan





Dennis Thrysøe (16-12-2001)
Kommentar
Fra : Dennis Thrysøe


Dato : 16-12-01 01:02

dejan wrote:

> Ja, og en ting til: hvad er fordel ved at bruge ServletContext (og hermed
> getAttribute(*), removeAttribute(*) og setAttribute(*,*) metoder) frem for
> System properties (og System.getProperties().put(*,*),
> System.getProperties().remove(*) og System.getProperties().get(*) metoder)?

Den største fordel er, at kun relaterede Servlet's i samme Context
(samme web applikation) kan se og ændre dem. Man kan aldrig gardere sig
imod, at web applikationen kommer til at køre i en JVM med andre
applikationer af forskellig art.

Derudover er det altid ved hånden, og er inkluderet i Servlet
specifikationen af præcis denne årsag.

Faktisk tror jeg at specifikationen forbyder, eller kraftigt fraråder,
at bruge tingsom System properties. Hvis applikations serverne skal have
en chance for at implementere f.eks. clustering, bliver de nødt til at
kunne tilbyde samme omgivelser for Servlet's på alle nodes i clusteret.
Det kan de ikke med System properties.

-dennis


dejan (18-12-2001)
Kommentar
Fra : dejan


Dato : 18-12-01 09:12

Takker Dennis, det var et stort hjælp.

mvh Dejan

"Dennis Thrysøe" <dt@netnord.dk> wrote in message
news:3C1BE461.8050203@netnord.dk...
> dejan wrote:
>
> > Ja, og en ting til: hvad er fordel ved at bruge ServletContext (og
hermed
> > getAttribute(*), removeAttribute(*) og setAttribute(*,*) metoder) frem
for
> > System properties (og System.getProperties().put(*,*),
> > System.getProperties().remove(*) og System.getProperties().get(*)
metoder)?
>
> Den største fordel er, at kun relaterede Servlet's i samme Context
> (samme web applikation) kan se og ændre dem. Man kan aldrig gardere sig
> imod, at web applikationen kommer til at køre i en JVM med andre
> applikationer af forskellig art.
>
> Derudover er det altid ved hånden, og er inkluderet i Servlet
> specifikationen af præcis denne årsag.
>
> Faktisk tror jeg at specifikationen forbyder, eller kraftigt fraråder,
> at bruge tingsom System properties. Hvis applikations serverne skal have
> en chance for at implementere f.eks. clustering, bliver de nødt til at
> kunne tilbyde samme omgivelser for Servlet's på alle nodes i clusteret.
> Det kan de ikke med System properties.
>
> -dennis
>



Søg
Reklame
Statistik
Spørgsmål : 177552
Tips : 31968
Nyheder : 719565
Indlæg : 6408849
Brugere : 218887

Månedens bedste
Årets bedste
Sidste års bedste