Toon posts:

[Servlet/MVC] forward naar jsp geeft lege pagina

Pagina: 1
Acties:

Verwijderd

Topicstarter
Hi allemaal

Ik probeer de model2 architecture (MVC) te implementeren. Ik heb daarom een servlet die gemapped is om alle requests te vangen:
code:
1
2
3
4
  <servlet-mapping>
    <servlet-name>Servlet</servlet-name>
    <url-pattern>/*</url-pattern>
  </servlet-mapping>


Mijn doGet() and doPost() worden elke keer aangeroepen, dus dat gaat goed. In die methodes wil ik de user doorsturen naar de juiste pagina:
code:
1
2
3
4
5
6
7
8
9
10
11
String base="/";
String url=base+"index.jsp";
String action=request.getParameter("action");
 
if(action!=null) {
    if(action.equals("login")) {
        url=base+"login.jsp";
    }
}
RequestDispatcher requestDispatcher = getServletContext().getRequestDispatcher(url);
requestDispatcher.forward(request,response);

Dit resulteert echter in en oneindige loop, en uiteindelijk een StackOverflowError. Daarom heb ik geprobeerd te kijken of de user niet al geforward is:
code:
1
2
3
4
if(!request.getPathInfo().equals(url)) {
RequestDispatcher requestDispatcher = getServletContext().getRequestDispatcher(url);
requestDispatcher.forward(request,response);
}

Nu heb ik geen oneindige loop meer, maar krijg ik een lege pagina, met alleen:
code:
1
2
3
4
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML><HEAD>
<META http-equiv=Content-Type content="text/html; charset=windows-1252"></HEAD>
<BODY></BODY></HTML>

Als ik de servlet mapping weghaal dan tonen de jsp's zonder enig probleem. Maar dan kan ik de servlet niet gebruiken om de flow te controllen. Wat doe ik fout??

  • Gert
  • Registratie: Juni 1999
  • Laatst online: 05-12-2025
En als je hem niet naar /* mapt maar gewoon naar /servletnaam ?

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 22-02 00:22

Janoz

Moderator Devschuur®

!litemod

Je request dispatcher zorgt ervoor dat er een nieuw request wordt gedaan. De applicatie server kijkt in je web.xml en matched login.jsp. /8 matched login.jsp dus je servlet wordt aangeroepen. Dit gaat inderdaad net zo lang door totdat de stack vol zit.

Oplossing staat inderdaad hierboven.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'