MVC 1.0 - Now Even Better!

MVC 1.0 - Now Even Better!

MVC 1.0, as specified by JSR 371, may not be targeted for the upcoming Java EE 8 release, but the specification is still going on as a standalone specification. It is already possible to use the technology in a Java EE 7 environment and as Java EE 8 and 9 evolves, MVC 1.0 will be kept aligned to take advantage of the features provided by the platform.

This session will go through the fundamentals of this specification and explain the core concepts. We will show lots of code samples showing how to use the framework to build MVC 1.0 applications.

There will even be a demo of tooling support available and tips’n’tricks on how to extend the framework. After this session you will have everything you need to get started using the technology to quickly build secure, flexible, localized MVC Web applications.

B489790e1a844284d7cd1fa2cd6e021f?s=128

ivargrimstad

March 08, 2017
Tweet

Transcript

  1. 1.

    @ivar_grimstad jDays 2017 - #JSR371 MVC 1.0 - Now Even

    Better! Ivar Grimstad Principal Consultant, Cybercom Sweden
  2. 9.

    @ivar_grimstad jDays 2017 - #JSR371 January 2017 Transfer
 Ballot August

    2014 First Proposal September 2014 Approved by JCP Executive Committee September 2014 Expert Group starts discussions March 2015 EDR 1 October 2016 October 2015 EDR 2 JavaOne Past Activities
  3. 10.

    @ivar_grimstad jDays 2017 - #JSR371 Current Activities Transfer approved by

    the Executive Committee
 Thanks! Finalize Transfer
 Oracle Legal is working on the final details New Infrastructure Setup
 Started Licensing
 Investigating
  4. 11.

    @ivar_grimstad jDays 2017 - #JSR371 Future Activities Formally move infrastructure

    from java.net 
 Bring in Christian Kaltepoth as co spec-lead
 Revise the Schedule
 Adopt-a-JSR

  5. 13.

    @ivar_grimstad jDays 2017 - #JSR371 Infrastructure Setup Changes Code
 java.net

    -> GitHub (https://github.com/mvc-spec) Issue Tracker
 java.net -> GitHub (https://github.com/mvc-spec/mvc-spec/issues) Mailing Lists
 java.net -> Google Groups (jsr371-users@googlegroups.com) Web Site
 java.net -> GitHub Pages (http://www.mvc-spec.org/)
  6. 16.

    @ivar_grimstad jDays 2017 - #JSR371 MVC 1.0 Talks DEVNEXUS (http://devnexus.com/)


    Atlanta, USA - February 22-24 jDays (http://www.jdays.se/)
 Gothenburg, Sweden - Mars 7-8 JavaLand (https://www.javaland.eu/)
 Brühl, Germany - Mars 28-30 Developer Week (http://www.developer-week.de/)
 Nürnberg, Germany - June 26-29
  7. 32.

    @ivar_grimstad jDays 2017 - #JSR371 View @Controller @Path(“hello”) public class

    HelloController { @GET public String hello() { return “hello.jsp”; } }
  8. 33.

    @ivar_grimstad jDays 2017 - #JSR371 View @Controller @Path(“hello”) public class

    HelloController { @GET public Viewable hello() { return new Viewable(“hello.jsp”); } }
  9. 34.

    @ivar_grimstad jDays 2017 - #JSR371 View @Controller @Path(“hello”) public class

    HelloController { @GET public Response hello() { return Response.status(OK).entity(“hello.jsp”).build(); } }
  10. 35.

    @ivar_grimstad jDays 2017 - #JSR371 View @Controller @Path(“hello”) public class

    HelloController { @View(“hello.jsp”) @GET public void hello() { } }
  11. 38.

    @ivar_grimstad jDays 2017 - #JSR371 Model @Named(“greeting”) @RequestScoped public class

    Greeting { private String message; public void setMessage(String message) { this.message = message; } public void getMessage() { return message; } }
  12. 40.

    @ivar_grimstad jDays 2017 - #JSR371 Model @View(“hello.jsp”) @Controller @Path(“hello”) public

    class HelloController { @Inject private Greeting greeting; @GET public void hello() { greeting.setMessage(“Hello Atlanta!”); } }
  13. 41.

    @ivar_grimstad jDays 2017 - #JSR371 Model <%@page contentType=“text/html" pageEncoding="UTF-8"%> <!DOCTYPE

    html> <html> <head> <title>MVC 1.0 Hello Demo</title> </head> <body> <h1>Hello ${greeting.message}</h1> </body> </html>
  14. 43.

    @ivar_grimstad jDays 2017 - #JSR371 Model @View(“hello.jsp”) @Controller @Path(“hello”) public

    class HelloController { @Inject private Models model; @GET public void hello() { model.put(“message”, “Hello Atlanta!”); } }
  15. 44.

    @ivar_grimstad jDays 2017 - #JSR371 Model <%@page contentType=“text/html" pageEncoding="UTF-8"%> <!DOCTYPE

    html> <html> <head> <title>MVC 1.0 Hello Demo</title> </head> <body> <h1>Hello ${message}</h1> </body> </html>
  16. 46.

    @ivar_grimstad jDays 2017 - #JSR371 @Controller @Path("form") public class FormController

    { @POST public Response formPost(@Valid @BeanParam FormDataBean f) { return Response.status(OK).entity(“data.jsp”).build(); } } Validation ConstraintValidationException @Min, @NotNull etc.
  17. 47.

    @ivar_grimstad jDays 2017 - #JSR371 Validation public class FormViolationMapper implements

    ExceptionMapper<ConstraintViolationException> { public Response toResponse(ConstraintViolationException e) { Set<ConstraintViolation<?>> s= e.getConstraintViolations(); // process violations ... return Response.status(BAD_REQUEST) .entity(“error.jsp”).build(); } }
  18. 48.

    @ivar_grimstad jDays 2017 - #JSR371 @Controller @Path("form") public class FormController

    { @Inject private BindingResult br; @POST public Response formPost(@Valid @BeanParam FormDataBean f) { if (br.isFailed()) { return Response.status(BAD_REQUEST) .entity(“error.jsp”).build(); } return Response.status(OK).entity(“data.jsp”).build(); } } Validation Allows for MVC Error Handling
  19. 52.

    @ivar_grimstad jDays 2017 - #JSR371 ViewEngine public interface ViewEngine {

    boolean supports(String view); void processView(ViewEngineContext context) throws ViewEngineException; }
  20. 55.

    @ivar_grimstad jDays 2017 - #JSR371 Controller Model View Request BeforeControllerEvent

    AfterControllerEvent BeforeProcessViewEvent AfterProcessViewEvent ControllerRedirectEvent
  21. 56.

    @ivar_grimstad jDays 2017 - #JSR371 Events Example @ApplicationScoped public class

    EventObserver { void onBeforeController(@Observes BeforeControllerEvent e) { println("URI: " + e.getUriInfo().getRequestURI()); } void onAfterController(@Observes AfterControllerEvent e) { println("Controller: " + e.getResourceInfo().getResourceMethod()); } }
  22. 58.

    @ivar_grimstad jDays 2017 - #JSR371 Cross Site Request Forgery @Controller

    @Path(“csrf”) public class HelloController { @CsrfValid @POST public Response post(@FormParam(“greeting") String greet { } }
  23. 59.

    @ivar_grimstad jDays 2017 - #JSR371 Cross Site Request Forgery <%@page

    contentType=“text/html" pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <head> <title>MVC 1.0 Hello Demo</title> </head> <body> <form action="csrf" method="post" accept-charset="utf-8"> <input type="submit" value="Click here"/> <input type="hidden" name="${mvc.csrf.name}" value="${mvc.csrf.token}"/> </form> </body> </html>
  24. 61.

    @ivar_grimstad jDays 2017 - #JSR371 Controller @Controller @Path(“hello”) public class

    HelloController { @Inject private MvcContext mvc; @GET public String get() { Locale locale = mvc.getLocale(); } }
  25. 64.