127
The Modern Java Web Developer Bootcamp Matt Raible http://raibledesigns.com Photos by The Amazing Trish McGinity

The Modern Java Web Developer Bootcamp - Devoxx 2013

Embed Size (px)

DESCRIPTION

HTML5, CSS3, JavaScript, jQuery, Angular JS, Bootstrap, Mobile, CoffeeScript, GitHub, functional programming, Page Speed, Apache, JSON with Jackson, caching, REST, Security, load testing, profiling, Wro4j, Heroku, Cloudbees, AWS. These are just some of the buzzwords that a Java web developer hears on a daily basis. This talk is designed to expose you to a plethora of technologies that you might've heard about, but haven't learned yet. We'll concentrate on the most important web developer skills, as well as UI tips and tricks to make you a better front-end engineer. Some of the most valuable engineers these days have front-end JS/CSS skills, as well as backend Java skills. This presentation is from the University session I delivered at Devoxx 2013, in Antwerp. http://devoxx.be/dv13-matt-raible.html?presId=3648

Citation preview

Page 1: The Modern Java Web Developer Bootcamp - Devoxx 2013

The Modern Java Web Developer BootcampMatt Raible • http://raibledesigns.com

Photos by The Amazing Trish McGinity

Page 2: The Modern Java Web Developer Bootcamp - Devoxx 2013

Blogger on raibledesigns.com

Founder of AppFuse

Father, Skier, Cyclist

Web Framework Connoisseur

Who is Matt Raible?

Bus Lover

Page 3: The Modern Java Web Developer Bootcamp - Devoxx 2013

@mraible#DV13 @mraible#DV13

How about You?Have you developed a Struts 1 application? Used PHP?

Have you every written CSS from scratch?

Why do you hate JavaScript?

What’s your favorite JavaScript framework?

What do you want to learn from this talk?

Page 4: The Modern Java Web Developer Bootcamp - Devoxx 2013

@mraible#DV13 @mraible#DV13

Topic InspirationInspired by Ben Evan’s and Martijn Verburg’s The Well-Grounded Java Developer

Developing with Java 7

Vital techniques

Polyglot programming on the JVM

Crafting the polyglot project

Page 5: The Modern Java Web Developer Bootcamp - Devoxx 2013

Purpose

Page 6: The Modern Java Web Developer Bootcamp - Devoxx 2013

@mraible#DV13 @mraible#DV13

The Modern Java Web Developer

JVM

Page 7: The Modern Java Web Developer Bootcamp - Devoxx 2013

@mraible#DV13 @mraible#DV13

The Modern JVM Web DeveloperStarts with Fast Hardware

Uses IntelliJ IDEA

Leverages HTML5, JavaScript, and CSS3

Creates High Performance Web Sites

For Mobile Devices, in the Cloud

And cares about Security

Page 8: The Modern Java Web Developer Bootcamp - Devoxx 2013

@mraible#DV13 @mraible#DV13

Fast Hardware

Page 9: The Modern Java Web Developer Bootcamp - Devoxx 2013

@mraible#DV13 @mraible#DV13

IntelliJ IDEA

Page 10: The Modern Java Web Developer Bootcamp - Devoxx 2013

@mraible#DV13 @mraible#DV13

Supports Emmet (aka Zen Coding)div#page>div.logo+ul#navigation>li*5>a

<div id=page> ! <div class=logo></div> ! <ul id=navigation> ! <li><a href=></a></li> ! <li><a href=></a></li> ! <li><a href=></a></li> ! <li><a href=></a></li> ! <li><a href=></a></li> ! </ul> !</div>

Page 11: The Modern Java Web Developer Bootcamp - Devoxx 2013

@mraible#DV13 @mraible#DV13

Java 7 and 8Strings in switch statements

Diamond Syntax

Try with resources

Improved exception handling with multi-catch

NIO.2: Path, Files and Asynchronous I/OPath path = FileSystems.getDefault().getPath(logs, access.log); !BufferReader reader = Files.newBufferedReader(path, StandardCharsets.UTF_8);

Page 12: The Modern Java Web Developer Bootcamp - Devoxx 2013

@mraible#DV13 @mraible#DV13

Java 7 and 8Parallel Collections

JSR 310 Date and Time API

Functional Interfaces with default method

Lambda Expressions (a.k.a. Closures)

!

Nashorn JavaScript Engine

// sort a list by lastName !List<Person> persons = ...; !persons.sort((p1, p2) -> ! p1.getLastName().compareTo(p2.getLastName()));

Page 13: The Modern Java Web Developer Bootcamp - Devoxx 2013

Java 8 Parallelism

Page 14: The Modern Java Web Developer Bootcamp - Devoxx 2013

@mraible#DV13 @mraible#DV13

%s/Hibernate/Spring Data

Servlet 3

@WebServlet, @WebFilter, @WebListener

Asynchronous Servlets

WebApplicationInitializer (to eliminate web.xml)

REST and Functional Programming

The Modern JVM Web Developer is aware of...

Page 15: The Modern Java Web Developer Bootcamp - Devoxx 2013

@mraible#DV13 @mraible#DV13

Reactive Applications“Users expect millisecond response times and 100% uptime. Data

needs are expanding into the petabytes.”

The Reactive Manifesto

Page 16: The Modern Java Web Developer Bootcamp - Devoxx 2013

@mraible#DV13 @mraible#DV13

Key Building BlocksObservable Models

Event Streams

Stateful Clients

Page 17: The Modern Java Web Developer Bootcamp - Devoxx 2013

@mraible#dv13javaweb$ @mraible#DV13

Avatar? avatar.java.net

Page 18: The Modern Java Web Developer Bootcamp - Devoxx 2013

@mraible#DV13 @mraible#DV13

Scala“Scala is like the dragon in Avatar. It will try to kill you, but if you master

it, you can fly great distances with it and have a wonderful time.”

Venkat Subramaniam

Page 19: The Modern Java Web Developer Bootcamp - Devoxx 2013

Scala Basicsdef starts a method

variables are started with var or val

variables are defined with name:type

semicolons are not required

Page 20: The Modern Java Web Developer Bootcamp - Devoxx 2013

@mraible#dv13javaweb$ @mraible#DV13

public class Car { ! private final int year; ! private int miles; ! ! public int getYear() { return year; } ! public int getMiles() { return miles; } ! public void setMiles(int theMiles) { miles = theMiles; } ! ! public Car(int theYear, int theMiles) { ! year = theYear; ! miles = theMiles; ! } !}

Scala vs. Java

Page 21: The Modern Java Web Developer Bootcamp - Devoxx 2013

@mraible#dv13javaweb$ @mraible#DV13

Scala vs. Java

class Car(val year: Int, var miles: Int)

Page 22: The Modern Java Web Developer Bootcamp - Devoxx 2013

@mraible#dv13javaweb$ @mraible#DV13

What about Groovy?

Page 23: The Modern Java Web Developer Bootcamp - Devoxx 2013

@mraible#dv13javaweb$ @mraible#DV13

Groovy is still hot...

Page 24: The Modern Java Web Developer Bootcamp - Devoxx 2013

@mraible#dv13javaweb$ @mraible#DV13

But sliding to Scala

Page 25: The Modern Java Web Developer Bootcamp - Devoxx 2013

@mraible#dv13javaweb$ @mraible#DV13

Or not?

* November 12, 2013 12:00

Page 26: The Modern Java Web Developer Bootcamp - Devoxx 2013

@mraible#DV13 @mraible#DV13

Groovy and Scala at Devoxx

Sessions

0

0.75

1.5

2.25

3

Scala Groovy

3

2

Page 27: The Modern Java Web Developer Bootcamp - Devoxx 2013

@mraible#DV13 @mraible#DV13

Learning ScalaScala for the Impatient - Cay Horstmann

Programming in Scala, 2nd Edition - Martin Odersky, Lex Spoon, and Bill Venners

Functional Programming Principles in Scala

September 16th 2013 (7 weeks long)

Signup at https://www.coursera.org/course/progfun

Page 28: The Modern Java Web Developer Bootcamp - Devoxx 2013

@mraible#dv13javaweb$ @mraible#DV13

The Java Language

“Java remains – in spite of the fragmented programming language landscape – a viable, growing language.”

http://redmonk.com/sogrady/2012/02/08/language-rankings-2-2012/

Page 30: The Modern Java Web Developer Bootcamp - Devoxx 2013

@mraible#DV13 @mraible#DV13

The Services Developer

Page 31: The Modern Java Web Developer Bootcamp - Devoxx 2013

@mraible#DV13 @mraible#DV13

Document Your API

Page 32: The Modern Java Web Developer Bootcamp - Devoxx 2013

@mraible#DV13 @mraible#DV13

Document Your API

Page 33: The Modern Java Web Developer Bootcamp - Devoxx 2013

@mraible#DV13 @mraible#DV13

Fast APIs

Dropwizard

Page 34: The Modern Java Web Developer Bootcamp - Devoxx 2013

@mraible#dv13javaweb$ @mraible#DV13

Jobs on dice.comJVM API Frameworks, November 2013

0

150

300

450

600

Grails Play JAX-RS Spring MVC

564

8430

172

Page 35: The Modern Java Web Developer Bootcamp - Devoxx 2013

@mraible#dv13javaweb$ @mraible#DV13

SkillsJVM API Frameworks, November 2013

0

5,000

10,000

15,000

20,000

Grails Play JAX-RS Spring MVC

19228

41325784

18128

Page 36: The Modern Java Web Developer Bootcamp - Devoxx 2013

@mraible#dv13javaweb$ @mraible#DV13

Trends

Page 37: The Modern Java Web Developer Bootcamp - Devoxx 2013

@mraible#dv13javaweb$ @mraible#DV13

Job Trends

Absolute Relative

Page 38: The Modern Java Web Developer Bootcamp - Devoxx 2013

@mraible#dv13javaweb$ @mraible#DV13

Job Trends with Spring MVC

Absolute Relative

Page 39: The Modern Java Web Developer Bootcamp - Devoxx 2013

@mraible#dv13javaweb$ @mraible#DV13

Mailing List TrafficOctober 2013

Grails

Play

Dropwizard

0 325 650 975 1300

222

1218

1125

Page 40: The Modern Java Web Developer Bootcamp - Devoxx 2013

@mraible#dv13javaweb$ @mraible#DV13

0

3,500

7,000

10,500

14,000

Grails Play JAX-RS Jersey Dropwizard

Tagged Questions (November 10, 2013)

Page 41: The Modern Java Web Developer Bootcamp - Devoxx 2013

@mraible#DV13 @mraible#DV13

But if want to remain a Web Developer...

Page 42: The Modern Java Web Developer Bootcamp - Devoxx 2013

Modern Principles

Page 43: The Modern Java Web Developer Bootcamp - Devoxx 2013

@mraible#DV13 @mraible#DV13

HTTP OverviewRequest / Response Protocol

Features:

Keep-Alive

HTTP Secure

Binary

Compression

Page 44: The Modern Java Web Developer Bootcamp - Devoxx 2013

@mraible#DV13 @mraible#DV13

HTTP Methods1.0 defined GET, POST and HEAD

1.1 defined added OPTIONS, PUT, DELETE, TRACE and CONNECT

Safe methods: HEAD, GET, OPTIONS and TRACE

Idempotent: PUT and DELETE

Insecure: TRACE, TRACK and DEBUG

Page 45: The Modern Java Web Developer Bootcamp - Devoxx 2013

@mraible#DV13 @mraible#DV13

SPDY and HTTP 2.0Allows client and server to compress request and response headers

Allows multiple, simultaneously multiplexed requests over a single connection

Allows the server to actively push resources to the client that it knows the client will need

The initial draft of HTTP 2.0 is based on a straight copy of SPDY

Page 46: The Modern Java Web Developer Bootcamp - Devoxx 2013
Page 48: The Modern Java Web Developer Bootcamp - Devoxx 2013

@mraible#DV13 @mraible#DV13

Browser ToolsFirebug for FireFox

Chrome Developer Tools

Elements & Console

Settings

PageSpeed Insights

http://www.igvita.com/slides/2012/devtools-tips-and-tricks

Page 49: The Modern Java Web Developer Bootcamp - Devoxx 2013

HTML5

http://on.wsj.com/tEGIJL

Page 50: The Modern Java Web Developer Bootcamp - Devoxx 2013

@mraible#DV13 @mraible#DV13

https://developer.mozilla.org/en-US/docs/HTML/HTML5

<applet> <center> <font> <frame> <frameset>

How do you write HTML5?<!DOCTYPE html>

<article> <aside> <section> <header> <footer> <nav> <audio> <canvas> <video> <datalist> <details>

Page 51: The Modern Java Web Developer Bootcamp - Devoxx 2013

<form> ! <input type=text required> ! <input type=submit value=Search> !</form>!

<form> ! <input type=text autofocus> ! <input type=submit value=Search> !</form>!

HTML5 Forms

http://diveintohtml5.info/forms.html

<form> ! <input type=text placeholder=Enter your search terms> ! <input type=submit value=Search> !</form>!

Page 52: The Modern Java Web Developer Bootcamp - Devoxx 2013

@mraible#DV13 @mraible#DV13

<form> ! <input type=email> ! <input type=submit value=Go> !</form>

HTML5 Forms

Page 53: The Modern Java Web Developer Bootcamp - Devoxx 2013

HTML5 Killer Features

Editable Text

Page 54: The Modern Java Web Developer Bootcamp - Devoxx 2013

@mraible#DV13 @mraible#DV13

HTML5 Killer Features

Page 55: The Modern Java Web Developer Bootcamp - Devoxx 2013

@mraible#DV13 @mraible#DV13

HTML5 StorageWeb Storage APIs: localStorage / sessionStorage

Web SQL Database

IndexedDB

Application Cache

File* APIs

Page 56: The Modern Java Web Developer Bootcamp - Devoxx 2013

@mraible#DV13 @mraible#DV13

window.localStorageSimple key / value store

Persistent through page reloads

Great for storing user preferences

Avoids HTTP overhead of cookies

<script> localStorage.setItem('key', value); localStorage.getItem('key'); </script>

Page 57: The Modern Java Web Developer Bootcamp - Devoxx 2013

@mraible#DV13 @mraible#DV13

window.sessionStorageSame as localStorage

Lasts for browser session

New window / tab starts new session

Great for sensitive data (e.g. banking)

Excellent use case: auto-save <textarea>

Page 58: The Modern Java Web Developer Bootcamp - Devoxx 2013

@mraible#DV13 @mraible#DV13

Other Storage APIsWeb SQL Database

IndexedDB

Not supported by IE9, iOS or Safari

Application Cache

File APIs

Page 59: The Modern Java Web Developer Bootcamp - Devoxx 2013

@mraible#DV13 @mraible#DV13

Browser Support

Page 60: The Modern Java Web Developer Bootcamp - Devoxx 2013

@mraible#DV13 @mraible#DV13

CSS3 SecretsAnimated Transitions

Rounded Corners

Drop Shadows

Gradient Colors

Styling based on sibling count

More cursors for better usability

Custom Checkboxes and Radio Buttons http://lea.verou.me/css3-secrets

transform: rotateY(180deg);

border-radius: 8px 8px 0 0;

box-shadow: 2px 2px 4px 4px;

Page 61: The Modern Java Web Developer Bootcamp - Devoxx 2013

CSS3 Media Queries/* Smartphones (portrait and landscape) ----------- */ !@media only screen and (min-device-width: 320px) !and (max-device-width: 854px) { ! body { ! padding: 10px; ! } ! ! textarea { ! width: 90%; ! } !} ! !/* iPad (portrait and landscape) ----------- */ !@media only screen and (min-device-width: 768px) !and (max-device-width: 1024px) { ! body { ! padding-top: 50px; ! } !}

Page 62: The Modern Java Web Developer Bootcamp - Devoxx 2013

@mraible#DV13 @mraible#DV13

Cool HTML5 Demos http://fff.cmiscm.com

Page 63: The Modern Java Web Developer Bootcamp - Devoxx 2013

@mraible#DV13 @mraible#DV13

JavaScriptThe Good Parts

Lambda

Dynamic Objects

Loose Typing

Object Literals

Page 64: The Modern Java Web Developer Bootcamp - Devoxx 2013

@mraible#DV13 @mraible#DV13

JavaScript Tips

http://ejohn.org/blog/ecmascript-5-strict-mode-json-and-more/

Page 66: The Modern Java Web Developer Bootcamp - Devoxx 2013

Revealing Module Pattern

Page 67: The Modern Java Web Developer Bootcamp - Devoxx 2013

jQuery http://trends.builtwith.com/javascript/jQuery

Page 68: The Modern Java Web Developer Bootcamp - Devoxx 2013

jQueryJavaScript Distribution in Top 10,000 Sites

http://trends.builtwith.com/javascript

Page 69: The Modern Java Web Developer Bootcamp - Devoxx 2013

@mraible#DV13 @mraible#DV13

jQuery CDN at http://code.jquery.com

$(document).ready

$(document).on(‘click’, ‘#selector’, function() {})

jQuery UI for Dialogs, Sliders, Calendars

$.ajax and $(‘#div’).load(url)

Page 70: The Modern Java Web Developer Bootcamp - Devoxx 2013

CoffeeScript

Page 71: The Modern Java Web Developer Bootcamp - Devoxx 2013

@mraible#DV13 @mraible#DV13

AngularJSA JavaScript MVW Framework

From Google, MIT Licensed

Data-binding, Controllers, Dependency Injection

Localization, Components, Testable

Angular-seed for Scaffolding

Great Documentation and Community

Page 72: The Modern Java Web Developer Bootcamp - Devoxx 2013

@mraible#DV13 @mraible#DV13

AngularJS Basics

Page 73: The Modern Java Web Developer Bootcamp - Devoxx 2013

@mraible#DV13 @mraible#DV13

Simplified by one man: Addy Osmani

Journey Through The JavaScript MVC Jungle

Learning JavaScript Design Patterns

Choosing a JavaScript MVC Framework

Page 76: The Modern Java Web Developer Bootcamp - Devoxx 2013

@mraible#dv13javaweb$ @mraible#DV13

AngularJS Deep Dive

http://vimeo.com/mraible/angularjs-deep-dive

Page 77: The Modern Java Web Developer Bootcamp - Devoxx 2013

@mraible#DV13 @mraible#DV13

Web ComponentsTemplates

Decorators

Custom Elements

Shadow DOM

Imports

Page 78: The Modern Java Web Developer Bootcamp - Devoxx 2013

@mraible#DV13 @mraible#DV13

PolymerPolyfills

Web Application Framework

Set of UI Components

Page 79: The Modern Java Web Developer Bootcamp - Devoxx 2013

Polymer Bare Bones

Page 80: The Modern Java Web Developer Bootcamp - Devoxx 2013

@mraible#DV13 @mraible#DV13

BootstrapGood-looking websites by default

Layouts, navs, pagination, buttons

Mobile First (aka Responsive Design)

Awesome jQuery Plugins / Components

Page 81: The Modern Java Web Developer Bootcamp - Devoxx 2013

@mraible#DV13 @mraible#DV13

Bootstrap 3 Deep Dive

http://static.raibledesigns.com/bootstrap3

Page 82: The Modern Java Web Developer Bootcamp - Devoxx 2013

@mraible#DV13 @mraible#DV13

High Performance Web Sites1. Make Fewer HTTP Requests

2. Use a Content Delivery Network

3. Add Expires Headers

4. Gzip Components

5. Put Stylesheets at the Top

6. Put Scripts at the Bottom

7. Avoid CSS Expressions

Page 83: The Modern Java Web Developer Bootcamp - Devoxx 2013

@mraible#DV13 @mraible#DV13

High Performance Web Sites8. Make JavaScript and CSS External

9. Reduce DNS Lookups

10. Minify JavaScript

11. Avoid Redirects

12. Remove Duplicates Scripts

13. Configure ETags

14. Make Ajax Cacheable

Page 84: The Modern Java Web Developer Bootcamp - Devoxx 2013
Page 85: The Modern Java Web Developer Bootcamp - Devoxx 2013

@mraible#DV13 @mraible#DV13

My Page Speed ExperienceBiggest Problem is HTTP Requests

Minify and Concatenate

GZipping has biggest score gain

Expires Headers for Browser Caching

Use Apache or Nginx

Image Sprites for CSS

http://spritecow.com is great

Page 86: The Modern Java Web Developer Bootcamp - Devoxx 2013

Wro4jOpen Source Java project for optimization of web resources

Provides concatenation and minimization of JS and CSS

Gzip, YUI Compressor, JsHint, JsHint, CssLint, LESS, SASS, CoffeeScript, Dojo Shrinksafe

Page 87: The Modern Java Web Developer Bootcamp - Devoxx 2013

@mraible#DV13 @mraible#DV13

WebJars and UrlRewrite FilterWebJars: client-side web libraries packages in JARs

http://webjars.org

Servlet 3, Play 2, Grails, Dropwizard, Spring MVC, Tapestry and Wicket

UrlRewriteFilter: like Apache’s mod_rewrite

http://tuckey.org/urlrewrite

Clean URLs and just about everything else

Spring MVC’s <default-servlet-handler/> is your friend

Page 88: The Modern Java Web Developer Bootcamp - Devoxx 2013

@mraible#DV13 @mraible#DV13

TechniquesVersioning Static Assets with UrlRewriteFilter

http://raibledesigns.com/rd/entry/versioning_static_assets_with_urlrewritefilter

Adding web resource fingerprinting to AppFuse with wro4j

http://www.operatornew.com/2012/10/adding-web-resource-fingerprinting-to.html

Page 89: The Modern Java Web Developer Bootcamp - Devoxx 2013

But what about nginx?An open-source, high-performance HTTP server and reverse proxy, as well as an IMAP/POP3 proxy server

Powers Netflix, Wordpress.com, GitHub and Heroku

http://kevinworthington.com/nginx-for-mac-os-x-mountain-lion-in-2-minutes/

Page 90: The Modern Java Web Developer Bootcamp - Devoxx 2013

@mraible#DV13 @mraible#DV13

Apache Gzip and Expires Headersmod_pagespeed - https://developers.google.com/speed/pagespeed/mod

Automatically applies web performance best practices w/o modification

Improving AppFuse’s PageSpeed with Apache

Configured mod_deflate, mod_expires and turned on KeepAlive

PageSpeed went from 24 to 96!

YSlow went from 90 to 98

Page 91: The Modern Java Web Developer Bootcamp - Devoxx 2013

Page Speed Deep Dive

http://vimeo.com/mraible/page-speed-demo

Page 92: The Modern Java Web Developer Bootcamp - Devoxx 2013

<IfModule mod_deflate.c>!!    SetOutputFilter DEFLATE!!    AddOutputFilterByType DEFLATE text/plain text/html text/xml text/css application/xml application/xhtml+xml application/rss+xml application/javascript application/x-javascript!!    DeflateCompressionLevel 9!!    BrowserMatch ^Mozilla/4 gzip-only-text/html! BrowserMatch ^Mozilla/4\.0[678] no-gzip! BrowserMatch \bMSIE !no-gzip !gzip-only-text/html!! DeflateFilterNote Input instream! DeflateFilterNote Output outstream! DeflateFilterNote Ratio ratio! LogFormat '%r %{outstream}n/%{instream}n (%{ratio}n%%)' deflate!</IfModule>

/etc/httpd/conf.d/deflate.conf

Page 93: The Modern Java Web Developer Bootcamp - Devoxx 2013

<IfModule mod_expires.c>!    ExpiresActive On!    <FilesMatch \.(jpe?g|png|gif|js|css)$>!        ExpiresDefault access plus 1 week!    </FilesMatch>!    ExpiresByType image/jpeg access plus 1 week!    ExpiresByType image/png access plus 1 week!    ExpiresByType image/gif access plus 1 week!    ExpiresByType text/css access plus 1 week!    ExpiresByType application/javascript access plus 1 week!    ExpiresByType application/x-javascript access plus 1 week!</IfModule>

/etc/httpd/conf.d/expires.conf

Page 94: The Modern Java Web Developer Bootcamp - Devoxx 2013

PageSpeed with Apache

http://raibledesigns.com/rd/entry/improving_appfuse_s_pagespeed_with

Page 95: The Modern Java Web Developer Bootcamp - Devoxx 2013

Load Testing

Page 96: The Modern Java Web Developer Bootcamp - Devoxx 2013

@mraible#DV13 @mraible#DV13

Performance Monitoring

Page 97: The Modern Java Web Developer Bootcamp - Devoxx 2013

@mraible#DV13 @mraible#DV13

Google Analytics

Page 98: The Modern Java Web Developer Bootcamp - Devoxx 2013

DIY with Metrics

Page 99: The Modern Java Web Developer Bootcamp - Devoxx 2013

Application ArchitectureServer to Client

Performance implications

Twitter

Airbnb

Charm

Ajaxified Body with pjaxhttps://github.com/defunkt/jquery-pjax

Page 100: The Modern Java Web Developer Bootcamp - Devoxx 2013

@mraible#DV13 @mraible#DV13

Mobile DevicesIf developing a mobile app with web technologies

Use PhoneGap or Sencha Touch

Otherwise, add a viewport meta tag

<meta name=viewport content=width=device-width, initial-scale=1.0>

Page 101: The Modern Java Web Developer Bootcamp - Devoxx 2013

@mraible#DV13 @mraible#DV13

Mobile Devices - CSS3 Media Queries

/* Smartphones (portrait and landscape) ----------- */ !@media only screen and (min-device-width: 320px) and (max-device-width: 854px) { ! /* Smartphone rules */!} ! !/* iPad (portrait and landscape) ----------- */ !@media only screen and (min-device-width: 768px) and (max-device-width: 1024px) { ! /* Tablet rules */!}

Page 102: The Modern Java Web Developer Bootcamp - Devoxx 2013

@mraible#DV13 @mraible#DV13

Mobile Devices - Hide Address Bar<script type=text/javascript> ! // Hide address bar for smartphones ! /Mobile/.test(navigator.userAgent) && !location.hash ! && setTimeout(function () { ! if (!pageYOffset) window.scrollTo(0, 1); ! }, 1000); !</script>!

Page 103: The Modern Java Web Developer Bootcamp - Devoxx 2013

Mobile Devices - Disable Focus Zoom(function(doc) { ! var addEvent = 'addEventListener', ! type = 'gesturestart', ! qsa = 'querySelectorAll', ! scales = [1, 1], ! meta = qsa in doc ? doc[qsa]('meta[name=viewport]') : []; ! ! function fix() { ! meta.content = 'width=device-width,minimum-scale=' + ! scales[0] + ',maximum-scale=' + scales[1]; ! doc.removeEventListener(type, fix, true); ! } ! ! if ((meta = meta[meta.length - 1]) && addEvent in doc) { ! fix(); ! scales = [.25, 1.6]; ! doc[addEvent](type, fix, true); ! } !}(document));

Page 104: The Modern Java Web Developer Bootcamp - Devoxx 2013

@mraible#DV13 @mraible#DV13

FastClickPolyfill to remove click delays on browsers with touch UIs

Mobile Safari on iOS 3+, Chrome on iOS 5+, Chrome on Android, Opera Mobile 11.5+, Android Browser since Android 2, PlayBook OS 1+

https://github.com/ftlabs/fastclick

@mraible#dv13javaweb$ @mraible#DV13

Page 105: The Modern Java Web Developer Bootcamp - Devoxx 2013

@mraible#dv13javaweb$ @mraible#DV13

My Mobile App Experience

Page 106: The Modern Java Web Developer Bootcamp - Devoxx 2013

@mraible#dv13javaweb$ @mraible#DV13

PhoneGap

Page 107: The Modern Java Web Developer Bootcamp - Devoxx 2013

@mraible#dv13javaweb$ @mraible#DV13

Background Modes

Page 108: The Modern Java Web Developer Bootcamp - Devoxx 2013

@mraible#DV13 @mraible#DV13

Lessons LearnedDevelop Mobile Client first

Develop Web Client as a one-page app

Don’t rely on the internet for mobile

Keep static assets local for faster startup

Bleeding edge can be painful

Page 109: The Modern Java Web Developer Bootcamp - Devoxx 2013

@mraible#DV13 @mraible#DV13

The Cloud

Page 110: The Modern Java Web Developer Bootcamp - Devoxx 2013

@mraible#DV13 @mraible#DV13

The Cloud

Supports Ruby, Node.js, Clojure, Java, Python and Scala

Page 111: The Modern Java Web Developer Bootcamp - Devoxx 2013

@mraible#DV13 @mraible#DV13

The Cloud

Supports Spring, Grails, Scala, Play, Node.js, Ruby/Rails/Sinatra

Services: MySQL, PostgreSQL, MongoDB, Redis, RabbitMQ

Page 113: The Modern Java Web Developer Bootcamp - Devoxx 2013

@mraible#DV13 @mraible#DV13

Apache TomEE

Page 114: The Modern Java Web Developer Bootcamp - Devoxx 2013

@mraible#DV13 @mraible#DV13

Security MattersBe aware of SQL and Content Injection

Disable Cross-Site Scripting (XSS)

Don’t give too much information in error pages and exceptions

Stop unvalidated redirects and forwards

Always use https if your application has private data

Understand what browsers have to deal with

Page 115: The Modern Java Web Developer Bootcamp - Devoxx 2013

@mraible#DV13 @mraible#DV13

OWASPThe Open Web Application Security Project (OWASP) is a worldwide not-for-profit charitable organization focused on improving the security of software.

At OWASP you’ll find free and open ...

Application security tools, complete books, standard security controls and libraries, cutting edge research

http://www.owasp.org

Page 116: The Modern Java Web Developer Bootcamp - Devoxx 2013

@mraible#DV13

OWASP Top 101. Injection Flaws

2. Broken Authentication

3. XSS

4. Direct Object Reference

5. Security Misconfiguration

6. Sensitive Data Exposure

7. Missing Access Controls

8. CSRF

9. Using Components with Vulnerabilities

10.Unvalidated Redirectshttps://www.owasp.org/index.php/Top_10_2013-Top_10

@mraible#DV13 @mraible#DV13

Page 117: The Modern Java Web Developer Bootcamp - Devoxx 2013

@mraible#DV13 @mraible#DV13

7 Security (Mis)Configurations in web.xml1. Error pages not configured

2. Authentication & Authorization Bypass

3. SSL Not Configured

4. Not Using the Secure Flag

Page 118: The Modern Java Web Developer Bootcamp - Devoxx 2013

@mraible#DV13 @mraible#DV13

7 Security (Mis)Configurations in web.xml5. Not Using the HttpOnly Flag

6. Using URL Parameters for Session Tracking

7. Not Setting a Session Timeout

http://software-security.sans.org/blog/2010/08/11/security-misconfigurations-java-webxml-files

Page 119: The Modern Java Web Developer Bootcamp - Devoxx 2013

Zed Attack Proxy - ZAP

https://www.owasp.org/index.php/OWASP_Zed_Attack_Proxy_Project

Page 120: The Modern Java Web Developer Bootcamp - Devoxx 2013

@mraible#DV13 @mraible#DV13

Fixing Vulnerabilities

<session-config>! <session-timeout>15</session-timeout>! <cookie-config>! <http-only>true</http-only>! <secure>true</secure>! </cookie-config>! <tracking-mode>COOKIE</tracking-mode>! </session-config>!!! <form action="${ctx}/j_security_check" id="loginForm" ! method="post" autocomplete="off">!

Page 121: The Modern Java Web Developer Bootcamp - Devoxx 2013

Content Security Policy

Page 122: The Modern Java Web Developer Bootcamp - Devoxx 2013

@mraible#DV13 @mraible#DV13

Content Security PolicyAn HTTP Header with whitelist of trusted content

Bans inline <script> tags, inline event handlers and javascript: URLs

No eval(), new Function(), setTimeout or setInterval

Supported in Chrome 16+, Safari 6+, and Firefox 4+, and (very) limited in IE 10

Page 123: The Modern Java Web Developer Bootcamp - Devoxx 2013

@mraible#DV13 @mraible#DV13

The Modern JVM Web DeveloperStarts with Fast Hardware

Uses IntelliJ IDEA

Leverages HTML5, JavaScript, and CSS3

Creates High Performance Web Sites

For Mobile Devices, in the Cloud

And cares about Security

Page 124: The Modern Java Web Developer Bootcamp - Devoxx 2013

Staying ModernRead

Attend Conferences

Submit a talk!

Write

Do

Get Paid

Open Source

Page 125: The Modern Java Web Developer Bootcamp - Devoxx 2013

@mraible#dv13javaweb$ @mraible#DV13

Technology doesn’t create success…

Page 126: The Modern Java Web Developer Bootcamp - Devoxx 2013

@mraible#dv13javaweb$ @mraible#DV13

People do.

Page 127: The Modern Java Web Developer Bootcamp - Devoxx 2013

Questions?Contact Me!

http://raibledesigns.com

@mraible

Presentationshttp://slideshare.net/mraible

Codehttp://github.com/mraible