Avatar billede kkaen Nybegynder
08. juli 2010 - 16:39 Der er 13 kommentarer og
1 løsning

Redirecte gennem javascript

Jeg har en servlet, som sendes html-til klienten. Alt virker fint i nogle tilfælde. For alt afhængig af, hvad servletten laver af beregninger, så bliver der redirected til 2 forskellige jsp-sider.

Den ene jsp-side virker fint, når der redirectes til den. Men den anden jsp-side virker ikke.
Begge jsp-sider benytter en database med opslag heri, for at kunne generere siden.

Den aktuelle kode er:
out.print("var targetURL=\"side.jsp\"\n");
out.print("window.location=targetURL\n");

Når javascript redirecter til anden jsp-side, så virker det som sagt godt. Hvis jeg kører problem-jsp-siden manuelt, så virker den fint nok (det er et større projekt, som har kørt i lang tid. Det er kun javascripten som giver fejl).

Under kørsel gennem javascript kommer fejlen:
"
HTTP Status 500 -

type Exception report

message

descriptionThe server encountered an internal error () that prevented it from fulfilling this request.

exception

org.apache.jasper.JasperException: java.lang.NullPointerException

root cause

java.lang.NullPointerException

note The full stack traces of the exception and its root causes are available in the GlassFish v3 logs.
"

Giver denne fejl nogen mening, når siden fint virker udenom javascript?
Avatar billede Slettet bruger
08. juli 2010 - 17:46 #1
NullPointerException - har næppe noget med javascript-redirection at gøre...
- udover måske, at "den anden servlet" forventer nogle parametre i URL'en ?
Avatar billede kkaen Nybegynder
09. juli 2010 - 09:20 #2
Ja, det var også sådan noget, der undrede mig. Jeg antog, at javascript sendte nogle skjulte informationer med.
Men den anden side forventer ikke nogle parametre, da det er en begyndelses-side.

Men for at gøre forvirringen endnu større, så her til morgen begynder den anden side også at producere denne null-pointer-exception, når jeg prøver at tilgå den direkte udenom javascripten. Det gjorden den ikke i går. Eller for en uge siden....
Avatar billede kkaen Nybegynder
09. juli 2010 - 09:23 #3
Hmmm, under kørsel skrives der i process-linien:
"maps.gstatic.com"

Måske er det google' server, der er problemer med?
Avatar billede kkaen Nybegynder
09. juli 2010 - 09:59 #4
Lidt søgning på google efter "maps.gstatic.com" foreslog, at browser-data slettes. Så jeg genstartede og slettede browser-data, og nu virker det tilsyneladende.
Så hvis du lige lægger et svar T4NK3R, så deler vi i døren ?
Avatar billede kkaen Nybegynder
09. juli 2010 - 10:05 #5
...selvom hvis jeg redirecter til jsp-siden gennem javascript, så virker den ikke. Men hvis jeg åbner jsp-siden direkte fra NEtbeans, så virker den godt nok...
Avatar billede Slettet bruger
09. juli 2010 - 10:29 #6
Og hvis du åbner direkte fra browseren.. ?
- to gange ?

Googlede:JasperException NullPointerException
http://forums.devshed.com/java-help-9/servlet-jasperexception-nullpointerexception-165055.html

Der er mange andre hits. Handler oftest om objecter som erklæres men aldrig instantieres...
Avatar billede kkaen Nybegynder
09. juli 2010 - 10:54 #7
Løsningen i dit link er: "1) is that you are attempting to access it across requests, which won't work.". Jeg kan ikke umiddelbart se, hvordan det kan oversættes til min applikation?

Men for lige at gøre det lidt mere kompliceret, så når der redirectes i min applikation, så giver det en HTTP Status 500 - nullpointerexception. Men hvis jeg så i samme browser-vindue går op i adresselinien, og blot trykker på return, så kommer siden fint frem...?
Avatar billede Slettet bruger
09. juli 2010 - 11:10 #8
Hm... Lyder som en opgave det ville være rigtigt dejlig af få løst på en fredag!

Ku' det evt. have noget med http-referrer at gøre ?

- eller noget (andet) header-info som får den til at køre en anden vej igennem serveletten ?
Avatar billede kkaen Nybegynder
09. juli 2010 - 12:23 #9
Jeg tror faktisk, at dit forslag om request.getHeader("referer")!=null
vil gøre en forskel. Jeg har nemlig et check på det inde i koden, for at registrere, om det er et postback. Og hvis det er det, så bliver siden ikke behandlet som ved initialization.
Så jeg skal vel sætte request.getHeader("referer")==null eller checke, om request.getHeader("referer") peger på den login-side, som man kommer fra. (?)
Avatar billede kkaen Nybegynder
09. juli 2010 - 12:34 #10
Hmm, jeg har fået den til at gå forbi det stykke kode, som genererede nullpointerexceptionen - tilsyneladende. Nu bliver siden blot ved med at load (i processlinien står der: "læst maps.gstatic.com"), og søgning på google har tidligere fortalt mig, at det kan fixes ved at slette alle browserdata. Så det må jeg gøre. Jeg er ikke sikker på, at dette er en acceptabel løsning.

Men nu må spørgsmålet sættes på standby, for nu vil min arbejdsgiver ikke have mig på arbejde mere i dag. Og så står den på ferie i ca. 2 uger. Men tak for din hjælp indtil videre :-)
Avatar billede kkaen Nybegynder
04. august 2010 - 08:18 #11
fre. d. 09. juli 2010 kl. 11:10:09| #8
Denne post løste problemet grundlæggende. Så lægger du lige et "svar", T4NK3R?
Avatar billede Slettet bruger
04. august 2010 - 08:30 #12
Kommer her.
Avatar billede kkaen Nybegynder
04. august 2010 - 11:10 #13
Efter lang tids søgen fandt jeg denne side:
http://www.oracle.com/technology/sample_code/tech/java/codesnippet/servlets/urlredirection/ServletURLRedirection.html

Og nu har jeg benyttet:
RequestDispatcher rd=request.getRequestDispatcher("/redirected.jsp");
rd.forward(request, response);

hvorefter logout ser ud til at virke. Er denne løsning en acceptabel løsning? (altså ud over den tilsyneladende virker)
Avatar billede kkaen Nybegynder
04. august 2010 - 11:11 #14
#13 var en fejl :-)
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
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

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