diff --git a/pom.xml b/pom.xml
index 8a585a2b..3a19acc8 100644
--- a/pom.xml
+++ b/pom.xml
@@ -232,9 +232,9 @@
- javax.servlet
+ org.mortbay.jetty
servlet-api
- 2.5
+ 3.0.20100224
provided
@@ -247,11 +247,23 @@
javax.servlet.jsp.jstl
jstl-api
1.2
-
+
+
+ servlet-api
+ javax.servlet
+
+
+
org.glassfish.web
jstl-impl
1.2
+
+
+ servlet-api
+ javax.servlet
+
+
@@ -483,7 +495,10 @@
org.apache.maven.plugins
maven-war-plugin
2.1.1
-
+
+ false
+
+
com.googlecode.t7mp
@@ -594,5 +609,4 @@
file://${user.home}/local-maven-publish-repository
-
-
\ No newline at end of file
+
diff --git a/src/main/java/com/springsource/greenhouse/config/GreenhouseWebAppInitializer.java b/src/main/java/com/springsource/greenhouse/config/GreenhouseWebAppInitializer.java
new file mode 100644
index 00000000..ee304813
--- /dev/null
+++ b/src/main/java/com/springsource/greenhouse/config/GreenhouseWebAppInitializer.java
@@ -0,0 +1,89 @@
+/*
+ * Copyright 2002-2011 the original author or authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.springsource.greenhouse.config;
+
+import java.util.Set;
+
+import javax.servlet.ServletContext;
+import javax.servlet.ServletException;
+import javax.servlet.ServletRegistration;
+
+import org.springframework.web.WebApplicationInitializer;
+import org.springframework.web.context.ContextLoaderListener;
+import org.springframework.web.context.support.AnnotationConfigWebApplicationContext;
+import org.springframework.web.context.support.GenericWebApplicationContext;
+import org.springframework.web.filter.DelegatingFilterProxy;
+import org.springframework.web.filter.HiddenHttpMethodFilter;
+import org.springframework.web.flash.FlashMapFilter;
+import org.springframework.web.servlet.DispatcherServlet;
+
+/**
+ * Code-based alternative to web.xml for use within Servlet 3.0+ environments. See
+ * {@link WebApplicationInitializer} Javadoc for complete details.
+ *
+ * @author Chris Beams
+ */
+public class GreenhouseWebAppInitializer implements WebApplicationInitializer {
+
+ /**
+ * Register and configure all Servlet container components necessary to power the
+ * Greenhouse web application.
+ */
+ @Override
+ public void onStartup(ServletContext sc) throws ServletException {
+ System.out.println("GreenhouseWebAppInitializer.onStartup()");
+
+ // Create the 'root' Spring application context
+ AnnotationConfigWebApplicationContext root = new AnnotationConfigWebApplicationContext();
+ root.scan("com.springsource.greenhouse.config");
+ root.getEnvironment().setDefaultProfiles("embedded");
+
+ // Manages the lifecycle of the root application context
+ sc.addListener(new ContextLoaderListener(root));
+
+ // Allows attributes to be accessed on the next request
+ sc.addFilter("flashMapFilter", FlashMapFilter.class)
+ .addMappingForUrlPatterns(null, false, "/*");
+
+ // Enables support for DELETE and PUT request methods with web browser clients
+ sc.addFilter("hiddenHttpMethodFilter", HiddenHttpMethodFilter.class)
+ .addMappingForUrlPatterns(null, false, "/*");
+
+ // Secures the application
+ sc.addFilter("securityFilter", new DelegatingFilterProxy("springSecurityFilterChain"))
+ .addMappingForUrlPatterns(null, false, "/*");
+
+ // Handles requests into the application
+ ServletRegistration.Dynamic appServlet =
+ sc.addServlet("appServlet", new DispatcherServlet(new GenericWebApplicationContext()));
+ appServlet.setLoadOnStartup(1);
+ Set mappingConflicts = appServlet.addMapping("/");
+ if (!mappingConflicts.isEmpty()) {
+ throw new IllegalStateException("'appServlet' could not be mapped to '/' due " +
+ "to an existing mapping. This is a known issue under Tomcat versions " +
+ "<= 7.0.14; see https://issues.apache.org/bugzilla/show_bug.cgi?id=51278");
+ }
+
+ // H2 Database Console for managing the app's database
+ ServletRegistration.Dynamic h2Servlet =
+ sc.addServlet("H2Console", org.h2.server.web.WebServlet.class);
+ h2Servlet.setInitParameter("webAllowOthers", "true");
+ h2Servlet.setLoadOnStartup(2);
+ h2Servlet.addMapping("/admin/h2/*");
+ }
+
+}
diff --git a/src/main/webapp/WEB-INF/web.xml b/src/main/webapp/WEB-INF/web.xml
deleted file mode 100644
index b756f7cc..00000000
--- a/src/main/webapp/WEB-INF/web.xml
+++ /dev/null
@@ -1,99 +0,0 @@
-
-
-
-
-
- contextClass
- org.springframework.web.context.support.AnnotationConfigWebApplicationContext
-
-
-
-
- contextConfigLocation
- com.springsource.greenhouse.config
-
-
-
-
- spring.profiles.default
- embedded
-
-
-
-
- org.springframework.web.context.ContextLoaderListener
-
-
-
-
- flashMapFilter
- org.springframework.web.flash.FlashMapFilter
-
-
-
- flashMapFilter
- /*
-
-
-
-
- hiddenHttpMethodFilter
- org.springframework.web.filter.HiddenHttpMethodFilter
-
-
-
- hiddenHttpMethodFilter
- /*
-
-
-
-
- securityFilter
- org.springframework.web.filter.DelegatingFilterProxy
-
- targetBeanName
- springSecurityFilterChain
-
-
-
-
- securityFilter
- /*
-
-
-
-
- H2Console
- org.h2.server.web.WebServlet
-
- -webAllowOthers
- true
-
- 2
-
-
-
- H2Console
- /admin/h2/*
-
-
-
-
- appServlet
- org.springframework.web.servlet.DispatcherServlet
-
-
- contextConfigLocation
-
-
- 1
-
-
-
- appServlet
- /
-
-
-
\ No newline at end of file