Ist MVC notwendig? • weite Verbreitung actionbasierter Frameworks • JEE bietet mit JSF bisher nur ein komponentenbasiertes Framework an • … ein actionbasierter Standard fehlt Bildquelle: http://zeroturnaround.com/rebellabs/the-curious-coders-java-web-frameworks-comparison-spring-mvc-grails-vaadin-gwt-wicket-play-struts-and-jsf/
• @Controller • Entweder an einer Klasse • alle Methoden MVC-Controller Methoden • Oder an (mehreren) Methoden • hybride Klasse aus MVC-Controller Methoden und klassischen JAX-RS Ressourcen möglich Controller
• basiert auf JAX-RS • Zum Konvertieren von Exceptions in Responses • implements ExceptionMapper • Überschreiben von toResponse() zum Behandeln der Violations • Grobe/globale Art des Exception Handlings Exception Handling
Validation Exceptions • Lokale Validierung im Controller • javax.mvc.binding.BindingResult • Request Scope • isFailed() gibt Auskunft über Validierungsfehler
CSRF • Unterstützung für CSRF Token in Form fields und HTTP header. • über application-level property kann CSRF aktiviert werden • javax.mvc.security.CsrfProtection • mit javax.mvc.security.Csrf.CsrfOptions können Werte gesetzt werden: • OFF, IMPLICIT, EXPLICIT • Bei EXPLICIT muss explizit mit @CsrfValid annotiert werden
Redirects • Neue CDI Scope in JEE 8 • @RedirectScope • Lebensdauer maximal zwei Requests • RequestScope < RedirectScope < SessionScope • Controller kann weiterleiten an • eine spezifische URL • eine weitere Controller Methode • URL path prefix „redirect:“ um client redirect zu triggern
Meilenstein III • Bisher nur wenig bekannt • Support für Logging (vermutlich über Events) • Forwarding von Requests zwischen Controllern ohne Client Interaktionen (wie z.B. bei redirects) • Verzicht auf @Named Annotation für View Engines