SpringBoot整合springMVC(3)

SpringBoot整合springMVC(3)

引子

我们上个内容说到,Application会根据我们依赖的包自动默认判断相应的组件提供给我们使用。而这次,我们整合SpringMVC主要引出几个问题:

  1. 如何修改端口?
  2. 如何加载静态资源?
  3. 如何设置拦截器?

这些就是我们目前整合前需要面对的问题。接下来我就从这三个方面来进行整合开发。

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整合的部分,谢谢大家的阅读。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Xiao艾扶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值