Upgrade to Pro — share decks privately, control downloads, hide ads and more …

MVC 1.0

MVC 1.0

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

Gerrit Meier

October 06, 2015
Tweet

More Decks by Gerrit Meier

Other Decks in Programming

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?