Add documentation for Servlet 2.5 and GAE

Fixes gh-1104
This commit is contained in:
Dave Syer 2014-11-03 17:04:57 +00:00
parent f304d46955
commit 9b6cb83be5
3 changed files with 69 additions and 0 deletions

View File

@ -299,6 +299,10 @@ run the app. A http://issues.gradle.org/browse/GRADLE-2871[bug in Gradle] curren
prevents you from using Gradle newer than 1.6.
[[cloud-deployment-gae]]
== Google App Engine
Google App Engine is tied to the Servlet 2.5 API, so you can't deploy a Spring Application
there without some modifications. See the <<howto.adoc#howto-servlet-2-5, Servlet 2.5 section>> of this guide.
[[cloud-deployment-whats-next]]
== What to read next

View File

@ -2064,3 +2064,7 @@ context.
Applications that are not already Spring applications might be convertible to a Spring
Boot application, and the guidance above might help, but your mileage may vary.
[[howto-servlet-2-5]]
=== Deploying a WAR in an Old (Servlet 2.5) Container
include::servlet-2.5.adoc[]

View File

@ -0,0 +1,61 @@
Spring Boot uses Servet 3.0 APIs to initialize the `ServletContext`
(register `Servlets` etc.) so you can't use the same application out
of the box in a Servlet 2.5 container. It *is* however possible to run
a Spring Boot application on an older container with some special
tools. If you include `org.springframework.boot:spring-boot-legacy` as
a dependency
(https://github.com/scratches/spring-boot-legacy[maintained
separately] to the core of Spring Boot and currently available at
1.0.0.RELEASE), all you should need to do is create a `web.xml` and
declare a context listener to create the application context and your
filters and servlets. The context listener is a special purpose one
for Spring Boot, but the rest of it is normal for a Spring application
in Servlet 2.5. Example:
[source,xml,indent=0]
----
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>demo.Application</param-value>
</context-param>
<listener>
<listener-class>org.springframework.boot.legacy.context.web.SpringBootContextLoaderListener</listener-class>
</listener>
<filter>
<filter-name>metricFilter</filter-name>
<filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
</filte>r
<filter-mapping>
<filter-name>metricFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<servlet>
<servlet-name>appServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextAttribute</param-name>
<param-value>org.springframework.web.context.WebApplicationContext.ROOT</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>appServlet</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
</web-app>
----
In this example we are using a single application context (the one created by the context listener) and
attaching it to the `DispatcherServlet` using an init parameter. This is normal in a Spring Boot
application (you normally only have one application conext).