springboot中的web

 

区别springboot和springMVC,springboot不是web层框架,不是哪一层框架,不属于任何一层,更不是mvc框架,springboot是对spring的升级,spring+自动配置,核心是对常规组件进行自动配置,即项目启动自动对配置类进行加载,web部分只是springboot自动配置的一部分组件

 

核心在于servlet容器(tomcat)和springMVC

自动配置实现以上,包括

l 内嵌的servlet容器,

l httpencoding编码,

l Multipart文件上传,

l 消息转换器MessageConverter,

l WebMVC配置内容  拦截器,视图解析器,视图控制器,消息转换器,文件上传

 

视图技术

动态资源,不支持JSP,而是thymeleaf,也已定义好了视图解析器

 

MessageConverter

返回的JSON,前后端分离,注解@RequestBody和@ResponseBody

这里是转换器起作用,默认是jackson-databind,可以替换其他gson或者fastjson,自定义其他

如果转换器异常,会报406

 

静态资源的处理

接口webmvcConfigurter里面有一个addResourceHandlers

静态资源问题:static目录,因为没有了webapp这种放置web资源的目录了

 

文件上传

两种

ServletContext.getRealPath获取项目真实全路径,服务url到文件位置

 

@controllerAdvice

全局配置

三种场景:

全局异常处理

全局数据

 

Cors跨域

解决前端的跨域请求

实现接口webmvcConfigurter,addcorsMapping

Jsonp只能解决get请求

 

xml配置

Springboot还想使用xml配置,注解@importResource

 

拦截器

自定义拦截器

@Component
public class MyInterceptor implements HandlerInterceptor {

自己写个配置类,重新配置拦截器,接口webmvcConfigurater,addIntercepter

@Configuration
public class MvcConfiguration implements WebMvcConfigurer {
  
 @Autowired   
private HandlerInterceptor myInterceptor; /** * 重写接口中的addInterceptors方法,添加自定义拦截器 * @param registry */ @Override public void addInterceptors(InterceptorRegistry registry) { registry.addInterceptor(myInterceptor).addPathPatterns("/**"); // 拦截所有,多级路径 } }

注意:

自己写一个配置@configuration,而且还加了@enableWebmvc,等于是自己写了全部的mvc配置类,那就完全取代了默认的webmvc配置了, 完全!!!

因此正确做法是写一个配置类@configuration,实现WebMvcConfigurer【或者继承webmvcConfigurerAtapter】 对想自定义的部分进行方法重写 达到部分自定义的目的

 

ApplicationRunner

项目启动执行任务,初始化数据库或者配置文件加载

 

支持基本web组件

Servlet、filter、listerner

注解扫描使用@ServletCompnetScan

 

 

 

 

posted @ 2021-04-01 14:30  加瓦加瓦  阅读(439)  评论(0)    收藏  举报