Webontwikkeling 3 Examen Voorbereiding


Theorie

Database connection

Database url en schema links moeten in web.xml staan (map WEB-INF):
<web-app (...)>
    (...)
    <context-param>
        <param-name>dburl</param-name>
        <param-value>jdbc:postgresql://databanken.ucll.be:62122/2TXXX</param-value>
    </context-param>
    <context-param>
        <param-name>schema</param-name>
        <param-value>groupX_teamX</param-value>
    </context-param>
</web-app>

ServletContext leest deze parameters. Als de applicatie opgestart wordt, dan zal de AppContextListener-klasse door de annotation @WebListener in werking worden gesteld. Hij vraagt de dburl en schema op uit de ServletContext.
De AppContextListener vraagt aan de DBConnectionService om connectie te maken met de databank.
De DBConnectionService vraagt aan de DBConnectionManager om een connectie te maken met de databank. Als er nog geen DBConnectionManager-object is, dan wordt er 1 aangemaakt met info die uit de Secret-klasse wordt gehaald. Als er wel al een object aangemaakt is, dan wordt de connectie opgevraagd.

PRG (Post/Redirect/Get)

Doel: Dubbel submissions van forms / aanpassingen van data in server / etc. verwijden. Voorbeeld: Gebruiker bestelt een item op webshop, klikt op ok, refresht pagina en request wordt opnieuw gestuurd -> Gebruiker heeft per ongeluk twee keer dezelfde item besteld.


Oplossing: in plaats van rechtstreeks de webpagina terug te geven, de POST request stuurt een Redirect naar ergens waar er veilig een refresh kunt gebeuren zonder dat de originele POST request opnieuw gestuurd wordt.


PRG toepassen in Java:
Groepsopdracht Trainer app - Een gebruiker registreert een nieuwe match en de overview pagina wordt getoond. Als hij de pagina refresht moet de POST request niet opnieuw gestuurd worden.

In MatchRegister handler:
service.addMatch(match);
response.sendRedirect("Controller?command=Matches");
return "Controller?command=Matches";

In Controller:
if (!response.isCommitted()) {
    request.getRequestDispatcher(destination).forward(request, response);
}

Differences:

request.forward()
  • uitgevoerd server-side
  • data van request is nog beschikbaar
response.sendRedirect()
  • uitgevoerd client-side
  • data van request is verdwenen


Comments

Popular Posts