SpringBoot之拦截器获取项目根目录
目录
- 更多分享:www.catbro.cn
-
在开发web客户端时,定位资源路径是,我们可以通过./来表示项目的相对路径,但是./会受到当前请求路径的影响,在很多情况下并不是一个很好的方法,通常情况下我们可以通过获取项目跟路径来解决这个问题。
-
在JSP中我们有pageContext.request.ContextPath来定位。
-
但是在使用SpringBoot时,一般我们都不推荐再使用JSP这个技术了。这也是官方文档为什么又没JSP与SpringBoot的使用的教程的原因。
-
此时我们可以通过拦截器,在返回的使用,在requst中注入我们的bash路径。
import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.web.servlet.config.annotation.InterceptorRegistration; import org.springframework.web.servlet.config.annotation.InterceptorRegistry; import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter; import org.springframework.web.servlet.handler.HandlerInterceptorAdapter; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; /** * */ @Configuration public class WebRequestPathConfig extends WebMvcConfigurerAdapter { private final static Logger logger = LoggerFactory.getLogger(WebRequestPathConfig.class); @Bean public RequestExtendPathInterceptor getRequestExtendPathInterceptor() { return new RequestExtendPathInterceptor(); } public void addInterceptors(InterceptorRegistry registry) { InterceptorRegistration addInterceptor = registry.addInterceptor(getRequestExtendPathInterceptor()); // 拦截配置 addInterceptor.addPathPatterns("/**"); } private class RequestExtendPathInterceptor extends HandlerInterceptorAdapter { @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { String scheme = request.getScheme(); String serverName = request.getServerName(); int port = request.getServerPort(); String path = request.getContextPath(); String basePath = scheme + "://" + serverName + ":" + port + path; logger.info(basePath); request.setAttribute("basePath", basePath); return true; } } }
- 如上,我们在模版引擎的页面中就可以通过basePath来获取项目的根目录了