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 ...
随机推荐
- Remoting 学习一调用远程的类就像调用本地的类一样
Remoting 使用TCP/IP 协议,服务端可以是服务,web服务器,类. 例子1. 远程调用服务端的类,就像调用客户端机器上的类一样. 服务端代码 (先定义被客户端调用的类,然后注 ...
- JSON 在JavaScript 中的应用及自己的理解
[对象和json]JSON:JavaScript 对象表示法(JavaScript Object Notation).JSON 是存储和交换文本信息的语法.类似 XML.JSON是一种数据格式,不是一 ...
- ng-file-upload - samples
<script src="angular.min.js"></script> <!-- shim is needed to support non-H ...
- reloc: Permission denied
群中一个朋友安装EBS是在db 2/5 步骤中遇到如下错误: Checking for errors ... .end std out.sqlplus: error while loading sh ...
- Mybatis 接口方式对数据的增删改查 一对一关联查询
数据库中有两个表 student 和studentInfo student表中的字段和数据 studentInfo表中的字段 ok数据库说完了,开始建立一个项目,对数据库中的数据进行操作吧 新建jav ...
- 遍历Newtonsoft.Json.Linq.JObject
JObject 遍历: 引用命名空间:using Newtonsoft.Json.Linq; JObject _jObject = JObject.Parse("{'ID':'001','M ...
- 服务器端使用DeferredResult异步推送技术
注意1: org.springframework.web.context.request.async.DeferredResult; 是Spring4.0以后的版本才有的,注意Spring版本,然后添 ...
- IntelliJ IDEA 代码检查规范QAPlug
转自:http://blog.csdn.net/jizi7618937/article/details/51500725 Avoid Array Loops 数组之间的拷贝使用System.array ...
- BerOS file system
The new operating system BerOS has a nice feature. It is possible to use any number of characters '/ ...
- BZOJ4355: Play with sequence
BZOJ4355: Play with sequence https://lydsy.com/JudgeOnline/problem.php?id=4355 分析: 模板题. 把\(2\)操作看成先区 ...