Slide 1

Slide 1 text

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

Slide 2

Slide 2 text

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

Slide 3

Slide 3 text

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/

Slide 4

Slide 4 text

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

Slide 5

Slide 5 text

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

Slide 6

Slide 6 text

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

Slide 7

Slide 7 text

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

Slide 8

Slide 8 text

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

Slide 9

Slide 9 text

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

Slide 10

Slide 10 text

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

Slide 11

Slide 11 text

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

Slide 12

Slide 12 text

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

Slide 13

Slide 13 text

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

Slide 14

Slide 14 text

• @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

Slide 15

Slide 15 text

Exception Handling • Allgemeines Exception Handling • Binding Exceptions • Validation Exceptions

Slide 16

Slide 16 text

• 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

Slide 17

Slide 17 text

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

Slide 18

Slide 18 text

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

Slide 19

Slide 19 text

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

Slide 20

Slide 20 text

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

Slide 21

Slide 21 text

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

Slide 22

Slide 22 text

DEMO

Slide 23

Slide 23 text

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

Slide 24

Slide 24 text

Danke! Fragen?

Slide 25

Slide 25 text

Backup

Slide 26

Slide 26 text

Meilenstein II

Slide 27

Slide 27 text

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

Slide 28

Slide 28 text

Events • basiert auf CDI Events • Observers zum Logging, Performance Monitoring, … • Controller: Before- & AfterControllerEvent • View: Before- & AfterProcessEvent

Slide 29

Slide 29 text

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

Slide 30

Slide 30 text

Danke! Fragen?