MVC 1.0

MVC 1.0

Talk at JavaForumNord 2015 about the current state of Java EE 8's JSR 371

34ecacd077244d141a23c46ea094df5c?s=128

Gerrit Meier

October 06, 2015
Tweet

Transcript

  1. MVC 1.0 action-based und standardisiert in JEE 8 Bennet Schulz,

    @bennetelli IT Consultant bennet.schulz@codecentric.de Gerrit Meier, @meistermeier Senior Consultant
 gerrit.meier@t-systems.com
  2. Agenda I. Motivation II. Komponenten- vs. Actionframeworks III. MVC Features

    IV. Demo V. Ausblick
  3. 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/
  4. Komponenten- vs. Actionframeworks Komponentenframeworks • wenig HTML / JS /

    CSS Kenntnisse notwendig • Vorgefertigte Frontend- Komponenten • Lifecycle und Statechanges
  5. Komponenten- vs. Actionframeworks Actionframeworks • HTML / JS / CSS

    Kenntnisse notwendig • Komponenten „per Hand“ erstellen • Request / Response basierend (weitestgehend zustandsfrei)
  6. JSR 371 MVC1.0 CDI Bean Validation JSP JAX-RS

  7. Model • halten eines Zustandes für die View • Beispiele

    • Daten des eingeloggten Nutzers • Artikel die ich kaufen möchte
  8. • Zwei Möglichkeiten in MVC 1.0: • javax.mvc.Models • CDI

    Models Model
  9. javax.mvc.Models • Map<String, Object> • Verwendung: • Wenn View Engine

    keine CDI Unterstützung hat • z.B. Thymeleaf
  10. • Wenn kein eigenes Model notwendig • Wenn Model sich

    aus mehreren Objekten zusammensetzt javax.mvc.Models
  11. CDI Models • CDI Beans als Model • @Named •

    @RequestScoped • @Inject in Controller • EL Support in JSPs
  12. View • Präsentation und Interaktion • JSP build-in • ViewEngines:

    Velocity, Thymeleaf, Mustache, Handlebars, Asciidoc, …
  13. Controller • Reagiert auf den Request • Aktualisiert das Model

    • Triggert als Response die View Generierung
  14. • @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
  15. Exception Handling • Allgemeines Exception Handling • Binding Exceptions •

    Validation Exceptions
  16. • basiert auf JAX-RS • Zum Konvertieren von Exceptions in

    Responses • implements ExceptionMapper<***Exception> • Überschreiben von toResponse() zum Behandeln der Violations • Grobe/globale Art des Exception Handlings Exception Handling
  17. Validation Exceptions • Lokale Validierung im Controller • javax.mvc.binding.BindingResult •

    Request Scope • isFailed() gibt Auskunft über Validierungsfehler
  18. Binding Exceptions • javax.mvc.binding.BindingResult • Fehler während Request Parameter ->

    Java type mapping
  19. • Cross-Site Scripting (XSS) • Cross-Site Request Forgery (CSRF) •

    Deckt A3 und A8 der OWASP Top10 2013 ab Security
  20. XSS • Escaping/Encoding um XSS Attacken zu verhindern • javax.mvc.MvcContext

    injizieren • bietet Zugriff auf Encoders für HTML und JS
  21. 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
  22. DEMO

  23. Ausblick 1.0.0-m02 1.0.0-m01 1.0.0-m03 29.09.15 31.03.2016 Q1-Q2/2017 Java EE 8

  24. Danke! Fragen?

  25. Backup

  26. Meilenstein II

  27. 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
  28. Events • basiert auf CDI Events • Observers zum Logging,

    Performance Monitoring, … • Controller: Before- & AfterControllerEvent • View: Before- & AfterProcessEvent
  29. 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
  30. Danke! Fragen?