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配置开发的更多相关文章

  1. Spring Boot Web应用开发 CORS 跨域请求支持:

    Spring Boot Web应用开发 CORS 跨域请求支持: 一.Web开发经常会遇到跨域问题,解决方案有:jsonp,iframe,CORS等等CORS与JSONP相比 1. JSONP只能实现 ...

  2. Spring Boot Web应用开发 CORS 跨域请求支持

    一.Web开发经常会遇到跨域问题,解决方案有:jsonp,iframe,CORS等等 CORS与JSONP相比 1. JSONP只能实现GET请求,而CORS支持所有类型的HTTP请求. 2. 使用C ...

  3. spring boot ---web应用开发-错误处理

    一.错误的处理 方法一:Spring Boot 将所有的错误默认映射到/error, 实现ErrorController @Controller @RequestMapping(value = &qu ...

  4. Springboot 系列(六)Spring Boot web 开发之拦截器和三大组件

    1. 拦截器 Springboot 中的 Interceptor 拦截器也就是 mvc 中的拦截器,只是省去了 xml 配置部分.并没有本质的不同,都是通过实现 HandlerInterceptor ...

  5. Springboot 系列(五)Spring Boot web 开发之静态资源和模版引擎

    前言 Spring Boot 天生的适合 web 应用开发,它可以快速的嵌入 Tomcat, Jetty 或 Netty 用于包含一个 HTTP 服务器.且开发十分简单,只需要引入 web 开发所需的 ...

  6. 四、Spring Boot Web开发

    四.Web开发 1.简介 使用SpringBoot: 1).创建SpringBoot应用,选中我们需要的模块: 2).SpringBoot已经默认将这些场景配置好了,只需要在配置文件中指定少量配置就可 ...

  7. 4.Spring Boot web开发

    1.创建一个web模块 (1).创建SpringBoot应用,选中我们需要的模块: (2).SpringBoot已经默认将这些场景配置好了,只需要在配置文件中指定少量配置就可以运行起来 (3).自己编 ...

  8. spring boot web相关配置

    spring boot集成了servlet容器,当我们在pom文件中增加spring-boot-starter-web的maven依赖时,不做任何web相关的配置便能提供web服务,这还得归于spri ...

  9. Springboot 系列(七)Spring Boot web 开发之异常错误处理机制剖析

    前言 相信大家在刚开始体验 Springboot 的时候一定会经常碰到这个页面,也就是访问一个不存在的页面的默认返回页面. 如果是其他客户端请求,如接口测试工具,会默认返回JSON数据. { &quo ...

随机推荐

  1. django 使用多说 评论系统

    效果图 方法:登录多说网站,创建站点.然后有下面的提示 ************************************************* 复制以下代码,并粘帖到您网页代码<bo ...

  2. WPF绑定数据源之RelativeSource

    Command="{Binding ConfirmRegisterCommand}" CommandParameter="{Binding RelativeSource= ...

  3. 返回结果的HTTP状态码

    HTTP状态码的职责是当客户端向服务器发送请求时,描述返回的请求结果. 2xx成功 2xx的响应结果表明请求被正常处理. 200 OK 请求已正常处理 204 No Content 请求处理成功,但是 ...

  4. CodeForces 444C 线段树

    想分块想了很久一点思路都没有,结果一看都是写的线段树= = ...完全忘记了还有线段树这种操作 题意:给一个数组,一种操作是改变l到r为c,还有一种操作是查询l到r的总和差 线段树记得+lazy标记 ...

  5. 使用Fluentd + MongoDB构建实时日志收集系统

    Fluentd是一个日志收集系统,它的特点在于其各部分均是可定制化的,你可以通过简单的配置,将日志收集到不同的地方. 目前开源社区已经贡献了下面一些存储插件:MongoDB, Redis, Couch ...

  6. lucene搜索之facet查询原理和facet查询实例——TODO

    转自:http://www.lai18.com/content/7084969.html Facet说明 我们在浏览网站的时候,经常会遇到按某一类条件查询的情况,这种情况尤以电商网站最多,以天猫商城为 ...

  7. GridView的简单使用

    测试代码: activity_main.xml: <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/a ...

  8. 分布式_理论_01_CAP定理

    一.前言 五.参考资料 1.分布式理论(一) - CAP定理——零壹技术栈 2.分布式理论(一) —— CAP 定理——莫那一鲁道 3.分布式系统理论基础 - CAP 4.分布式系统的CAP理论

  9. 二叉排序树的应用(java)

    package com.tree.find; public class TestSearchBST { private static class BiNode{ int data; BiNode lc ...

  10. stl_hash_map.h

    stl_hash_map.h // Filename: stl_hash_map.h // Comment By: 凝霜 // E-mail: mdl2009@vip.qq.com // Blog: ...