使用tomcat10不兼容,接口无法访问,更换tomcat9后丝滑流畅,一部成功

经测试,tomcat10就是不行,tomcat9完全没问题

java打包war包步骤

1.pom.xml文件下,设置打包格式为war

1
2
3
4
<artifactId>cesiumAdmin</artifactId>
<version>1</version>
<packaging>war</packaging>
<name>springboot_cylgis</name>

2.移除内置的tomcat容器(若依好像不用移除也可以,没测试,此处springboot项目需要)

1
2
3
4
5
6
7
8
9
10
11
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<!-- 移除嵌入式tomcat插件 -->
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
</exclusion>
</exclusions>
</dependency>

3.springboot项目需要确保提供外部tomcat依赖

1
2
3
4
5
6
<!--        添加tomcat依赖,需要用到 servlet-api 的相关 jar 包 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<scope>provided</scope>
</dependency>

4.springboot项目设置复写SpringBootServletInitializer启动类,在对应的自己的SpringbootCylgisApplication启动类下

1
2
3
4
5
6
7
8
9
10
11
@SpringBootApplication
public class SpringbootCylgisApplication extends SpringBootServletInitializer{

public static void main(String[] args) {
SpringApplication.run(SpringbootCylgisApplication.class, args);
}
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
return application.sources(SpringbootCylgisApplication.class);
}
}

如果报错alt+shite+enter提示创建新的java类文件,无妨。(需要maven插件进行打包,一般构建项目选择自动有)

1
2
3
4
5
6
7
8
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>

配置好之后直接打包即可

tomcat9配置

server.xml配置

在底部host标签下添加如下配置,其中/prod-api为后面前端打包配置的代理路径,需要对应。(不能配置未真实存在的docBase路径,不然会闪退)

1
2
<Context docBase="dist" path="" reloadable="false"/>
<Context docBase="ruoyi-admin" path="/prod-api" reloadable="false"/>

打包前端项目方文件夹进行重新向,刷新之后不会404

dist文件夹下新建WEB-INF文件夹,下面新建web.xml文件,内容如下

1
2
3
4
5
6
7
8
9
10
11
12
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
version="3.1" metadata-complete="true">
<display-name>/</display-name>
<error-page>
<error-code>404</error-code>
<location>/index.html</location>
</error-page>
</web-app>

前端打包部署(若依项目)

使用vue3前端项目,elementplus+vite+ts
配置代理,vite.config.js,配置打包盒生成环境,其中10.174.207.130是ip地址,8082为后端java项目启动配置的数据接口,需要保持一致。其中VITE_APP_BASE_API配置为"/prod-api" ,部署时需要和上述serve.xml的path对应,在.env.production文件中配置更改。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
server: {
port: 80,
host: true,
open: true,
proxy: {
// https://cn.vitejs.dev/config/#server-proxy
'/dev-api': {
// target: 'http://localhost:8082',
target: 'http://10.174.207.130:8082',

// target: 'http://10.174.207.185:8082',
// target: 'http://10.174.207.190:8082',
changeOrigin: true,
rewrite: (p) => p.replace(/^\/dev-api/, '')
},
[process.env.VITE_APP_BASE_API]: {
// target: 'http://localhost:8082',
target: 'http://10.174.207.130:8082',

// target: 'http://10.174.207.185:8082',
// target: 'http://10.174.207.190:8082',
changeOrigin: true,
pathRewrite: {
['^' + process.env.VITE_APP_BASE_API]: ''
},
// rewrite: (p) => p.replace(/^\/dev-api/, '')
}
}
}
  • 如果项目部署在tomcat的webapps目录下,如前端打包部署名称为‘project’文件夹放在webapps目录下,通过tomcat的访问路径+/project进行访问,修改vue.config.js中的pubicPath的名称与路由的bast路径。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
//-------vue.config.js----------

// 默认情况下,Vue CLI 会假设你的应用是被部署在一个域名的根路径上
// 例如 https://www.ruoyi.vip/。如果应用被部署在一个子路径上,你就需要用这个选项指定这个子路径。例如,如果你的应用被部署在 https://www.ruoyi.vip/admin/,则设置 baseUrl 为 /admin/。
publicPath: process.env.NODE_ENV === "production" ? "/project" : "/",
// baseUrl: '/admin/',
// 在npm run build 或 yarn build 时 ,生成文件的目录名称(要和baseUrl的生产环境路径一致)(默认dist)
outputDir: 'project',

//-------路由index.js更改base为对应的路径----------
export default new Router({
mode: 'history', // 去掉url中的#
base: '/project/',//webapp下的访问名称,路由需要同步更改
scrollBehavior: () => ({ y: 0 }),
routes: constantRoutes
})

部署完成后,启动tomcat9,访问loaclhost:8080直接即可访问文件,记录一下配置代码

更新主要事项

部署完成后,默认的8080直接访问,会导致其他资源重定向到此项目,访问失败,需要配置默认的其他端口。

配置静态资源访问时,除了配置tomcat的server.xml的路线,需要将web.xml的org.apache.catalina.servlets.DefaultServlet的listings设置为true,代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
<servlet>
<servlet-name>default</servlet-name>
<servlet-class>org.apache.catalina.servlets.DefaultServlet</servlet-class>
<init-param>
<param-name>debug</param-name>
<param-value>0</param-value>
</init-param>
<init-param>
<param-name>listings</param-name>
<param-value>true</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>