spirng boot web配置开发
spring-booter-starter-web是spring-boot web发开的核心,自动配置信息存储在spring-boot-autoconfigure.jar 下面的web目录里面,包含了各种web自动配置,例如
ServerPropertiesAutoConfiguration ServerProperties 自动配置servlet容器
HttpEncodingAutoConfiguration 和 HttpEncodingProperties 用来自动配置http编码
MultipartAutoConfiguration MultipartProperties 配置上传文件的属性
WebMvnAutoConfiguration WebMvcProperties 配置spring mvc
1 Thymeleaf 模版引擎
spring-boot 可以使用jsp,但是内嵌的tomcat和jetty 不支持以jar的形式运行jsp,Undertow不支持jsp;同时spring-boot提供了很多模版引擎,包括常用的freemaker等,最推荐实用的是Thymeleaf,它提供了完美的springmvc支持。Thymeleaf是一个java类库,是一个xml/xhtml/html5的模版引擎,可以视为mvc的web应用的view层,完全可以替代jsp。
2 集成spring mvc
在springmvc中,当对springmvc控制的资源发起请求时,这些请求会被springmvc的DispatherServlet处理,分析出HanderMapping中合适的映射,然后取得handlerAdapter 处理该handler,处理完了返回一个ModelAndView对象,最后把这个对象渲染成view返回给用户。渲染的过程是靠ViewResolver和View进行的,ModelAndView中不包含真正的试图,只返回一个逻辑试图名称,ViewResolver就会根据逻辑视图名称解析出真正的view对象,最后view对象进行视图渲染返回给浏览器。项目中ViewResolver常用于配置路径前缀和后缀。 例如freemaker的viewresolver
<bean class="org.springframework.web.servlet.view.freemarker.FreeMarkerViewResolver">
<property name="contentType" value="text/html; charset=UTF-8"/>
<property name="cache" value="true"/>
<property name="prefix" value="WEB-INF/pages/"/>
<property name="suffix" value=".ftl"/>
</bean>
在spring-boot中,Thymeleaf定义了ThymeleafView(默认view)和 ThymeleafViewResolver以及通用的SpringTemplateEngine(引擎里放置TemplateResolver),还提供了TemplateResolver用来设置通用的模版引擎(比如设置路径前后缀不用区分哪种模版)。
可以不用手动配置,自动注入autoconfigure.thymeleaf中对Thymeleaf进行了自动配置,包括了上面的TemplateResolver ThymeleafViewResolver SpringTemplateEngine ,在对应的properties文件中,可以看到各种默认属性配置如图

代码中可以根据参数设置如下 ,action中使用model跟spring mvc一样。
spring.thymeleaf.prefix=classpath:/pages/
spring.thymeleaf.suffix=.html
(1) springboot 会自动配置springmvc的resolver,WebMvcAutoConfiguration 里面有自动配置。
1)ContentNegotiatinViewResolver 一个特殊的resolver,不自己处理View,而是交给其他resolver处理,具有最高优先级,原理是拿到并遍历所有resolver,根据contenttype选择需要的resolver,resolver能处理什么杨的contentType,可以设置在 spring.thymeleaf.content-type=text/html,默认都是这种页面类型。如果多个resolver都能处理同一个contenttype,那么选取优先级最高的那一个。
2)BeanNameViewResolver 根据名称选择使用的resolver。action中返回一个字符串,这个字符串对应生成resolver bean的方法名,如下图。在action中,返回“jsonView”

3)InternalResourceViewResolver spring mvc最常用的resolver,通常用来设置前后缀等。但是在spring-boot里有坑。因为这个resolver的跳转(forward dispatcher)是基于webinf的,而spring-boot的根目录是classpath,所以这个resolver跳转不到配置的classpath页面。如果实在想用,需要加上web-inf,mvn设置成打war包,路径写在webinf下,使用外部tomcat容器启动才行。 非常强烈推荐使用thymeleaf自己的resolver。这也是spring-boot不推荐使用jsp的原因,必须打成war包,而其他模版都是jar war都可。
(2)如果spring mvc 自带的配置不符合要求,可以通过一个配置类(@Configuration) 加上@EnableWebMvc 注解 来完全控制自己的mvc配置。如果只想拓展springmvc的额外配置,可以定义配置类继承WebMvcConfigurerAdapter ,无需使用@EnableWebMvc,例如重写 addViewControllers,用于不经过controller直接跳转页面,springboot 配置'/' 映射到'index.html',自己配置的跳转也同时有效,推荐这种写法。
(3)注册servlet,filter,listener
spring boot提供两种方法配置这些,一种是在类前面加 @WebServlet @WebListener @WebFilter (都要加配置路径),然后配置一个scan,@Import(ServletComponentScanRegistrar.class),可以配置要扫描的包 ,最后在入口处加上@ServletComponentScan,即可扫描配置的内容。
另一种推荐配置,是@component 实现filter,然后在一个配置类里 @Bean 注册一个FilterRegistrationBean,这个bean里配置名字,url路径等。非常重要的一点就是,filter的执行顺序和配置类@bean的从上到下配置顺序一致,类似xml里从上到下那种顺序。
(4) 配置tomcat
用代码可以配置servlet信息,如果要配置通用的servlet,可以注册一个实现EmbeddedServletContannerCustomizer接口的bean ;如果想要单独配置tomcat ,jetty,undertow,就定一个bean 返回 TomcatEmbeddedServletContannerFactory,JettyEmbeddedServletContannerFactory,UndetowEmbeddedServletContannerFactory,里面可以配置端口,session时间等。但是更方便的是直接在外部文件里配置server.port等,注意如果同时配置,文件里的配置优先级会高于代码优先级。如果像替换tomcat,那么在spring-boot-starter-web里面排除掉spring-boot-starter-tomcat依赖,加上spring-boot-starter-jetty依赖即可。
spirng boot web配置开发的更多相关文章
- Spring Boot Web应用开发 CORS 跨域请求支持:
Spring Boot Web应用开发 CORS 跨域请求支持: 一.Web开发经常会遇到跨域问题,解决方案有:jsonp,iframe,CORS等等CORS与JSONP相比 1. JSONP只能实现 ...
- Spring Boot Web应用开发 CORS 跨域请求支持
一.Web开发经常会遇到跨域问题,解决方案有:jsonp,iframe,CORS等等 CORS与JSONP相比 1. JSONP只能实现GET请求,而CORS支持所有类型的HTTP请求. 2. 使用C ...
- spring boot ---web应用开发-错误处理
一.错误的处理 方法一:Spring Boot 将所有的错误默认映射到/error, 实现ErrorController @Controller @RequestMapping(value = &qu ...
- Springboot 系列(六)Spring Boot web 开发之拦截器和三大组件
1. 拦截器 Springboot 中的 Interceptor 拦截器也就是 mvc 中的拦截器,只是省去了 xml 配置部分.并没有本质的不同,都是通过实现 HandlerInterceptor ...
- Springboot 系列(五)Spring Boot web 开发之静态资源和模版引擎
前言 Spring Boot 天生的适合 web 应用开发,它可以快速的嵌入 Tomcat, Jetty 或 Netty 用于包含一个 HTTP 服务器.且开发十分简单,只需要引入 web 开发所需的 ...
- 四、Spring Boot Web开发
四.Web开发 1.简介 使用SpringBoot: 1).创建SpringBoot应用,选中我们需要的模块: 2).SpringBoot已经默认将这些场景配置好了,只需要在配置文件中指定少量配置就可 ...
- 4.Spring Boot web开发
1.创建一个web模块 (1).创建SpringBoot应用,选中我们需要的模块: (2).SpringBoot已经默认将这些场景配置好了,只需要在配置文件中指定少量配置就可以运行起来 (3).自己编 ...
- spring boot web相关配置
spring boot集成了servlet容器,当我们在pom文件中增加spring-boot-starter-web的maven依赖时,不做任何web相关的配置便能提供web服务,这还得归于spri ...
- Springboot 系列(七)Spring Boot web 开发之异常错误处理机制剖析
前言 相信大家在刚开始体验 Springboot 的时候一定会经常碰到这个页面,也就是访问一个不存在的页面的默认返回页面. 如果是其他客户端请求,如接口测试工具,会默认返回JSON数据. { &quo ...
随机推荐
- Handsontable 的数据保存(增删改查+导出excel)
项目用到handsontable 插件 根据官网 API写的handsontable初始化, 数据展示, ajax请求, 参数封装, Controller参数接受 全局容器 var AllData = ...
- hive 遇到的问题及解决方法
org.apache.hadoop.ipc.RemoteException(org.apache.hadoop.ipc.StandbyException): Operation category RE ...
- New Concept English three (52)
My cousin, Harry, keeps a large curiously-shaped bottle on permanent display in his study. Despite t ...
- 利用python进行数据分析—数据清洗记录3,map,apply,
社会心态调查报告 导语: 时代决定心态,心态映照时代.社会心态产生于社会个体心理,又以整体的形态存在,进而影响着每个社会成员的社会价值取向和行为方式,影响着国家经济政治和社会发展大局.良好的社会心 ...
- Knuth-Morris-Pratt 算法
KMP算法是一种改进的字符串匹配算法,由D.E.Knuth,J.H.Morris和V.R.Pratt同时发现,因此人们称它为克努特——莫里斯——普拉特操作(简称KMP算法).KMP算法的关键是利用匹配 ...
- LeetCode Range Addition II
原题链接在这里:https://leetcode.com/problems/range-addition-ii/description/ 题目: Given an m * n matrix M ini ...
- 总结:实体类和(XML或二进制)之间相互转(序列化和反序列化)
XML和实体类之间相互转换(序列化和反序列化) C# XML反序列化与序列化举例:XmlSerializer XML文件与实体类的互相转换 通过我前面的几篇收藏的文章,今天来自己做个对实体类对象序 ...
- !heap 和 _HEAP_ENTRY
WinDBG提供了!heap命令帮助我们查找heap,同时我们也可以通过dt和MS SYMBOL来了解memory layout. 假设我们有下面一个小程序. int _tmain(int argc, ...
- bzoj 2744 [HEOI2012]朋友圈——补图!+匈牙利算法
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=2744 求最大的团<==>补图(有边的变成没边.没边的变成有边)的最大独立集! A ...
- bzoj 1016 [JSOI2008]最小生成树计数——matrix tree(相同权值的边为阶段缩点)(码力)
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1016 就是缩点,每次相同权值的边构成的联通块求一下matrix tree.注意gauss里的 ...