SpringBoot整合springMVC(3)
引子
我们上个内容说到,Application会根据我们依赖的包自动默认判断相应的组件提供给我们使用。而这次,我们整合SpringMVC主要引出几个问题:
- 如何修改端口?
- 如何加载静态资源?
- 如何设置拦截器?
这些就是我们目前整合前需要面对的问题。接下来我就从这三个方面来进行整合开发。
1、修改端口
这里我介绍的是以下两种方法。本人使用的是springboot2.0。
1.1 第一种方法:修改application.properties
server.port=8000
只需要在里面添加这一行一般而言就可以。按住Ctrl键点击后,看一下源码的这一段:
@ConfigurationProperties(prefix = "server", ignoreUnknownFields = true)
public class ServerProperties {
/**
* Server HTTP port.
*/
private Integer port;
这里规定了以server.
开头的前缀,说明此时修改端口进入的是这个类。接下来就是在SpringBoot启动的时候,会从application.properties读取到server.port的值。
1.2 第二种方法:手动配置
在IDEA中,如果你想修改端口号的话,手动也可以是一种选择。
在这里,就是在VM options中设置成:
-Dserver.port=8000
两者的结果都是可以成功的。
还有一些文章会提到使用实现EmbeddedServletContainerCustomizer
接口重写customize
方法来修改端口。这里如果大家使用的是springBoot2.X还是建议不要用,因为问就是没有。这里暂时求同存异欢迎后续的补充。
2、访问静态资源
这里首先就要提及ResourceProperties
的类,里面就定义了静态资源的默认查找路径:
比如随便添加一个属性前缀:
spring.resources.add-mappings=
Ctrl点击翻至上面:
@ConfigurationProperties(prefix = "spring.resources", ignoreUnknownFields = false)
public class ResourceProperties {
private static final String[] CLASSPATH_RESOURCE_LOCATIONS = {
"classpath:/META-INF/resources/", "classpath:/resources/",
"classpath:/static/", "classpath:/public/" };
/**
* Locations of static resources. Defaults to classpath:[/META-INF/resources/,
* /resources/, /static/, /public/].
*/
这里的意思是,它默认的静态资源路径为:
- classpath:/META-INF/resources/
- classpath:/resources/
- classpath:/static/
- classpath:/public
只要静态资源放在这些目录中任何一个,SpringMVC都会帮我们处理。
比如说创建一个classpath:/static/
目录,将静态资源放置在次目录下。运行即可。
3、添加拦截器
1、首先定义属于自己的拦截器
public class LoginInterceptor implements HandlerInterceptor {
private Logger logger = LoggerFactory.getLogger(LoginInterceptor.class);
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) {
logger.debug("处理器执行前执行!");
return true;
}
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) {
logger.debug("处理器执行后执行!");
}
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) {
logger.debug("跳转后执行!");
}
}
2、通过实现 WebMvcConfigurer 并添加 @Configuration
注解来实现自定义部分SpringMvc配置:
@Configuration
public class MvcConfig implements WebMvcConfigurer{
/**
* 通过@Bean注解,将我们定义的拦截器注册到Spring容器
* @return
*/
@Bean
public LoginInterceptor loginInterceptor(){
return new LoginInterceptor();
}
/**
* 重写接口中的addInterceptors方法,添加自定义拦截器
* @param registry
*/
@Override
public void addInterceptors(InterceptorRegistry registry) {
// 通过registry来注册拦截器,通过addPathPatterns来添加拦截路径
registry.addInterceptor(this.loginInterceptor()).addPathPatterns("/**");
}
}
这里我们使用的是Ant风格,这个风格是来自Apache中的Ant项目,这根正则表达式之间有一些区别。
通配符 | 说明 |
---|---|
? | 匹配任意单字符 |
* | 匹配任意数量的字符 |
** | 匹配任意层级的路径/目录 |
3、设置日志级别
# 设置com.xaf包的日志级别为debug 这里根据自己的报名填写
logging.level.com.lxs=debug
4、运行结果
2021-10-10 09:40:01.811 DEBUG 4548 --- [p-nio-80-exec-1] com.lxs.interceptor.LoginInterceptor
: preHandle method is now running!
2021-10-10 09:40:01.854 DEBUG 4548 --- [p-nio-80-exec-1] com.lxs.interceptor.LoginInterceptor
: postHandle method is now running!
2021-10-10 09:40:01.854 DEBUG 4548 --- [p-nio-80-exec-1] com.lxs.interceptor.LoginInterceptor
: afterCompletion method is now running!
总结
以上就是根据SpringMVC整合的部分,谢谢大家的阅读。