1. Introduction and first steps
Chapter 1. An introduction to Play
1.2. High-productivity web development
1.4. Play 2 enterprise features
1.4.2. Traditional data access
1.5.2. Creating your first application
1.5.3. Play application structure
1.5.4. Running the application
1.5.5. Accessing the running application
1.5.6. Changing the controller class
1.5.7. Add a compilation error
Chapter 2. The parts of an application
2.1. Introducing our application
2.2. A rundown of a Play application
2.3. Play’s configuration files
2.4. Build configuration files
Chapter 3. A basic CRUD application
3.1. Adding a controller and actions
3.2. Mapping URLs to action methods using routes
3.3. Adding a model and implementing functionality
3.5. Implementing the list method
3.6.1. Constructing the form object
Chapter 4. An enterprise app, Play-style
4.1. Recalling what an enterprise application is
4.2. Determining today’s enterprise application challenges
4.3. Understanding Play’s application in an enterprise context
Chapter 5. Controllers—handling HTTP requests
5.1. Controllers and action methods
5.2. Returning results from action methods
5.3. Using routing to wire URLs to action methods
5.3.1. Translating HTTP to Java code
5.3.2. The routes files explained
Chapter 6. Handling user input
6.1.1. Displaying the new product form
6.4.1. Using the built-in validators
Chapter 7. Models and persistence
7.1. Modeling the real world in code
7.1.1. The reasons for getters and setters
7.2. Persistence and Object-Relational Mapping (ORM)
7.2.1. About relational databases
7.3.1. Configuring Ebean and the database
7.4.1. Mapping a one-to-many relationship
7.4.2. Making the one-to-many relationship bidirectional
7.6. Using JPA instead of Ebean
Chapter 8. Producing output with view templates
8.1. The benefits of compiled, type-safe templates
8.3. Your basic building blocks
8.4. Structuring pages with template composition
8.5. Using LESS and CoffeeScript: the asset pipeline
9.1. What do we mean by asynchronous data?
9.2. Handling asynchronous data
9.3. Scheduling asynchronous tasks
9.5. Unidirectional communication with Comet
9.6. Bidirectional communication with WebSockets
10.2. Adding basic authentication with filters
Chapter 11. Modules and deployment
11.2. Splitting your application into multiple sub-applications
11.3.1. Packing up your application
11.3.2. Working with multiple configurations
11.3.3. Creating native packages for a package manager
11.3.4. Setting up a front-end proxy
Chapter 12. Testing your application
12.1. Testing Play applications