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

MVC – Back to the Server

Sponsored · Your Podcast. Everywhere. Effortlessly. Share. Educate. Inspire. Entertain. You do you. We'll handle the rest. →

MVC – Back to the Server

DOAG Nürnberg – 2016-11-17

Avatar for Florian Hirsch

Florian Hirsch

November 17, 2016

More Decks by Florian Hirsch

Other Decks in Programming

Transcript

  1. 53% of mobile site visits are abandoned if pages take

    longer than 3 seconds to load. Need for mobile speed (DoubleClick)
  2. A controller @Controller @Path("todo") public class TodoController { @Inject Models

    models; @Inject BindingResult br; @Inject TodoService todoService; @POST public String post(@Valid @BeanParam Todo todo) { if (br.isFailed()) { models.put("errors", br.getAllMessages()); return "todo-form.mustache"; } todoService.add(todo); return "redirect:todos"; }
  3. Redirects @RedirectScoped public class Messages implements Serializable { ... }

    public String get() { return "redirect:/todos/" + id; }
  4. Events @ApplicationScoped public class EventObserver { private static final Logger

    LOG = LoggerFactory.getLogger(EventObserver.class); public void beforeCtrl(@Observes BeforeControllerEvent e) { LOG.info("Resource {} will be handled by {}#{}", e.getUriInfo().getRequestUri(), e.getResourceInfo().getResourceClass().getName(), e.getResourceInfo().getResourceMethod().getName()); } }
  5. CSRF Protection @POST @CsrfValid public String post(@BeanParam Todo todo) {

    ... } <input type="hidden" name="{{mvc.csrf.name}}" value="{{mvc.csrf.token}}" />
  6. MvcUriBuilder @Controller public class TodoController { @GET @Path("todo/{id}") @UriRef("todo") public

    String getOne(@PathParam("id") long id) { ... } } {{ mvc.uri('todo', [4711] }} {{ mvc.uri('todo', {id: 4711} }} {{ mvc.uri('TodoController#getOne', {id: 4711} }}