springboot入门09 – 实现伪静态

栏目: IT技术 · 发布时间: 4年前

内容简介:最近想了下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!


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

创新者

创新者

[美] 沃尔特·艾萨克森 / 关嘉伟、牛小婧 / 中信出版社 / 2017-4 / 88.00元

《创新者》是沃尔特·艾萨克森继全球畅销书《史蒂夫·乔布斯传》之后的又一部力作,不仅讲述了计算机和互联网从无到有的发展历程,为我们 生动地刻画出数字时代的创新者群像,还深度挖掘互联网的精神内核,解读了“诗意科学”这个重大主题。 在近200年的数字化进程中群星闪耀,艾萨克森从第一个计算机程序的创造者、浪漫主义诗人拜伦之女埃达•洛夫莱斯伯爵夫人说起,细数了这一群将科学与人文融合的创新者,他们包括第......一起来看看 《创新者》 这本书的介绍吧!

在线进制转换器
在线进制转换器

各进制数互转换器

MD5 加密
MD5 加密

MD5 加密工具

RGB CMYK 转换工具
RGB CMYK 转换工具

RGB CMYK 互转工具