spring-boot 使用servlet2.5(四)

環境

  1. jdk 6
  2. tomcat 6.0.53
  3. sts 4.4.2
  4. maven 3.2.5

背景

因爲環境限制,還在使用 servlet 2.5,因此須要將 spring boot 進行配置,支持 servlet 2.5,只針對外部服務器部署。 如下全部的操做創建在以前的項目基礎上。java

刪除 SpringBootServletInitializer

SpringBootServletInitializer 使用的是 servlet 3.0 的特性,因爲未達到,因此該種啓動方式無效了,直接刪除。 修改後的 DemoApplication 以下:web

package jiangbo.demo;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class DemoApplication {

    public static void main(String[] args) {

        SpringApplication.run(DemoApplication.class, args);
    }
}

增長 spring boot 啓動入口

如今,將項目部署到 tomcat6 中,發現 tomcat 正常啓動,可是 spring boot 卻沒有啓動,這是由於 spring boot 沒有啓動入口了。 下面 增長 web.xml,配置啓動入口。spring

增長曆史依賴

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-legacy</artifactId>
    <version>1.1.0.RELEASE</version>
</dependency>

該依賴容許在 web.xml 中來定義 spring boot 的啓動點。apache

spring boot 啓動入口

在 web.xml 中定義 spring boot 的啓動入口。web.xml 在放在 webapp/WEB-INF 目錄下。tomcat

<?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 
    https://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">

    <context-param>
        <param-name>contextConfigLocation</param-name>
        <!-- 這裏換成 spring boot 的啓動類 -->
        <param-value>jiangbo.demo.DemoApplication</param-value>
    </context-param>

    <listener>
        <listener-class>org.springframework.boot.legacy.context.web.SpringBootContextLoaderListener</listener-class>
    </listener>

</web-app>

啓動 tomcat6

將項目部署到 tomcat6中,進行啓動,能夠發現,spring boot 已經正常運行起來了。 訪問 localhost:8080/demo,獲得一個404錯誤,這是因爲尚未註冊 spring mvc 的 dispatcherServlet。服務器

註冊 dispatcherServlet

使用 web.xml 註冊 dispatcherServlet 屬於 spring 的內容。mvc

<servlet>
    <servlet-name>dispatcherServlet</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>dispatcherServlet</servlet-name>
    <url-pattern>/</url-pattern>
</servlet-mapping>

其中的 contextAttribute 表示 spring mvc 沒有本身的 spring 容器,使用 spring boot 啓動起來的 root 容器。app

運行並訪問

再次部署到 tomcat6 中,能夠看到項目正常啓動,訪問 localhost:8080/demo,能夠正常顯示 hello world!webapp

附錄

完整 web.xml

<?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 
    https://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">

    <context-param>
        <param-name>contextConfigLocation</param-name>
        <!-- 這裏換成 spring boot 的啓動類 -->
        <param-value>jiangbo.demo.DemoApplication</param-value>
    </context-param>

    <listener>
        <listener-class>org.springframework.boot.legacy.context.web.SpringBootContextLoaderListener</listener-class>
    </listener>

    <servlet>
        <servlet-name>dispatcherServlet</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>dispatcherServlet</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>

</web-app>

完整 pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.5.22.RELEASE</version>
    </parent>

    <groupId>jiangbo.demo</groupId>
    <artifactId>demo</artifactId>
    <version>1.0.0</version>
    <packaging>war</packaging>

    <properties>
        <tomcat.version>7.0.59</tomcat.version>
    </properties>

    <dependencies>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-legacy</artifactId>
            <version>1.1.0.RELEASE</version>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-tomcat</artifactId>
            <scope>provided</scope>
        </dependency>

        <dependency>
            <groupId>org.apache.tomcat</groupId>
            <artifactId>tomcat-juli</artifactId>
            <version>${tomcat.version}</version>
            <scope>provided</scope>
        </dependency>

    </dependencies>

</project>
相關文章
相關標籤/搜索