老版本的weblogic 只支持servlet 2.5规范,spring boot 使用的是无web.xml方式是3.0规范,所以直接打包的话,是没法正常识别和部署的。
所以需要:
1. 加入spring boot 兼容2.5的依赖:
官网:
pom.xml加入:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-legacy</artifactId>
<version>1.0.0.RELEASE</version>
</dependency>
2. 部署到war的方式:
也是修改pom.xml文件
<packaging>war</packaging>
去掉tomcat的集成
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
</exclusion>
</exclusions>
</dependency>
3. 新增web.xml文件
参考 模版
https://github.com/dsyer/spring-boot-legacy/blob/master/spring-boot-legacy/docs/sample-web.xml
其中需要修改的地方:
第一点:
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>demo.Application</param-value>
</context-param>
这个是你项目的启动application的class全路径,比如上面就是对应 demo.Application.class
第二点:
添加listener, 不加的话,代码无法使用 RequestContextHolder.getRequestAttributes()获取session
<listener>
<listener-class>org.springframework.web.context.request.RequestContextListener</listener-class>
</listener>
第三点:
把在配置类里面配置的个性化 filter,listener,servlet统统加回去,这个和传统的spring mvc一样
注意 dispatcher 不需要再加了,就用模版上面提供的那个appServlet
不允许添加,否则启动失败
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
因为已经提供了一个 org.springframework.boot.legacy.context.web.SpringBootContextLoaderListener