整合vue-cli前端、基于springboot的javaweb后端
服务器使用的系统是CentOS 8.5 64位 UEFI版
vue-cli中对后端的所有请求路径都要改为:http或者https://服务器的公网IP:后端的端口号(在application.yml的server:port:配置)/请求路径
build后得到的dist的static替代springboot后端的resources.static,dist的index.html替代后端的resources.template的index.html
并将index.html中的请求路径对应配置好application.yml中的spring:resources:static-locations:,
比如我的html中的静态资源请求路径原为:
<script type=text/javascript src=/static/js/manifest.2ae2e69a05c33dfc65f8.js></script>
<script type=text/javascript src=/static/js/vendor.4b79585197a373acf211.js></script>
<script type=text/javascript src=/static/js/app.65ea499b53b62ad6f85b.js></script>
被我改为:
<script type=text/javascript src=js/manifest.2ae2e69a05c33dfc65f8.js></script>
<script type=text/javascript src=js/vendor.4b79585197a373acf211.js></script>
<script type=text/javascript src=js/app.65ea499b53b62ad6f85b.js></script>
同时,application.yml的spring:resources:static-locations:配置为:
spring:
application:
name: travelwebsite
resources:
static-locations: [classpath:/static/] #就是这个
这样就将“js/manifest.2ae2e69a05c33dfc65f8.js”映射为:“classpath:/static/js/manifest.2ae2e69a05c33dfc65f8.js”,如果没配置正确的话,访问到的index.html就会加载不了css、JavaScript等静态资源
后端控制层创建一个控制器,内容如下,这样才可以通过thymeleaf将ip:端口号/映射访问到首页,thymeleaf的映射路径不做配置(即使用默认的配置)
@Controller
public class IndexController {//类名可变
@RequestMapping(value = {"/","/index"})
public String index() {
return "index"; // 地址指向index.hml
}
}
然后在maven的生命周期中运行:install,在target中生成该项目的jar包传到服务器上
后端的部分配置
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.7.12</version>
<groupId>com.mysql</groupId>
<artifactId>mysql-connector-j</artifactId>
<scope>runtime</scope>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.1.17</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
服务器的Tomcat
使用Tomcat9.0.76(springboot2.7.12中的内嵌Tomcat版本是9.0.75)
解压安装包、启动Tomcat、配置防火墙、配置服务器安全组,见文章:Linux系统部署项目 笔记
服务器的mysql
版本:mysql-8.0.22(springboot2.7.12中mysql-connector-j的默认版本是8.0.22)
解压、安装、启动服务、修改密码、修改密码策略、设置远程连接、配置防火墙上的3306端口、服务器安全组的3306端口
mysql报错:
[root@iZf8z6i6vaudoz84vmocfcZ mysql]# mysql -uroot -p
Enter password:
ERROR 1045 (28000): Access denied for user ‘root’@‘localhost’ (using password: YES)
这个错误消息表明在尝试使用给定的用户名和密码访问 MySQL 数据库时被拒绝了。可能是由于使用的密码不正确或者 MySQL 用户权限配置问题引起的。如果确定密码是正确的,那么可能是由于 MySQL 用户权限配置的问题导致访问被拒绝。您可以尝试检查以下几个方面:
-
检查使用的用户名和密码是否对应一个具有正确访问权限的 MySQL 用户。可以使用
mysql> SHOW GRANTS FOR 'root'@'localhost';
命令检查用户的权限。 -
确认 MySQL 服务是否正在运行。可以使用
systemctl status mysql
命令检查 MySQL 服务状态,如果服务没有运行,则需要使用systemctl start mysql
命令启动服务。 -
检查 MySQL 是否启用了远程连接。默认情况下,MySQL 只允许本地连接。可以通过修改 MySQL 配置文件来允许远程连接。
mysql报错:
update user set host = ‘%’ where user = ‘root’;
ERROR 1046 (3D000): No database selected
该错误消息表明您在更新用户表时没有选择要使用的数据库。您需要先选择一个数据库,然后才能执行 update
命令。
先创建需要用到的数据库:create database 数据库名;
可以使用 USE
命令来选择要使用的数据库,例如:
mysql> USE 数据库名;
请注意将上述命令中的 mydatabase
替换为您要使用的数据库名称。然后您可以执行更新用户表的命令:
mysql> update user set host = '%' where user = 'root';
这个命令将会把 root
用户的可访问主机设置为任意主机(%
)。请注意,在生产环境中,通常不应该将主机设置为 %
,因为这将允许来自任何 IP 地址的连接到数据库。
记得最后使用 FLUSH PRIVILEGES;
命令来刷新权限并应用新的更改。
运行项目
在项目目录下:
nohup java -jar boot工程.jar &> hello.log &
后台运行 java -jar 命令,并将日志输出到 hello.log 文件
kill -9 进程ID
停止SpringBoot程序
在本地使用Navicat连接到服务器上的mysql服务并创建数据库中的数据表
端口被占用
查找占用了端口80的进程,并手动杀死该进程。具体操作步骤如下:
-
打开终端。
-
运行以下命令找到占用80端口的进程:
sudo lsof -i:80
- 找到占用80端口的进程ID(PID),并使用以下命令终止该进程:
sudo kill -9 <PID>
请求网址里的端口号后面需要有项目名吗?
这取决于你是否在Spring Boot应用程序中设置了上下文路径。如果你没有显式地设置应用程序的上下文路径,那么访问静态文件的URL将是 “http://localhost:8080/static/js/app.091cb8f40353b8b51e12.js” ,其中端口号后面没有项目名。这是因为默认情况下Spring Boot将项目的根路径设置为应用程序的上下文路径。例如,访问一个控制器可以使用类似于 “http://localhost:8080/hello” 的URL,其中 “hello” 是你定义的控制器的请求映射路径,它会被映射到与请求路径相同的控制器方法上。
如果你显式地设置了应用程序的上下文路径,那么访问静态资源的URL将需要包含该上下文路径。例如,如果你在应用程序的配置文件(如application.properties或application.yml)中设置了上下文路径为 “/myapp” ,那么访问静态资源的URL将变为 “http://localhost:8080/myapp/static/js/app.091cb8f40353b8b51e12.js” ,其中 “myapp” 是你设置的上下文路径。
因此,要回答你的问题,URL是否需要包含项目名称取决于你是否设置了应用程序的上下文路径。如果你没有设置上下文路径,URL中不需要包含项目名称。否则,URL需要包含应用程序的上下文路径。