<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-8064142385114256696</id><updated>2011-07-08T16:29:20.992+02:00</updated><category term='wicket webapp tomcat'/><title type='text'>Roman Uhlig: DevBlog</title><subtitle type='html'>Bits and pieces that may be hard to find and/or may be useful in your daily dev madness.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://devblog-drakanor.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8064142385114256696/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://devblog-drakanor.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Drakanor</name><uri>http://www.blogger.com/profile/02031485821161583069</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>5</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-8064142385114256696.post-8912847843580261021</id><published>2009-09-17T17:46:00.002+02:00</published><updated>2009-09-17T17:49:58.772+02:00</updated><title type='text'>Favicon with Wicket and HeaderContributer</title><content type='html'>Based on &lt;a href="http://www.wicket-praxis.de/blog/2009/01/11/favicon-mit-headercontributor/"&gt;Michael's example&lt;/a&gt;, I did a complete example for a Wicket header contributer generating a favicon entry:&lt;br /&gt;&lt;br /&gt;&lt;div style="background-color: rgb(245, 245, 245); font-family: Courier New; font-size: 11px; color: black;"&gt;&lt;pre style="white-space: -moz-pre-wrap ! important;"&gt;public class FavIconHeaderContributor extends AbstractHeaderContributor {&lt;br /&gt; &lt;br /&gt; private static final long serialVersionUID = 1L;&lt;br /&gt;&lt;br /&gt; private final FavIconContributor contributor;&lt;br /&gt; &lt;br /&gt; private static final class FavIconContributor implements IHeaderContributor {&lt;br /&gt; &lt;br /&gt;  private static final long serialVersionUID = 1L;&lt;br /&gt;  &lt;br /&gt;  ResourceReference _resourceReference;&lt;br /&gt; &lt;br /&gt;  public FavIconContributor(ResourceReference resourceReference) {&lt;br /&gt;   _resourceReference = resourceReference;&lt;br /&gt;  }&lt;br /&gt; &lt;br /&gt;  public void renderHead(IHeaderResponse response) {&lt;br /&gt;   CharSequence url = RequestCycle.get().urlFor(_resourceReference);&lt;br /&gt;   response.renderString(getFavIconReference(url));&lt;br /&gt;  }&lt;br /&gt; &lt;br /&gt;  private CharSequence getFavIconReference(CharSequence url) {&lt;br /&gt;   StringBuilder sb = new StringBuilder();&lt;br /&gt;   sb.append("&amp;lt;link rel=\"shortcut icon\" href=\"");&lt;br /&gt;   sb.append(url);&lt;br /&gt;   sb.append("\" type=\"image/x-icon\"&amp;gt;\n");&lt;br /&gt;   return sb.toString();&lt;br /&gt;  }&lt;br /&gt;  &lt;br /&gt; }&lt;br /&gt; &lt;br /&gt; public FavIconHeaderContributor(ResourceReference resourceReference) {&lt;br /&gt;  contributor = new FavIconContributor(resourceReference);&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; @Override&lt;br /&gt; public final IHeaderContributor[] getHeaderContributors() {&lt;br /&gt;  return new IHeaderContributor[] { contributor };&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; @Override&lt;br /&gt; public String toString() {&lt;br /&gt;  return contributor._resourceReference.getName();&lt;br /&gt; }&lt;br /&gt; &lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8064142385114256696-8912847843580261021?l=devblog-drakanor.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://devblog-drakanor.blogspot.com/feeds/8912847843580261021/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://devblog-drakanor.blogspot.com/2009/09/favicon-with-wicket-and.html#comment-form' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8064142385114256696/posts/default/8912847843580261021'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8064142385114256696/posts/default/8912847843580261021'/><link rel='alternate' type='text/html' href='http://devblog-drakanor.blogspot.com/2009/09/favicon-with-wicket-and.html' title='Favicon with Wicket and HeaderContributer'/><author><name>Drakanor</name><uri>http://www.blogger.com/profile/02031485821161583069</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8064142385114256696.post-3967141293977335668</id><published>2009-05-06T18:53:00.005+02:00</published><updated>2009-05-06T19:06:47.634+02:00</updated><title type='text'>Some PostgreSQL stuff</title><content type='html'>Just some bits that might be useful when working with PostgreSQL databases. Everything is working with version 8.x, I can't say anything about the compatibility with older versions.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Display the sizes all of your databases running on a particular server:&lt;/span&gt;&lt;br /&gt;&lt;div style="background-color: rgb(245, 245, 245); font-family: Courier New; font-size: 11px; color: black;"&gt;&lt;pre style="white-space: -moz-pre-wrap ! important;"&gt;SELECT pg_database.datname, pg_size_pretty(pg_database_size(pg_database.datname)) AS size FROM pg_database;&lt;br /&gt;&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Show running PostgreSQL thread on Linux:&lt;/span&gt;&lt;br /&gt;&lt;div style="background-color: rgb(245, 245, 245); font-family: Courier New; font-size: 11px; color: black;"&gt;&lt;pre style="white-space: -moz-pre-wrap ! important;"&gt;ps auxww | grep ^postgres&lt;br /&gt;&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;When upgrading to a new version (usually major or secondary), you have to do a full dump and restore. This one works well for me for some time now:&lt;/span&gt;&lt;br /&gt;&lt;div style="background-color: rgb(245, 245, 245); font-family: Courier New; font-size: 11px; color: black;"&gt;&lt;pre style="white-space: -moz-pre-wrap ! important;"&gt;    * pg_dumpall -o -U postgres &gt; [dump file]&lt;br /&gt;    * stop postgresql server&lt;br /&gt;    * you may want to save your configuration files (e.g. postgresql.conf, pg_hba.conf)&lt;br /&gt;    * now you may safely remove your old postgresql installation&lt;br /&gt;    * rm -rf /var/lib/postgresql/data&lt;br /&gt;    * install new postgresql&lt;br /&gt;    * merge changes from postgresql.conf and pg_hba.conf&lt;br /&gt;    * start new postgresql server&lt;br /&gt;    * psql -f [dumpfile] -U postgres &lt;br /&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8064142385114256696-3967141293977335668?l=devblog-drakanor.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://devblog-drakanor.blogspot.com/feeds/3967141293977335668/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://devblog-drakanor.blogspot.com/2009/05/some-postgresql-stuff.html#comment-form' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8064142385114256696/posts/default/3967141293977335668'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8064142385114256696/posts/default/3967141293977335668'/><link rel='alternate' type='text/html' href='http://devblog-drakanor.blogspot.com/2009/05/some-postgresql-stuff.html' title='Some PostgreSQL stuff'/><author><name>Drakanor</name><uri>http://www.blogger.com/profile/02031485821161583069</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8064142385114256696.post-7937099882892285102</id><published>2009-04-27T16:38:00.004+02:00</published><updated>2009-04-27T16:47:49.220+02:00</updated><title type='text'>script based phpBB user add</title><content type='html'>For a customer I had to implement a script based user management for phpBB (add/delete) called from within a Java web app using existing login data. After evaluating and merging a lot of non-working suggestions/examples I managed to build a working script (tested with phpBB 3.0.4). Maybe it saves you some time.&lt;br /&gt;&lt;br /&gt;&lt;div style="background-color: rgb(245, 245, 245); font-family: Courier New; font-size: 11px; color: black;"&gt;&lt;pre style="white-space: -moz-pre-wrap ! important;"&gt;&lt;br /&gt;&amp;lt;?php&lt;br /&gt;if (isset($_REQUEST['forum_username']) &amp;&amp; isset($_REQUEST['forum_password']) &amp;&amp; isset($_REQUEST['forum_email'])) {&lt;br /&gt; &lt;br /&gt; define('IN_PHPBB', true);&lt;br /&gt; &lt;br /&gt; $phpbb_root_path = (defined('PHPBB_ROOT_PATH')) ? PHPBB_ROOT_PATH : '../forum/';     &lt;br /&gt; $phpEx = substr(strrchr(__FILE__, '.'), 1);&lt;br /&gt;&lt;br /&gt; include($phpbb_root_path . 'common.' . $phpEx);&lt;br /&gt; include($phpbb_root_path . 'includes/ucp/ucp_register.php');&lt;br /&gt; include($phpbb_root_path . 'includes/functions_user.' . $phpEx);&lt;br /&gt; &lt;br /&gt; $username = $_REQUEST['forum_username'];&lt;br /&gt; $username_clean = strtolower($username_clean);&lt;br /&gt; $password = $_REQUEST['forum_password'];&lt;br /&gt; $email = $_REQUEST['forum_email'];&lt;br /&gt; &lt;br /&gt; $user_row = array(&lt;br /&gt;  'username' =&gt; $username,&lt;br /&gt;  'username_clean' =&gt; $username_clean,&lt;br /&gt;  'user_password' =&gt; phpbb_hash($password),&lt;br /&gt;  'user_pass_convert' =&gt; 0,&lt;br /&gt;  'user_email' =&gt; $email,&lt;br /&gt;  'user_email_hash' =&gt; crc32(strtolower($email)) . strlen($email),&lt;br /&gt;  'group_id' =&gt; 7,&lt;br /&gt;  'user_type' =&gt; 0,&lt;br /&gt; );&lt;br /&gt; &lt;br /&gt; user_add($user_row);&lt;br /&gt;}&lt;br /&gt;?&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8064142385114256696-7937099882892285102?l=devblog-drakanor.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://devblog-drakanor.blogspot.com/feeds/7937099882892285102/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://devblog-drakanor.blogspot.com/2009/04/script-based-phpbb-user-add.html#comment-form' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8064142385114256696/posts/default/7937099882892285102'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8064142385114256696/posts/default/7937099882892285102'/><link rel='alternate' type='text/html' href='http://devblog-drakanor.blogspot.com/2009/04/script-based-phpbb-user-add.html' title='script based phpBB user add'/><author><name>Drakanor</name><uri>http://www.blogger.com/profile/02031485821161583069</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8064142385114256696.post-677993949651954470</id><published>2009-04-13T17:56:00.014+02:00</published><updated>2009-05-29T17:01:00.263+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='wicket webapp tomcat'/><title type='text'>Wicket base webapp</title><content type='html'>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+):&lt;br /&gt;&lt;br /&gt;web.xml:&lt;br /&gt;&lt;div style="background-color:#f5f5f5; font-family:Courier New; font-size:11px; color:black;"&gt;&lt;pre style="white-space: pre-wrap; white-space: -moz-pre-wrap !important; white-space: -pre-wrap; white-space: -o-pre-wrap; word-wrap: break-word;"&gt;&lt;br /&gt;&amp;lt;?xml version="1.0" encoding="UTF-8"?&amp;gt;&lt;br /&gt;&amp;lt;!DOCTYPE web-app&lt;br /&gt;      PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"&lt;br /&gt;      "http://java.sun.com/dtd/web-app_2_3.dtd"&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;web-app&amp;gt;&lt;br /&gt;  &amp;lt;display-name&amp;gt;Wicket Base&amp;lt;/display-name&amp;gt;&lt;br /&gt;&lt;br /&gt;  &amp;lt;context-param&amp;gt;&lt;br /&gt;    &amp;lt;param-name&amp;gt;configuration&amp;lt;/param-name&amp;gt;&lt;br /&gt;    &amp;lt;param-value&amp;gt;deployment&amp;lt;/param-value&amp;gt;&lt;br /&gt;  &amp;lt;/context-param&amp;gt;&lt;br /&gt; &lt;br /&gt;  &amp;lt;filter&amp;gt;&lt;br /&gt;    &amp;lt;filter-name&amp;gt;wicketbase&amp;lt;/filter-name&amp;gt;&lt;br /&gt;    &amp;lt;filter-class&amp;gt;org.apache.wicket.protocol.http.WicketFilter&amp;lt;/filter-class&amp;gt;&lt;br /&gt;    &amp;lt;init-param&amp;gt;&lt;br /&gt;      &amp;lt;param-name&amp;gt;applicationClassName&amp;lt;/param-name&amp;gt;&lt;br /&gt;      &amp;lt;param-value&amp;gt;com.wicketbase.WebApplicationBase&amp;lt;/param-value&amp;gt;&lt;br /&gt;    &amp;lt;/init-param&amp;gt;&lt;br /&gt;  &amp;lt;/filter&amp;gt;&lt;br /&gt;&lt;br /&gt;  &amp;lt;filter-mapping&amp;gt;&lt;br /&gt;    &amp;lt;filter-name&amp;gt;wicketbase&amp;lt;/filter-name&amp;gt;&lt;br /&gt;    &amp;lt;url-pattern&amp;gt;/wbase/*&amp;lt;/url-pattern&amp;gt;&lt;br /&gt;  &amp;lt;/filter-mapping&amp;gt;&lt;br /&gt;   &lt;br /&gt;&amp;lt;/web-app&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;WebApplicationBase.java:&lt;br /&gt;&lt;div style="background-color:#f5f5f5; font-family:Courier New; font-size:11px; color:black;"&gt;&lt;pre style="white-space: pre-wrap; white-space: -moz-pre-wrap !important; white-space: -pre-wrap; white-space: -o-pre-wrap; word-wrap: break-word;"&gt;&lt;br /&gt;public class WebApplicationBase extends WebApplication {&lt;br /&gt;&lt;br /&gt;  @Override&lt;br /&gt;  protected void init() {&lt;br /&gt;    this.getMarkupSettings().setDefaultMarkupEncoding("UTF-8");&lt;br /&gt;    this.getRequestCycleSettings().setResponseRequestEncoding("UTF-8");&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  @Override&lt;br /&gt;  public Class&lt;? extends Page&gt; getHomePage() {&lt;br /&gt;    return WebPageBase.class;&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  public static WebadminApplication get() {&lt;br /&gt;    return (WebadminApplication) Application.get();&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  @Override&lt;br /&gt;  public Session newSession(Request request, Response response) {&lt;br /&gt;    return new WebSessionBase(request);&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;WebSessionBase.java:&lt;br /&gt;&lt;div style="background-color:#f5f5f5; font-family:Courier New; font-size:11px; color:black;"&gt;&lt;pre style="white-space: pre-wrap; white-space: -moz-pre-wrap !important; white-space: -pre-wrap; white-space: -o-pre-wrap; word-wrap: break-word;"&gt;&lt;br /&gt;public class WebSessionBase extends WebSession {&lt;br /&gt;&lt;br /&gt;  public static WebSessionBase get() {&lt;br /&gt;    return (WebSessionBase) Session.get();&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  protected WebSessionBase(Request request) {&lt;br /&gt;    super(request);&lt;br /&gt;    setLocale(new Locale("de", "DE_EURO"));&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;WebPageBase.java:&lt;br /&gt;&lt;div style="background-color:#f5f5f5; font-family:Courier New; font-size:11px; color:black;"&gt;&lt;pre style="white-space: pre-wrap; white-space: -moz-pre-wrap !important; white-space: -pre-wrap; white-space: -o-pre-wrap; word-wrap: break-word;"&gt;&lt;br /&gt;public class WebPageBase extends WebPage {&lt;br /&gt; &lt;br /&gt;  public WebPageBase() {&lt;br /&gt;    add(HeaderContributor.forCss(WebadminPage.class, "res/style.css"));&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  public WebSessionBase getWebSessionBase() {&lt;br /&gt;    return (WebSessionBase)getSession();&lt;br /&gt;  }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;WebPageBase.html (just for completing this example):&lt;br /&gt;&lt;div style="background-color:#f5f5f5; font-family:Courier New; font-size:11px; color:black;"&gt;&lt;pre style="white-space: pre-wrap; white-space: -moz-pre-wrap !important; white-space: -pre-wrap; white-space: -o-pre-wrap; word-wrap: break-word;"&gt;&lt;br /&gt;&amp;lt;?xml version="1.0" ?&amp;gt;&lt;br /&gt;&amp;lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&amp;gt; &lt;br /&gt;&amp;lt;html xmlns="http://www.w3.org/1999/xhtml" xmlns:wicket="http://wicket.apache.org/" xml:lang="en" lang="en"&amp;gt;&lt;br /&gt;&amp;lt;head&amp;gt;&lt;br /&gt; &amp;lt;meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /&amp;gt;&lt;br /&gt;&amp;lt;/head&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;body&amp;gt;&lt;br /&gt;...&lt;br /&gt;&amp;lt;/body&amp;gt;&lt;br /&gt;&amp;lt;/html&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Ant build script:&lt;br /&gt;&lt;div style="background-color:#f5f5f5; font-family:Courier New; font-size:11px; color:black;"&gt;&lt;pre style="white-space: pre-wrap; white-space: -moz-pre-wrap !important; white-space: -pre-wrap; white-space: -o-pre-wrap; word-wrap: break-word;"&gt;&lt;br /&gt;&amp;lt;?xml version="1.0" encoding="UTF-8"?&amp;gt;&lt;br /&gt;&amp;lt;project default="war" name="wicketbase" basedir="."&amp;gt;&lt;br /&gt; &amp;lt;property name="final.name" value="wicketbase" /&amp;gt;&lt;br /&gt; &amp;lt;property name="src.main.dir" value="src/com/wicketbase" /&amp;gt;&lt;br /&gt; &amp;lt;property name="src.web.dir" value="webapp" /&amp;gt;&lt;br /&gt; &amp;lt;property name="lib.dir" value="lib" /&amp;gt;&lt;br /&gt; &amp;lt;property name="build.dir" value="target" /&amp;gt;&lt;br /&gt; &amp;lt;property name="build.main.classes" value="bin" /&amp;gt;&lt;br /&gt; &amp;lt;property name="build.reports.dir" value="${build.dir}/reports" /&amp;gt;&lt;br /&gt; &amp;lt;path id="build.classpath"&amp;gt;&lt;br /&gt;  &amp;lt;fileset dir="${lib.dir}"&amp;gt;&lt;br /&gt;   &amp;lt;include name="**/*.jar" /&amp;gt;&lt;br /&gt;  &amp;lt;/fileset&amp;gt;&lt;br /&gt; &amp;lt;/path&amp;gt;&lt;br /&gt; &amp;lt;target name="clean"&amp;gt;&lt;br /&gt;  &amp;lt;delete dir="${build.dir}" failonerror="false" /&amp;gt;&lt;br /&gt;  &amp;lt;delete file="${final.name}.war" failonerror="false" /&amp;gt;&lt;br /&gt; &amp;lt;/target&amp;gt;&lt;br /&gt; &amp;lt;target name="init"&amp;gt;&lt;br /&gt;  &amp;lt;mkdir dir="${build.dir}" /&amp;gt;&lt;br /&gt; &amp;lt;/target&amp;gt;&lt;br /&gt; &amp;lt;target name="compile" depends="init"&amp;gt;&lt;br /&gt;  &amp;lt;mkdir dir="${build.main.classes}" /&amp;gt;&lt;br /&gt;  &amp;lt;javac destdir="${build.main.classes}" target="1.5" source="1.5"&lt;br /&gt;   srcdir="${src.main.dir}" classpathref="build.classpath" /&amp;gt;&lt;br /&gt;  &amp;lt;copy todir="${build.main.classes}"&amp;gt;&lt;br /&gt;   &amp;lt;fileset dir="${src.main.dir}"&amp;gt;&lt;br /&gt;    &amp;lt;include name="**/*.*" /&amp;gt;&lt;br /&gt;    &amp;lt;exclude name="**/*.java" /&amp;gt;&lt;br /&gt;   &amp;lt;/fileset&amp;gt;&lt;br /&gt;  &amp;lt;/copy&amp;gt;&lt;br /&gt; &amp;lt;/target&amp;gt;&lt;br /&gt; &amp;lt;target name="war" depends="compile"&amp;gt;&lt;br /&gt;  &amp;lt;war destfile="${build.dir}/${final.name}.war" webxml="${src.web.dir}/WEB-INF/web.xml"&amp;gt;&lt;br /&gt;   &amp;lt;lib dir="lib"&amp;gt;&lt;br /&gt;    &amp;lt;include name="*.jar" /&amp;gt;&lt;br /&gt;   &amp;lt;/lib&amp;gt;&lt;br /&gt;   &amp;lt;classes dir="${build.main.classes}" /&amp;gt;&lt;br /&gt;   &amp;lt;fileset dir="${src.web.dir}"&amp;gt;&lt;br /&gt;    &amp;lt;include name="**/*" /&amp;gt;&lt;br /&gt;    &amp;lt;exclude name="**/web.xml" /&amp;gt;&lt;br /&gt;   &amp;lt;/fileset&amp;gt;&lt;br /&gt;  &amp;lt;/war&amp;gt;&lt;br /&gt; &amp;lt;/target&amp;gt;&lt;br /&gt;&amp;lt;/project&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;The folder layout of the webapp is as you would probably expect it. Wicket jar's go to "WEB-INF/lib", your classes &lt;span style="font-weight:bold;"&gt;and&lt;/span&gt; the HTML go to "WEB-INF/classes/[package]".&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8064142385114256696-677993949651954470?l=devblog-drakanor.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://devblog-drakanor.blogspot.com/feeds/677993949651954470/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://devblog-drakanor.blogspot.com/2009/04/wicket-base-webapp.html#comment-form' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8064142385114256696/posts/default/677993949651954470'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8064142385114256696/posts/default/677993949651954470'/><link rel='alternate' type='text/html' href='http://devblog-drakanor.blogspot.com/2009/04/wicket-base-webapp.html' title='Wicket base webapp'/><author><name>Drakanor</name><uri>http://www.blogger.com/profile/02031485821161583069</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8064142385114256696.post-9041547783906576235</id><published>2009-03-04T12:40:00.007+01:00</published><updated>2009-03-04T12:50:48.735+01:00</updated><title type='text'>Regular expression for email validation</title><content type='html'>After unsuccessfully searching the web for a working common POSIX conform regular expression for validating email addresses, I took the time and built one. It should cover almost almost any possible format:&lt;br /&gt;&lt;br /&gt;&lt;input readonly="readonly" style="width: 100%; background-color: rgb(240, 240, 240);" value="^[a-zA-Z0-9_\.-]*[a-zA-Z0-9]@[a-zA-Z0-9_\.-]*[a-zA-Z0-9]\.[a-zA-Z0-9\.-]*[a-zA-Z]{2,}$" type="text"&gt;&lt;br /&gt;&lt;br&gt;&lt;br&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8064142385114256696-9041547783906576235?l=devblog-drakanor.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://devblog-drakanor.blogspot.com/feeds/9041547783906576235/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://devblog-drakanor.blogspot.com/2009/03/regular-expression-for-email-validation.html#comment-form' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8064142385114256696/posts/default/9041547783906576235'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8064142385114256696/posts/default/9041547783906576235'/><link rel='alternate' type='text/html' href='http://devblog-drakanor.blogspot.com/2009/03/regular-expression-for-email-validation.html' title='Regular expression for email validation'/><author><name>Drakanor</name><uri>http://www.blogger.com/profile/02031485821161583069</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>
