在业务中,碰到某些应用需要频繁更新和部署,但是客户完全不会操作(连替换文件找个目录都费劲的那种)。所以在前后端分离的架构中,用SpringBoot自带Tomcat的Tomcat作为前端打包好的代码的Web服务器,并提供伪静态的支持。
前端配置
-
先确定好前端的路径,假设为admin。
-
修改.env.production中根目录的设置
VITE_BASE_URL='/admin/'
- 需要注意,在根目录不为/时,需要配置vue-router的根目录
history: createWebHistory(import.meta.env.VITE_BASE_URL),
- 运行
npm run build打包
后端配置
后端伪静态采用urlrewritefilter实现,项目地址:github.com/paultuckey/…
- 添加依赖
<!-- https://mvnrepository.com/artifact/org.tuckey/urlrewritefilter -->
<dependency>
<groupId>org.tuckey</groupId>
<artifactId>urlrewritefilter</artifactId>
<version>4.0.4</version>
</dependency>
-
在resources目录下新建admin目录,放入打包好的文件
-
配置资源映射
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
@Configuration
public class WebMvcConfig implements WebMvcConfigurer {
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/admin/**").addResourceLocations("classpath:/admin/");
}
}
- 在resources目录下,新增伪静态配置文件urlrewrite.xml
(?!.*\.(.*)$)的含义是不包含带.的文件,防止js和css等静态资源文件重定向,可以根据需求更改
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE urlrewrite PUBLIC "-//tuckey.org//DTD UrlRewrite 3.2//EN"
"http://tuckey.org/res/dtds/urlrewrite3.2.dtd">
<urlrewrite>
<rule>
<from>^/admin/(?!.*\.(.*)$).*$</from>
<to>/admin/index.html</to>
</rule>
</urlrewrite>
- 新建url重写配置类
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.io.Resource;
import org.tuckey.web.filters.urlrewrite.Conf;
import org.tuckey.web.filters.urlrewrite.UrlRewriteFilter;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import java.io.IOException;
@Configuration
public class UrlRewriteConf extends UrlRewriteFilter {
private static final String URL_REWRITE = "classpath:/urlrewrite.xml";
//注入urlrewrite配置文件
@Value(URL_REWRITE)
private Resource resource;
//重写配置文件加载方式
protected void loadUrlRewriter(FilterConfig filterConfig) throws ServletException {
try {
//将Resource对象转换成Conf对象
Conf conf = new Conf(filterConfig.getServletContext(), resource.getInputStream(), resource.getFilename(), "@@traceability@@");
checkConf(conf);
} catch (IOException ex) {
throw new ServletException("Unable to load URL rewrite configuration file from " + URL_REWRITE, ex);
}
}
}
大功告成,现在,启动项目,输入http://localhost:[port]/admin/ 就可以正常访问了。