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
    [email protected]
    Gerrit Meier, @meistermeier
    Senior Consultant

    [email protected]

    View Slide

  2. Agenda
    I. Motivation
    II. Komponenten- vs. Actionframeworks
    III. MVC Features
    IV. Demo
    V. Ausblick

    View Slide

  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/

    View Slide

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

    View Slide

  5. Komponenten- vs.
    Actionframeworks
    Actionframeworks
    • HTML / JS / CSS Kenntnisse notwendig
    • Komponenten „per Hand“ erstellen
    • Request / Response basierend (weitestgehend
    zustandsfrei)

    View Slide

  6. JSR 371
    MVC1.0
    CDI
    Bean
    Validation
    JSP
    JAX-RS

    View Slide

  7. Model
    • halten eines Zustandes für die View
    • Beispiele
    • Daten des eingeloggten Nutzers
    • Artikel die ich kaufen möchte

    View Slide

  8. • Zwei Möglichkeiten in MVC 1.0:
    • javax.mvc.Models
    • CDI Models
    Model

    View Slide

  9. javax.mvc.Models
    • Map
    • Verwendung:
    • Wenn View Engine keine CDI Unterstützung hat
    • z.B. Thymeleaf

    View Slide

  10. • Wenn kein eigenes Model notwendig
    • Wenn Model sich aus mehreren Objekten
    zusammensetzt
    javax.mvc.Models

    View Slide

  11. CDI Models
    • CDI Beans als Model
    • @Named
    • @RequestScoped
    • @Inject in Controller
    • EL Support in JSPs

    View Slide

  12. View
    • Präsentation und Interaktion
    • JSP build-in
    • ViewEngines: Velocity, Thymeleaf, Mustache,
    Handlebars, Asciidoc, …

    View Slide

  13. Controller
    • Reagiert auf den Request
    • Aktualisiert das Model
    • Triggert als Response die View Generierung

    View Slide

  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

    View Slide

  15. Exception Handling
    • Allgemeines Exception Handling
    • Binding Exceptions
    • Validation Exceptions

    View Slide

  16. • 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

    View Slide

  17. Validation Exceptions
    • Lokale Validierung im Controller
    • javax.mvc.binding.BindingResult
    • Request Scope
    • isFailed() gibt Auskunft über Validierungsfehler

    View Slide

  18. Binding Exceptions
    • javax.mvc.binding.BindingResult
    • Fehler während Request Parameter -> Java type
    mapping

    View Slide

  19. • Cross-Site Scripting (XSS)
    • Cross-Site Request Forgery (CSRF)
    • Deckt A3 und A8 der OWASP Top10 2013 ab
    Security

    View Slide

  20. XSS
    • Escaping/Encoding um XSS Attacken zu
    verhindern
    • javax.mvc.MvcContext injizieren
    • bietet Zugriff auf Encoders für HTML und JS

    View Slide

  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

    View Slide

  22. DEMO

    View Slide

  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

    View Slide

  24. Danke!
    Fragen?

    View Slide

  25. Backup

    View Slide

  26. Meilenstein II

    View Slide

  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

    View Slide

  28. Events
    • basiert auf CDI Events
    • Observers zum Logging, Performance Monitoring,

    • Controller: Before- & AfterControllerEvent
    • View: Before- & AfterProcessEvent

    View Slide

  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

    View Slide

  30. Danke!
    Fragen?

    View Slide