Montag, 13. April 2009

Wicket base webapp

After having some trouble finding a slim and small base layout in the web, serving as template for any Wicket application I might develop (without using Jetty or providing any "quickstart" framework), I'd like to post a solution using filters instead of the Wicket servlet (recommended as of Wicket 1.4+):

web.xml:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE web-app
PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd">

<web-app>
<display-name>Wicket Base</display-name>

<context-param>
<param-name>configuration</param-name>
<param-value>deployment</param-value>
</context-param>

<filter>
<filter-name>wicketbase</filter-name>
<filter-class>org.apache.wicket.protocol.http.WicketFilter</filter-class>
<init-param>
<param-name>applicationClassName</param-name>
<param-value>com.wicketbase.WebApplicationBase</param-value>
</init-param>
</filter>

<filter-mapping>
<filter-name>wicketbase</filter-name>
<url-pattern>/wbase/*</url-pattern>
</filter-mapping>

</web-app>


WebApplicationBase.java:

public class WebApplicationBase extends WebApplication {

@Override
protected void init() {
this.getMarkupSettings().setDefaultMarkupEncoding("UTF-8");
this.getRequestCycleSettings().setResponseRequestEncoding("UTF-8");
}

@Override
public Class getHomePage() {
return WebPageBase.class;
}

public static WebadminApplication get() {
return (WebadminApplication) Application.get();
}

@Override
public Session newSession(Request request, Response response) {
return new WebSessionBase(request);
}

}


WebSessionBase.java:

public class WebSessionBase extends WebSession {

public static WebSessionBase get() {
return (WebSessionBase) Session.get();
}

protected WebSessionBase(Request request) {
super(request);
setLocale(new Locale("de", "DE_EURO"));
}


}


WebPageBase.java:

public class WebPageBase extends WebPage {

public WebPageBase() {
add(HeaderContributor.forCss(WebadminPage.class, "res/style.css"));
}

public WebSessionBase getWebSessionBase() {
return (WebSessionBase)getSession();
}
}


WebPageBase.html (just for completing this example):

<?xml version="1.0" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:wicket="http://wicket.apache.org/" xml:lang="en" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
</head>

<body>
...
</body>
</html>


Ant build script:

<?xml version="1.0" encoding="UTF-8"?>
<project default="war" name="wicketbase" basedir=".">
<property name="final.name" value="wicketbase" />
<property name="src.main.dir" value="src/com/wicketbase" />
<property name="src.web.dir" value="webapp" />
<property name="lib.dir" value="lib" />
<property name="build.dir" value="target" />
<property name="build.main.classes" value="bin" />
<property name="build.reports.dir" value="${build.dir}/reports" />
<path id="build.classpath">
<fileset dir="${lib.dir}">
<include name="**/*.jar" />
</fileset>
</path>
<target name="clean">
<delete dir="${build.dir}" failonerror="false" />
<delete file="${final.name}.war" failonerror="false" />
</target>
<target name="init">
<mkdir dir="${build.dir}" />
</target>
<target name="compile" depends="init">
<mkdir dir="${build.main.classes}" />
<javac destdir="${build.main.classes}" target="1.5" source="1.5"
srcdir="${src.main.dir}" classpathref="build.classpath" />
<copy todir="${build.main.classes}">
<fileset dir="${src.main.dir}">
<include name="**/*.*" />
<exclude name="**/*.java" />
</fileset>
</copy>
</target>
<target name="war" depends="compile">
<war destfile="${build.dir}/${final.name}.war" webxml="${src.web.dir}/WEB-INF/web.xml">
<lib dir="lib">
<include name="*.jar" />
</lib>
<classes dir="${build.main.classes}" />
<fileset dir="${src.web.dir}">
<include name="**/*" />
<exclude name="**/web.xml" />
</fileset>
</war>
</target>
</project>


The folder layout of the webapp is as you would probably expect it. Wicket jar's go to "WEB-INF/lib", your classes and the HTML go to "WEB-INF/classes/[package]".

Labels:

0 Kommentare:

Kommentar veröffentlichen

Abonnieren Kommentare zum Post [Atom]

Links zu diesem Post:

Link erstellen

<< Startseite