Over a million developers have joined DZone.
Platinum Partner

Getting Started With the Play Framework

· Java Zone

The Java Zone is brought to you in partnership with AppDynamics. Discover how AppDynamics steps in to upgrade your performance game and prevent your enterprise from these top 10 Java performance problems.

It’s time for me to test the Play Framework and I’ll try to make some posts during my tests about this web framework. The Play Framework is a framework for creating web applications in Java. The main goals of this framework are (according to the official site) :

  • Hot reload : You can edit your Java files and HTML files and you just have to refresh the browser to see the results
  • Stateless model : Play is ready for REST, it can be scaled running multiple instances of the same applications on several servers
  • Efficient Template System : The template system is really easy to use, based on Groovy.
  • Resolve errors quickly : When an error occurs, Play displays the source code directly in the browser along with the location of the error
  • Integration : Play provides integration for Hibernate, OpenID, MemCached and others popular frameworks
  • Pure Java : You make only Java and HTML, there are no other things to learn and you get easy integration in IDE.
  • Fast : The startup of application is really fast, as is the rendering of the pages.

In this post, we’ll see how to install the Play Framework and how to write our first Hello World.

Install Play Framework

Before installing Play Framework, you need Java 5.0 or later. Then, you can download a release of Play : http://download.playframework.org/releases/. The latest when I wrote this post is the 1.0.3 version. So let’s download this version. After that, just unzip the given archive to where you want to install the framework. After that, you just have to add the play command to the path.

In Ubuntu 10.04, I had to do the following :

PLAY_HOME=/usr/share/apps/play/
PATH=$PATH:$PLAY_HOME
chmod +x PLAY_HOME/play

Depending on your configuration, you perhaps have to use sudo for the chmod command. For other systems (Windows and Mac), you also have to add play (play.bat for Windows) to the path using the system configuration.

And normally, after that, you can execute the play command :

wichtounet@Linux-Desktop:~$ play
~ _ _
~ _ __ | | __ _ _ _| |
~ | '_ \| |/ _' | || |_|
~ | __/|_|\____|\__ (_)
~ |_| |__/
~
~ play! 1.0.3, http://www.playframework.org
~
~ Usage: play cmd [app_path] [--options]
~
~ with, new Create a new application
~ run Run the application in the current shell
~ help Show play help
~
wichtounet@Linux-Desktop:~$

Creating a new application

To create a new application, you just have to use the command

play new app_name

You must be in a folder where a folder with the name app_name can be created. For example, let’s create a new application “hello” :

wichtounet@Linux-Desktop:~/dev/play$ play new hello
~ _ _
~ _ __ | | __ _ _ _| |
~ | '_ \| |/ _' | || |_|
~ | __/|_|\____|\__ (_)
~ |_| |__/
~
~ play! 1.0.3, http://www.playframework.org
~
~ The new application will be created in /home/wichtounet/dev/play/hello
~ What is the application name? Hello World
~
~ OK, the application is created.
~ Start it with : play run hello
~ Have fun!
~
wichtounet@Linux-Desktop:~/dev/play$

During the creation, Play will ask you for the name of the application. Here I put “Hello World” as the name of the application. If you go into the new created application folder, you will see the given folders :

  • app : The application itself, Java classes and HTML files
  • conf : The configuration of the application
  • lib : Contains the Java libraries that the application needs
  • public : Contains the public files, images, CSS, JS
  • test : Contains the tests (JUnit or Selenium) file

You can launch your application, with the command :

wichtounet@Linux-Desktop:~/dev/play$ play run hello
~ _ _
~ _ __ | | __ _ _ _| |
~ | '_ \| |/ _' | || |_|
~ | __/|_|\____|\__ (_)
~ |_| |__/
~
~ play! 1.0.3, http://www.playframework.org
~
~ Ctrl+C to stop
~
Listening for transport dt_socket at address: 8000
17:49:56,395 INFO ~ Starting /home/wichtounet/dev/play/hello
17:49:56,889 WARN ~ You're running Play! in DEV mode
17:49:56,958 INFO ~ Listening for HTTP on port 9000 (Waiting a first request to start) ...
17:50:01,670 INFO ~ Application 'Hello World' is now started !

And you can browse your application at the URL http://localhost:9000/. You will normally see a sample page :

Play Framework sample page

Play Framework sample page

How does it works ?

So now, let’s study why this work. If you open the file conf/routes, you will see that line :

GET / Application.index

That indicates that the index of the project will be serviced from the index method of the Application class. And if you open the app/controllers/Application.java file, you will see :

package controllers;

import play.mvc.*;

public class Application extends Controller {
public static void index() {
render();
}
}

So at this time, the index() only renders the default template. This template is app/views/Application/index.html (like the name of the method and the class) :

#{extends 'main.html' /}
#{set title:'Home' /}

#{welcome /}

We can see that this template extends the main.html template. It sets the title to home and display the welcome prompt. These tags are tags from the Play Framework. Lets change this template to :

#{extends 'main.html' /}
#{set title:'Hello World' /}

<h3>Hello the world !</h3>

And refresh the application page. You will see now only the message “Hello the world”. If you want to see something when the controllers is called, just add a System.out.println in the Application.index :

public static void index() {
System.out.println("render()");
render();
}

And you will see logs in the console when you refresh the pages :

17:50:01,670 INFO  ~ Application 'Hello World' is now started !
render()
render()
render()
render()
render()

Add a simple new page

To do a little more in this post, let’s add a new page : http://localhost:9000/bye. Let’s start adding a new route in conf/routes :

GET     /bye                                     Application.bye

So we have to add a method bye in the Application class :

package controllers;

import play.mvc.*;

public class Application extends Controller {
public static void index() {
render();
}

public static void bye() {
render();
}
}

And then, we just need to add a new template bye.html in app/views/Application/ folder :

#{extends 'main.html' /}
#{set title:'Bye' /}

<h3>Bye bye !</h3>

And now, if you go to http://localhost:9000/bye you will see our new page :

A Bye page in Play Framework

A Bye page in Play Framework

Conclusion

Here we are ! With this framework, it’s extremely easy to create web applications. And we’ve only seen a very small part of the facilities that this framework offers to create web applications. I’ll try to write others posts on the subject.

From http://www.baptiste-wicht.com/2010/07/getting-started-play-framework/

The Java Zone is brought to you in partnership with AppDynamics. AppDynamics helps you gain the fundamentals behind application performance, and implement best practices so you can proactively analyze and act on performance problems as they arise, and more specifically with your Java applications. Start a Free Trial.

Topics:

{{ parent.title || parent.header.title}}

{{ parent.tldr }}

{{ parent.urlSource.name }}