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