内容简介:最近想了下springboot前端路径的伪静态实现。通过百度最容易找到的方案是使用跟踪了一下springboot WEB请求处理的过程,找到了一个关键类:
最近想了下springboot前端路径的伪静态实现。
通过百度最容易找到的方案是使用 urlrewritefilter 这个依赖。不过一想到要为这么一件事情就添加一个依赖,还要再添加一个配置文件,还要挨个写一遍所有的路径映射就觉得头疼,所以pass。
跟踪了一下springboot WEB请求处理的过程,找到了一个关键类: UrlPathHelper 。在获取Handler之前,由这个类负责解析请求路径。正好可以在 WebMvcConfigurer 中配置 UrlPathHelper 类的实例,这就给了我们动些手脚的空间。
更贴心的是,springboot获取请求路径的第一选择不是调用 HttpServletRequest . getRequestURI ( ) 方法或者 HttpServletRequest . getServletPath ( ) 方法,而是从 HttpServletRequest 的 attribute 中获取,这样能省下不少力气。
来看下实现方式。
1. 实现伪静态路径解析类
伪静态路径解析类是 UrlPathHelper 类的一个子类,通过重写 getRequestUri ( ) 方法实现了伪静态路径的处理。
代码如下:
public class PseudoStaticPathHelper extends UrlPathHelper {
private static final String SUFFIX = ".html";
@Override
public String getRequestUri(HttpServletRequest request) {
String uri = request.getRequestURI();
if (!uri.endsWith(SUFFIX)) {
return super.getRequestUri(request);
}
String path = (String) request.getAttribute(INCLUDE_REQUEST_URI_ATTRIBUTE);
if (null == path) {
int idx = uri.indexOf(SUFFIX);
uri = uri.substring(0, idx);
request.setAttribute(INCLUDE_REQUEST_URI_ATTRIBUTE, uri);
request.setAttribute(INCLUDE_SERVLET_PATH_ATTRIBUTE, uri);
}
return super.getRequestUri(request);
}
}
代码中的核心部分是下面两句:
request.setAttribute(INCLUDE_REQUEST_URI_ATTRIBUTE, uri); request.setAttribute(INCLUDE_SERVLET_PATH_ATTRIBUTE, uri);
在后面处理中,springboot会优先从 Attribute 中获取请求路径。
2. 添加 WebMvcConfigurer 配置类
然后需要在 WebMvcConfigurer 中配置 PseudoStaticPathHelper 实例。
实现方式如下:
@Configuration
public class WebConfig implements WebMvcConfigurer {
private UrlPathHelper urlPathHelper = new PseudoStaticPathHelper();
@Override
public void configurePathMatch(PathMatchConfigurer configurer) {
configurer.setUrlPathHelper(urlPathHelper);
}
}
然后——这样就可以了。
不写示例代码了。在 Calf 这个项目中有类似的用法,有需要就看看。
End!
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:- 音视频学习 (四) 交叉编译和动态库、静态库入门
- webpack4.0入门指南(二)转换es7语法解析静态资源
- 静态库遇到静态库
- 全局变量,静态全局变量,局部变量,静态局部变量
- Android NDK秘籍--编译静态库、调用静态库
- static特别用法【静态导包】——Java包的静态导入
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
C++ 程序设计语言(特别版)(英文影印版)
[美] Bjarne Stroustrup / 高等教育出版社 / 2001-8-1 / 55.00
《C++程序设计语言》(特别版)(影印版)作者是C++的发明人,对C++语言有着全面、深入的理解,因此他强调应将语言作为设计与编程的工具,而不仅仅是语言本身,强调只有对语言功能有了深入了解之后才能真正掌握它。《C++程序设计语言》编写的目的就是帮助读者了解C++是如何支持编程技术的,使读者能从中获得新的理解,从而成为一名优秀的编程人员和设计人员。一起来看看 《C++ 程序设计语言(特别版)(英文影印版)》 这本书的介绍吧!