要实现一个简单的文件系统,需求只是有个前端网页可以查看文件目录和文件内容,那其实nginx和tomcat简单配置后都可以实现,但是如果需要用SpringBoot来实现类似的功能要如何来做呢?
需求
- 处理静态资源
- Url能匹配到相应的文件和目录
- 能有UI展示目录和文件
处理静态资源
在创建一个新的SpringBoot项目后,实现WebMvcConfigurer接口,同时在addInterceptors中添加拦截器处理请求的URL,addResourceHandlers中设置静态资源路径,下图中的resourceLocation和pathPattern分别是file:${user.home}/static/和/* * ,这里以/home/static为文件系统的根目录,而/ * *则表示匹配所有的url pattern
Url能匹配到相应的文件和目录
上面已经配置好了WebMvcConfigurer,现在来看看拦截器如何处理和匹配请求的URL,在拦截器中,获取网络请求中的URI,假如请求URL为 https://www.example.com/my/folder/,获取request的URI,那这里URI就为/my/folder/,此时根据resourceLocation的值加上URI(当前本文中路该值为/home/static),则为/home/static/my/folder/,获取磁盘中的文件或文件夹,判断如果磁盘中存在该文件,如果为文件夹(directory)那就将请求转发到自定义的Controller中(下文会讲解该Controller的作用),如果不为文件夹(directory)则返回true由SpringBoot的Resource Handler来处理,此时如果能匹配到静态文件,则会返回文件流,如果没有则会去匹配是否有存在的Controller,这里我们则不需要关心了。
UI展示目录和文件
下图为上文提到的index Controller,当请求URI匹配到文件夹目录时,转发至此,Controller中的主要逻辑为获取该文件夹下所有文件的信息,比如是否为文件夹,文件名,文件大小等等,同时将信息传入前端html模板中。
controller下图为index.html thymleaf模板
index.html
运行后的前端网页实例
image.png
网友评论