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 ...
随机推荐
- python里混淆矩阵 左下角为漏报,右上角为误报
1为黑样本,0为白样本: Counter({1: 105, 0: 95}) check counter!confusion_matrix:[[83 12(预测值为1,实际为0,误报)] [15(预测值 ...
- Spring_总结_04_高级配置(六)_Bean的初始化和销毁
一.前言 本文承接上一节:Spring_总结_04_高级配置(五)_运行时注入值
- 《深入理解 C# 第2版》 - 书摘精要
(P13) 在很大程度上,C# 2 更像是对 C# 1 的各种不足之处的修修补补,所以并没有一鸣惊人.而 C# 3 中几乎所有特性都是为了构建 LINQ,并且其结果也十分特别: (P24) 为了让委托 ...
- New Concept English there (60)
33w/m 43 Punctuality is a necessary habit in all public affairs in civilized society. Without it, no ...
- codeforces 755F F. PolandBall and Gifts(贪心+多重背包)
题目链接: F. PolandBall and Gifts time limit per test 1.5 seconds memory limit per test 256 megabytes in ...
- HihoCoder1080 更为复杂的买卖房屋姿势(线段树+多重lazy)
描述 小Hi和小Ho都是游戏迷,“模拟都市”是他们非常喜欢的一个游戏,在这个游戏里面他们可以化身上帝模式,买卖房产. 在这个游戏里,会不断的发生如下两种事件:一种是房屋自发的涨价或者降价,而另一种是政 ...
- java 收集linux信息
public class MachineCollector implements Runnable{ private static int DEFAULT_INTERVAL = 30; priv ...
- Unity3D自定义资源配置文件
http://blog.csdn.net/candycat1992/article/details/52181814 写在前面 我竟然最近两天才知道Unity中ScriptableObject的存在… ...
- C# 代码注释规范文档
C# 提供一种机制,使程序员可以使用含有 XML 文本的特殊注释语法为他们的代码编写文档.在源代码文件中,具有某种格式的注释可用于指导某个工具根据这些注释和它们后面的源代码元素生成 XML.使用这类语 ...
- 难道调用ThreadPool.QueueUserWorkItem()的时候,真是必须调用Thread.Sleep(N)吗?
开门见山,下面的例子中通过调用ThreadPool.QueueUserWorkItem(WaitCallback callBack, object state)的方式实现异步调用: 1: class ...