Getting started with Wideplay's Warp Framework
First
download warp and its dependencies from the link provided above. For
convenience, dependencies are packaged along with the warp core library
in a zip file named warp-with-deps.zip.
Unzip and place the provided jars into your application's WEB-INF/lib
folder. Create a web.xml file in WEB-INF, and add the following filter
mapping to it:
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4"
xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd" >
<context-param>
<param-name>warp.module</param-name>
<param-value>my.example.MyModule</param-value>
</context-param>
<filter>
<filter-name>warp</filter-name>
<filter-class>com.wideplay.warp.WarpFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>warp</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>
Note that the parameter warp.module must specify the class name of your Warp Module class. This is typically a class that looks like so:
package my.example;
public class MyModule implements WarpModule {
public void configure(Warp warp) {
//nothing required yet
}
}
Now, this tells Warp to look in package my.example
for page classes (and resources) to register to the runtime. Every
class in the WarpModule's package and its sub-packages are considered
candidates for page object registration (but only those that have
corresponding templates are typically registered). You can also perform
a lot of setup work in the WarpModule as we will see later on.
In
Warp, a page is represented by a page object, and any manipulation of
that page or its state is driven from the page object. OK, let's create
a simple page to say hello to the world:
package my.example;
public class Start {
private String message = "hello warp!";
//getter...
public String getMessage() { return message; }
}
In Warp, page objects are always be accompanied by a template (in
this case a standard HTML template) to tell Warp how to decorate and
layout the content in the page. As a convention, templates are named
the same as page classes (in our case, Start.html in the / directory):
<?xml version="1.0" encoding="UTF-8"?>
<html xmlns:w="http://www.wideplay.com/warp/schema/warp_core.xsd"
xmlns="http://www.w3.org/1999/xhtml"
xml:lang="en" lang="en">
<head>
<title>Warp :: Hello World</title>
</head>
<body w:component="frame">
<p>
${message}
</p>
</body>
</html>
Note that the only unusual part about this template is the attribute on body named w:component which tells Warp to decorate the <body> tag with a Frame component. The Frame component is used on nearly every page and is a kind of "wrapper" for the page (and should always be present on the <body> tag) which creates some necessary conditions for the rendering of the page by the Warp framework.
The other noteworthy part of the template is the ${message} expression, which is a property expression telling Warp to look into the corresponding page object for a property named message. If you look above, we've declared message as a String in our Start page class.
You should now have a web application with roughly the following structure:
/
- Start.html
- WEB-INF/
- web.xml
+ lib/
+ classes/
Running the web aplication and pointing your browser at http://localhost:8080/Start now will produce the following page output:
Contribute to the Warp Framework
Get involved! Email me on the
Warp mailing list if you want to help or have a problem to report. Problems with Guice should be reported on the
Guice user mailing list.