Avatar billede trp79 Nybegynder
08. september 2005 - 10:15 Der er 16 kommentarer og
1 løsning

Problemer med forward

Hejsa
Jeg har lige problemer.
Hvis en bruger indtaster rigtig brugernavn/password kombination på index.jsp, da forwardes han til legaliseret/oversigt.jsp:
        String handling = request.getParameter("handling");
        if(handling==null)
        {
          login.tjekLogin();
          if (login.isLoggetInd()){
            if(request.getParameter("saet_cookie")!=null){
              response.addCookie(new Cookie("brugernavn", request.getParameter("brugernavn")));
              response.addCookie(new Cookie("password", request.getParameter("password")));
              }
          %><jsp:forward page="legaliseret/oversigt.jsp"/><%
          }
        }

Men denne side vises bare ikke som den skal(billeder, css kan ikke indlæses), men det gør den hvis man efter login taster den direkte url på siden.

Altså når er blevet forwardet med ovenstående kode forbliver denne url i adressebaren: http://localhost:8080/Banankasse/index.jsp og oversigt.jsp tekst vises, men ressourcer (css, billeder) mangler. Indtaster man derimod nu http://localhost:8080/Banankasse/legaliseret/oversigt.jsp så vises det som det skal.

Håber nogen kan hjælpe - jeg fatter det ikke :(

Mvh
Torben
Avatar billede arne_v Ekspert
08. september 2005 - 10:20 #1
forward er server side i modsætning til sendredirect som er client side

og når URL ikke ændrer sig og current og den forwardede side ligger
i forskelligt "dir" så kan man meget nemt få problemer med relativer stier

/Banankasse/index.jsp

forward /Banakasse/legaliseret/oversigt.jsp

ref til "foobar.css"

betyder /Banankasse/foobar.css ikke /Banankasse/legaliseret/foobar.css
Avatar billede arne_v Ekspert
08. september 2005 - 10:21 #2
jeg tror at mange laver et CSS dir

og bruger /css/foobar.css

og så outputter den med URLrewrite for at få web app navnet sat ind
Avatar billede trp79 Nybegynder
08. september 2005 - 11:05 #3
Hej Arne
Tak for forklaringen, nu kan jeg godt se problemstillingen, men jeg er dog ikke lige med på løsningnen - URLrewrite. Kan jeg få dig til at forklare lidt mere om, hvordan jeg gør det?
Avatar billede arne_v Ekspert
08. september 2005 - 11:20 #4
<%=response.encodeURL("/css/foobar.css")%>
Avatar billede trp79 Nybegynder
08. september 2005 - 11:36 #5
nu har jeg sat dit eks ind, men jeg syntes ikke det giver nogen forskel:

<jsp:useBean id="login" class="ausumnet.Login" scope="session"/>
<% if(!login.isLoggetInd()) response.sendRedirect("../index.jsp");%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" sml:lang="da" lang="da">
  <head>
    <title>Oversigt</title>
    <link rel="stylesheet" type="text/css"
    href="<%=response.encodeURL("../css/common.css")%>" media="screen" />
  </head>
  <body>
    <jsp:include page="menu.jsp"/>
    <jsp:include page="banner.jsp"/>
    <div id="indhold">
      <h3 class="obs advarsel">Oversigt</h3>
      Velkommen <jsp:getProperty name="login" property="brugernavn"/>.<br/>
   
      <br/>
    </div>
  </body>
</html>

Jeg går ud fra at det var sådan du mente?
Avatar billede arne_v Ekspert
08. september 2005 - 11:49 #6
nu ville jeg ikke have ..

men prøv og vælg view source i browseren og se hvordan det ser ud

og sammenhold med current URL og se om det passer
Avatar billede trp79 Nybegynder
08. september 2005 - 12:42 #7
Jeg syntes ikke rigigt jeg får nogen effekt :(

filplaceringen er:
css/common.css
legaliseret/oversigt.jsp
index.jsp

1.forsøg
Hvis legaliseret/oversigt.jsp indeholder <%=response.encodeURL("/css/common.css")%>:
giver det dette i vis kilde: "/css/common.css" når jeg rammer legaliseret/oversigt.jsp og der står index.jsp i adressebaren.

2.forsøg
Hvis legaliseret/oversigt.jsp indeholder <%=response.encodeURL("../css/common.css")%>:
giver det dette i vis kilde: "../css/common.css" når jeg rammer legaliseret/oversigt.jsp og der står index.jsp i adressebaren.

3.forsøg
Hvis legaliseret/oversigt.jsp indeholder "/css/common.css":
giver det dette i vis kilde: "/css/common.css" når jeg rammer legaliseret/oversigt.jsp og der står index.jsp i adressebaren.

4.forsøg
Hvis legaliseret/oversigt.jsp indeholder "../css/common.css":
giver det dette i vis kilde: "../css/common.css" når jeg rammer legaliseret/oversigt.jsp og der står index.jsp i adressebaren.

Som jeg ser det, så burde 2. da at virke, da current ligger et niveau dybere end css biblioteket. Og jeg syntes heller ikke at kunne se nogen forskel når response.encodeURL tages i brug.
Avatar billede arne_v Ekspert
08. september 2005 - 12:46 #8
det er ikk epænt men prøv lige

"/Banankasse/css/common.css"
Avatar billede arne_v Ekspert
08. september 2005 - 12:46 #9
hvis det virker så pynter vi derfra
Avatar billede trp79 Nybegynder
08. september 2005 - 13:00 #10
Jeps <%=response.encodeURL("/Banankasse/css/common.css")%> virker :)
Avatar billede arne_v Ekspert
08. september 2005 - 13:05 #11
så skal du bare lige have erstattet den hardcoded med en som dynamisk finder
web app navn (context navn)
Avatar billede trp79 Nybegynder
08. september 2005 - 13:34 #12
ville metoden der være at kigge på contextpath og "skære" den til, for at få fat i navnet på applikationen?
Avatar billede trp79 Nybegynder
08. september 2005 - 15:22 #13
Nå, men ellers laver jeg bare navnet som en <context-param> i web.xml, så burde det i hvert fald spille :)

Lige en sidste ting. Hvis jeg nu brugte sendredirect, så burde det vel også kunne virke?

Tak for hjælpen Arne, det er vist ved at være svar tid.
Avatar billede arne_v Ekspert
08. september 2005 - 18:53 #14
request.getContextPath() + "/css/common.css"

skal nok ikke engang skæres til
Avatar billede arne_v Ekspert
08. september 2005 - 18:54 #15
med sendRedirect er alt nemmere fordi så matcher side URL med JSP/servlet der eksekveres
Avatar billede arne_v Ekspert
08. september 2005 - 18:54 #16
og et svar
Avatar billede trp79 Nybegynder
09. september 2005 - 07:42 #17
Tak for det :)
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
Kurser inden for grundlæggende programmering

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