9. Play
- full stack web framework for JVM
- fun and high productive
- change code hit reload ( forget jRebel )
- browser error reporting
- easy cloud deployment (e.g. Heroku)
- stateless
15. The Web Evolved
- Static (just html)
- Dynamic (get date from server on page :) )
* Structured (mvc, jsp, jsf )
- Realtime (ajax)
16. Realtime Web
- Polling (req - res)
- Long polling (req - res when changed)
- Server sent events (req - res -res -res)
- Websocket (req - res - res - req -res
whatever)
24. Controller - add a parameter
public static Result helloName(String name){
return ok("Hello World: "+ name);
}
25. conf / routes - add a parameter
GET /helloName
controllers.HelloWorld.helloName(name)
http://localhost:9000/helloName?
name=TestUser
26. conf / routes - add a parameter to URL
GET /helloName/:name
controllers.HelloWorld.helloName(name)
http://localhost:9000/hello/TestUser
27. Controller - parameter type check
public class HelloWorld extends Controller{
public static Result helloNameAge(String name, int
age){
return ok("Hello World "+name +” you are ”
+age);
}
}
28. conf / routes - parameter type check
GET /hello/:name/:age
controllers.HelloWorld.helloNameAge(name:String,age:Int)
http://localhost:9000/hello/TestUser/10
29. Add a view
@(name: String, age:Int)
@main("Welcome to Play") {
<html>
<head></head>
<body>
<p>
Hello <b> @name</b>, you are <b>@age</b> years old
</p>
</body>
</html>
}
30. Controller - call view
public class HelloWorld extends Controller{
public static Result index(String name, int age){
return ok(views.html.helloWorld.render(name,age));
}
}
32. WS lib for non-blocking http call
public static Result callGoogle() {
play.libs.F.Promise<play.libs.WS.Response> response=WS.url("http://google.com" ).get();
Promise<Result> result= response.map(toResult);
return async(result);
}
33. NIO parallel call example - non blocking call
public static Promise<Timing> timedRequest( final String url){
final long start = System.currentTimeMillis();
Promise<Response> res= WS.url(url).get();
return res.map(new Function<Response,Timing> (){
public Timing apply (Response response){
long latency=System.currentTimeMillis() -start;
return new Timing(url,latency,start);
}
});
}
34. NIO parallel call example - non blocking call
public static Result index(){
Promise<List<Timing>> all= Promise.waitAll(
Timing.timedRequest("http://www.yahoo.com"),
Timing.timedRequest("http://www.google.com"),
Timing.timedRequest("http://www.bing.com")
);
return async(all.map(new play.libs.F.Function<List<Timing>,Result>(){
public Result apply(List<Timing> timings){
return ok (play.libs.Json.toJson(timings));
}
}));}
35. NIO parallel call example - result
[{"url":"http://www.yahoo.com" ,"latency":1542,"start":1408296474891},
{"url":"http://www.google.com" ,"latency":366,"start":1408296474912},
{"url":"http://www.bing.com" ,"latency":437,"start":1408296474913}]
39. Reference
- https://www.playframework.com/
- Play For Scala (Manning)
- Learning Play! Framework 2 (Andy Petrella)
- Play For Java (Manning)
- People like Sadek Drobi, Yevgeniy Brikman,
James Ward :)