37
Servlet 4.0 Manfred Riem (@mnriem) Oracle Copyright © 2015, Oracle and/or its affiliates. All rights reserved. |

2015 UJUG, Servlet 4.0 portion

  • Upload
    mnriem

  • View
    230

  • Download
    1

Embed Size (px)

Citation preview

Servlet 4.0

Manfred Riem (@mnriem)Oracle

Copyright © 2015, Oracle and/or its affiliates. All rights reserved. |

Copyright © 2015, Oracle and/or its affiliates. All rights reserved. |

Safe Harbor Statement

The following is intended to outline our general product direction. It is intended for information purposes only, and may not be incorporated into any contract. It is not a commitment to deliver any material, code, or functionality, and should not be relied upon in making purchasing decisions. The development, release, and timing of any features or functionality described for Oracle’s products remains at the sole discretion of Oracle.

2

Copyright © 2015, Oracle and/or its affiliates. All rights reserved. |

Agenda

Why HTTP/2?

HTTP/2 Big Features

How Servlet Might Expose These Features

Server Push and JSF/MVC

Summary and Current Status

1

2

3

4

5

3

Copyright © 2015, Oracle and/or its affiliates. All rights reserved. |

Why HTTP/2?A Real Life Example

index.html

style1.css

style2.css...

script1.js

script9.js

pic1.jpg

pic8.jpg

.

.

.

photo1.png

photo2.png

.

.

.

Copyright © 2015, Oracle and/or its affiliates. All rights reserved. |

Why HTTP/2?

• HTTP Pipelining

• Head-of-Lineblocking

Problems in HTTP/1.1

style1.css

style2.css

Client Server

index.html

index.html

style1.cssstyle2.cssscript1.js

.

.

.

script2.js

.

.

.

script1.js

script2.js

Copyright © 2015, Oracle and/or its affiliates. All rights reserved. |

Why HTTP/2?

• Inefficient use of TCP sockets

Problems in HTTP/1.1

Client ServerClient Server

Client Server

Client Server

Client Server

Client Server

Copyright © 2015, Oracle and/or its affiliates. All rights reserved. |

Why HTTP/2?

• Much of what we do in web-apps is a hack to work around shortcomings in HTTP/1.1

– File concatenation and image sprites

– Domain sharding

– Inlined assets

What is an optimization?

7

Copyright © 2015, Oracle and/or its affiliates. All rights reserved. |

File Concatenation and Image SpritesTCP Efficiency Improves with Larger Files

8

• Modern web page now consists of more than 90 resources fetched from 15 distinct hosts

• Solution:

– Just work around it by shoving more than one logical file into one physical file.

– Seminal article: A List Apart http://alistapart.com/article/sprites

– Useful tool: SpritePad http://spritepad.wearekiss.com/

Copyright © 2015, Oracle and/or its affiliates. All rights reserved. |

File Concatenation and Image SpritesTCP Efficiency Improves with Larger Files

9

.ic-AerospaceAndDefense-wht-on-gray, .ic-AerospaceAndDefense-wht-on-red, .ic-Airline-wht-on-gray, .ic-Airline-wht-on-red{

background: url(sprites.png) no-repeat;}.ic-AerospaceAndDefense-wht-on-gray{

background-position: 0 0;width: 80px;height: 80px;

}.ic-AerospaceAndDefense-wht-on-red{

background-position: -81px 0;width: 80px;height: 80px;

}.ic-Airline-wht-on-gray{

background-position: 0 -80px ;width: 80px;height: 80px;

}.ic-Airline-wht-on-red{

background-position: -81px -79px ;width: 80px;height: 80px;

}

Copyright © 2015, Oracle and/or its affiliates. All rights reserved. |

Domain ShardingSplit page resources across several hosts to work around browser limits

10

Copyright © 2015, Oracle and/or its affiliates. All rights reserved. |

Inlined Assets

• data URLs

• <imgsrc="data:image/gif;base64,R0lGODlhEAAOALMAAOazToeHh0tLS/7LZv/0jvb29t/f3//Ub/ /ge8WSLf/rhf/3kdbW1mxsbP//mf///yH5BAAAAAAALAAAAAAQAA4…" />

Base64 Encoding Will Never Die

11

Copyright © 2015, Oracle and/or its affiliates. All rights reserved. |

Our Plan for Your Time Investment

Why HTTP/2?

HTTP/2 Big Features

How Servlet Might Expose These Features

Server Push and JSF/MVC

Summary and Current Status

1

2

3

4

5

12

Copyright © 2015, Oracle and/or its affiliates. All rights reserved. |

HTTP/2 is really just a new transport layer underneath HTTP/1.1

– same request/response model

– no new methods

– no new headers

– no new usage patterns from application layer

– no new usage of URL spec and other lower level specs

Network Programming Review

13

Copyright © 2015, Oracle and/or its affiliates. All rights reserved. |

Network Programming Review

14

The Socket Angle

• It would be like if we took the existing Servlet specification

Copyright © 2015, Oracle and/or its affiliates. All rights reserved. |

Network Programming Review

15

The Socket Angle

• It would be like if we took the existing Servlet specificationand added a new layer underneath it

Copyright © 2015, Oracle and/or its affiliates. All rights reserved. |

Network Programming ReviewThe Socket Angle

Client ServerClient Server

Client Server

Client Server

Client Server

Copyright © 2015, Oracle and/or its affiliates. All rights reserved. |

Network Programming ReviewSolution in HTTP/2

Client Server

Copyright © 2015, Oracle and/or its affiliates. All rights reserved. |

HTTP/2 Request Response Multiplexing

• Fully bi-directional

• Enabled by defining some terms

– ConnectionA TCP socket

– StreamA “channel” within a connection

–MessageA logical message, such as a request or a response

– FrameThe smallest unit of communication in HTTP/2.

18

Lets you do more things with a single TCP connection

Copyright © 2015, Oracle and/or its affiliates. All rights reserved. |

HTTP/2 Request Response Multiplexing

19

Connections, Streams, Messages, Frames

Copyright © 2015, Oracle and/or its affiliates. All rights reserved. |

HTTP/2 Request Response Multiplexing

• Once you break the communication down into frames, you can interweave the logical streams over a single TCP connection.

• Yet another idea from the 1960s is new again.

20

Connections, Streams, Messages, Frames

BrowserServerSingle TCP connection for HTTP 2

STREAM'4'HEADERS'

STREAM'9'HEADERS'

STREAM'7'DATA'

STREAM'7'HEADERS'

STREAM'2'HEADERS'

STREAM'2'DATA'

Copyright © 2015, Oracle and/or its affiliates. All rights reserved. |

HTTP/2 Stream Prioritization

• Stream Dependency in HEADERSFrame

• PRIORITY frame type

• An additional 40 bytes

– Stream id (31)

– Weight (8): [1, 256]

– Exclusive bit (1)

• Only a suggestion

21S

A

B C

4 12

A

B CD

4 16 12

exclusive = 0

A

B C

D

4 12

16

exclusive = 1

Copyright © 2015, Oracle and/or its affiliates. All rights reserved. |

HTTP/2 Server Push

• Eliminates the need for resource inlining.

• Lets the server populate the browser’s cache in advance of the browser asking for the resource to put in the cache.

• No corresponding JavaScript API, but can be combined with SSE

– Server pushes stuff into the browser’s cache.

– Server uses SSE to tell the browser to go fetch it (but we know it’s already in the browser’s cache).

22E

Copyright © 2015, Oracle and/or its affiliates. All rights reserved. |

HTTP/2 Upgrade from HTTP/1.1

• Not secure

– We have to use port 80

– Use existing 101 Switching Protocols from HTTP/1.1

• Secure– Next Protocol Negotiation (NPN)

– Application Layer Protocol Negotiation (ALPN)

23

Secure or not-secure?

Copyright © 2015, Oracle and/or its affiliates. All rights reserved. |

Agenda

Why HTTP/2?

HTTP/2 Big Features

How Servlet Might Expose These Features

Server Push and JSF/MVC

Summary and Current Status

1

2

3

4

5

24

Copyright © 2015, Oracle and/or its affiliates. All rights reserved. |

• Existing API is designed for One Request == One Response.

• HTTP/2 destroys this assumption.

• It will be challenging to do justice to the new reality of One Request == One or More Responses.

• We must not simply bolt the “One or More Responses” concept onto some convenient part of the existing API.

25

Challenges in Exposing HTTP/2 Features in Servlet API

Servlet 4.0 Big Ticket New Features

Copyright © 2015, Oracle and/or its affiliates. All rights reserved. |

• Request/Response multiplexing

• Stream Prioritization

• Server Push

• Upgrade from HTTP/1.1

– 101 Switching Protocols

26

HTTP/2 Features Potentially Exposed in Servlet API

Servlet 4.0 Big Ticket New Features

Copyright © 2015, Oracle and/or its affiliates. All rights reserved. |

• Add method HttpServletRequest and HttpServletResponse– int getStreamId()

27

Request/Response Multiplexing

Servlet 4.0 Big Ticket New Features

Copyright © 2015, Oracle and/or its affiliates. All rights reserved. |

• Add a new class Priority

– boolean exclusive

– int streamId

– int weight

• Add method to HttpServletRequest

– Priority getPriority()

• Add methods to HttpServletResponse

– Priority getPriority()

– void setPriority(Priority p)

28

Stream Prioritization

Servlet 4.0 Big Ticket New Features

Copyright © 2015, Oracle and/or its affiliates. All rights reserved. |

• Push resource to client for a given url and headers

• May add callback for completion or error of a push

• Not at all a replacement for WebSocket

• Really useful for frameworks that build on Servlet, such as JSF

29

Server Push

Servlet 4.0 Big Ticket New Features

Copyright © 2015, Oracle and/or its affiliates. All rights reserved. | 30

Server Push

Servlet 4.0Big TicketNew Features

BrowserServer Thread Aservlet.service()

GET /index.html

Server discovers

browser will need style.css and script.js

request.dispatchPushRequest("style.css")

request.dispatchPushRequest("script.js")

Server Thread Bservlet.service()

synthetic GET /style.css

synthetic GET /script.js

Server Thread Cservlet.service()

style.css

script.js

index.html

Copyright © 2015, Oracle and/or its affiliates. All rights reserved. |

Server Push

public class FacesServlet implements Servlet {public void service(ServletRequest req, ServletResponse resp)throws IOException, ServletException {

HttpServletRequest request = (HttpServletRequest) req;try {

ResourceHandler handler =context.getApplication().getResourceHandler();

if (handler.isResourceRequest(context)) {handler.handleResourceRequest(context);

} else {lifecycle.attachWindow(context);lifecycle.execute(context);lifecycle.render(context);

}}

}

Example of Potential Use from JSF

31

Copyright © 2015, Oracle and/or its affiliates. All rights reserved. |

Server Push

public class ExternalContextImpl extends ExternalContext {

public String encodeResourceURL(String url) {if (null == url) {

String message = MessageUtils.getExceptionMessageString(MessageUtils.NULL_PARAMETERS_ERROR_MESSAGE_ID,

"url");throw new NullPointerException(message);

}Map attrs = getResourceAttrs();((HttpServletRequest) request).dispatchPushRequest(

url, attrs);return ((HttpServletResponse) response).encodeURL(url);

}

}

Example of Potential Use from JSF

32

Copyright © 2015, Oracle and/or its affiliates. All rights reserved. |

Server Push

• The MVC EG needs to see how this will be integrated into the MVC specification so no example at the moment.

Example for MVC

33

Copyright © 2015, Oracle and/or its affiliates. All rights reserved. |

Our Plan for Your Time Investment

Why HTTP/2?

HTTP/2 Big Features

How Servlet Might Expose These Features

Server Push and JSF/MVC

Summary and Current Status

1

2

3

4

5

34

Copyright © 2015, Oracle and/or its affiliates. All rights reserved. |

Summary and Current Status

• Servlet 4.0 brings HTTP/2 to Java EE

– 100% compliant implementation of HTTP/2

– Expose key features to the API• Server Push

• Stream Prioritization

• Request/Response multiplexing

35

Copyright © 2015, Oracle and/or its affiliates. All rights reserved. |

Summary and Current Status

• JSR-369 just formed on 22 September

• Tentative Delivery Schedule

– Q3 2014: expert group formed

– Q2 2015: early draft

– Q3 2015: public review

– Q4 2015: proposed final draft

– Q3 2016: final release

36

Copyright © 2015, Oracle and/or its affiliates. All rights reserved. |

How to Get Involved

• Adopt a JSR

– http://glassfish.org/adoptajsr/

• The Aquarium

– http://blogs.oracle.com/theaquarium/

• Java EE 8 Reference Implementation– http://glassfish.org

37