sprintboot-learn(一)
为什么80%的码农都做不了架构师?>>>
@Controller和@RestController
示例工程springboot-learn
@Controller 注解使用下,返回的字符串默认是一张页面的名字。
返回的是index.html页面
@RestController 注解使用,默认是返回体。相当于加了@ResponseBody
返回的是字符串”index.html”
资源文件相关注解
示例工程springboot-learn和springboot-mybatis
Springboot会默认读取application.properties配置文件。
@Configuration:标记某个实体类为资源文件,在启动时实例化。
@PropertySource("classpath:pro.properties"):当标记在某个类上面的时候,如果该类在启动时需要实例化,则通过该注解指定读取资源文件pro.properties,类中使用@Value的方式注入。
@ConfigurationProperties(prefix = "myProps"):根据指定的前缀读取文件信息并绑定到实体类上面。
其中,String类型的一定要使用setter来接受属性值,集合不需要。该注解一般针对yml配置文件绑定属性的时候用的较多。
对应ylm配置:
@ImportResource:引入xml配置文件(springMVC的<bean>方式配置)
如图所示:改class有两个注解,@Configuration标记改类为资源类,在启动时实例化,实例化的时候由于用@ImportResource注解引入了资源文件,所以会解析该资源文件。如果不加@Configuration,则该类不会实例化,就不会引入资源文件。总的来说,改class并没有用,写这个类主要是为了引入一个资源文件,结构好看些。所以将该注解直接放在启动类上面也可以。类似如图:
application.properties
静态资源文件夹
Server.port:配置服务器端口号,其它相关配置在类org.springframework.boot.autoconfigure.web.ServerProperties中可以找到。
spring.resources.staticLocations:配置资源文件的默认路径,和以下配置方式是一样的,/**暂时还没没搞懂啥情况,测试中无论咋配置结果都一样,网上表示配置/**会覆盖掉默认的/static等资源目录,/path/**则不会覆盖掉默认的,只是在默认的路径中追加。但是实际测试并不是这样。
spring.profiles.active:加载指定后缀的配置文件。
资源文件加载顺序:
如果在程序运行的时候指定了其他资源文件,资源文件加载的顺序:
@ProperSource指定 > 默认application.properties > spring.profiles.active指定
即:最先加载@ProperSource注解指定的,然后加载默认的,最后加载默认配置中使用spring.profiles.active指定的。
这个加载顺序在是springbootce测试的时候有详细说明,看“Junit单元测试.docx”,工程springbootJunit。
打包时拷贝静态资源
种类 |
targetPath |
会被打包的文件夹 |
Idea路径 |
Jar路径 |
资源访问情况 |
第一种 |
无 |
只会打包springboot配置了的静态资源文件夹,如resources/static, |
位于target/classes路径下 |
位于BOOT-INF/classes路径下 |
Springboot自己静态文件夹下的会被自动打包,Idea运行或者jar包运行都能访问 |
第二种 |
static/ |
会将<directDictory>指定的文件夹下面的所有内容全部打包 |
target/classes/static |
BOOT-INF/classes/static |
都能访问 |
第三种 |
BOOT-INF/classes/static/ |
会将<directDictory>指定的文件夹下面的所有内容全部打包 |
target/BOOT-INF/classes/static |
BOOT-INF/classes/static |
jar宝运行可以访问,idea运行不能访问 |
第四种 |
不配置<resources> |
会将resources下所有文件及其文件夹打包到classes下 |
Target/classess |
BOOT-INF/classes |
如果resources下包含的文件夹是静态文件夹,Idea运行或者jar包运行都能访问 |
假定dist目录中有index.html,第三种中idea运行时是不能访问到index.html的,但是打成jar包运行就能访问到。
原因:idea在运行的时候target下classes就相当于jar包中的BOOT-INF/classes(可以看第二种情况),但是在第三种情况中idea的路径变成了target/BOOT-INF/classes而不是target/clasess,所以会出现访问不到的情况。
*.*:当前目录下所有文件,不包含文件夹
**/**:当前目录下所有文件,包含文件夹
乱码:
配置默认读取properties文件的编码格式
spring.messages.encoding=UTF-8
关于乱码这个问题,在后边测试的时候不起作用了,建议还是讲中文转成unicode编码放配置里头,就不会乱码。
日志
logging.path:配置日志文件文件路径
logging.file:配置日志文件的名字(必须包含路径,否则路径配置项无效)
如果logging.path=logs3,logging.file=myapp.log,只会在当前目录下生成myapp.log
如果只配logging.file=lgs3/myapp.log,效果跟图示效果一样,会创建logs3文件夹并在其中生成日志文件myapp.log。
拦截器
示例工程:springboot-learn
继承WebMvcConfigurerAdapter,需要加注解@Confifuration才会生效。
拦截规则中测试结果是/**和/*都是拦截所有,一般都用/**。
AddInterceptor方法的参数可以看到是HandlerInterceptor类型。
这里需要配置自定义的拦截器
MyIntercepter:
MyIntercepter2:
方法说明:
preHandle:在controller方法之前执行
postHandle:在controller方法之后执行
afterCompletion:只有在preHandle方法返回true的时候才执行
执行顺序:
根据拦截器的配置顺序执行。
图中的true是preHandle的返回值,只有当返回值为true的时候才执行下一个拦截器,否则直接中断。
afterCompletion是在preHandle和postHandle都执行完之后再执行,顺序是反向的。
Controller:
访问localhost:8080/test,localhost:8080/test1,看控制台输出:
over~~~
转载于:https://my.oschina.net/wtkid/blog/2244948
sprintboot-learn(一)相关推荐
- 【Kaggle Learn】Python 1-4
[Kaggle Learn]Python https://www.kaggle.com/learn/python 一. Hello, Python A quick introduction to Py ...
- Blender赛车动画制作学习教程 Learn Race Car Animation with Blender
使用Blender 2.93创建您自己的惊人汽车动画 你会学到什么 Blender的界面和导航 建模 UV制图 材料 动画 照明设备 渲染 合成 要求 下载并安装Blender.免费下载和免费用于任何 ...
- Blender3.0动画制作入门学习教程 Learn Animation with Blender (2021)
要求 下载并安装Blender.免费下载和免费用于任何目的. 描述 加入我的动画课程. 在本课程中,我将从头开始讲述在Blender中创建动画场景的过程. 从第一步到最终渲染.在这个课程中,我们将使用 ...
- Unity与C#创建一个3D平台游戏 Learn to Create a 3D Platformer Game with Unity C#
游戏开发变得容易了.使用Unity学习C#并创建您自己的3D平台! 你会学到什么 学习现代通用编程语言C#. 了解Unity中3D开发的功能 发展强大的可转移的解决问题的技能 了解游戏开发过程 了解面 ...
- 学会在Unity中创建一个Match-3益智游戏 Learn To Create a Match-3 Puzzle Game in Unity
MP4 |视频:h264,1280×720 |音频:AAC,44.1 KHz,2 Ch 语言:英语+中英文字幕(根据原英文字幕机译更准确) |时长:48场讲座(6h 38m) |大小解压后:2.8 G ...
- Unity中创建本地多人游戏完整案例视频教程 Learn To Create A Local Multiplayer Game In Unity
Unity中创建本地多人游戏完整案例视频教程 Learn To Create A Local Multiplayer Game In Unity MP4 |视频:h264,1280x720 |音频:A ...
- Unity 3D游戏代码编程学习教程 Full Guide To Unity 3D C#: Learn To Code Making 3D Games
Unity 3D游戏代码编程学习教程 Full Guide To Unity 3D & C#: Learn To Code Making 3D Games Full Guide To Unit ...
- 读书笔记2013第10本:《学得少却考得好Learn More Study Less》
<学得少却考得好Learn More Study Less>这本书最早是从褪墨网站上看到的,crowncheng翻译了全文.这本书介绍了不少学习方法,非常适合在校的学生,原文的作者Scot ...
- The Road to learn React书籍学习笔记(第三章)
代码详情 声明周期方法 通过之前的学习,可以了解到ES6 类组件中的生命周期方法 constructor() 和 render() constructor() 构造函数只有在组件实例化并插入到 DOM ...
- Scikit Learn: 在python中机器学习
Warning 警告:有些没能理解的句子,我以自己的理解意译. 翻译自:Scikit Learn:Machine Learning in Python 作者: Fabian Pedregosa, Ga ...
最新文章
- Tomcat问题 无法启动
- Webkit Flex伸缩盒模型属性备忘
- 二、Netty服务端/客户端启动整体流程
- artdialog子弹窗关闭父弹窗
- HDU - 5493 Queue 2015 ACM/ICPC Asia Regional Hefei Online(线段树)
- Java安装环境变量配置-day1
- Office groove系统的术语
- Sentence-BERT: 一种能快速计算句子相似度的孪生网络
- 计算机三级网络技术路由,2009计算机三级网络技术:如何上网高效率宽带路由优化技巧放送...
- IIS Express加入MIME映射
- CSS面试题汇总(三)
- Eclipse的版本、下载网址和安装
- 【网络技术题库梳理11】第三道大题——DHCP报文
- 更换帝国cms默认文章内容编辑器fckeditor
- Python基础之面向对象
- 单片机:51最小单片机系统
- 进制转换C语言实现(十进制转换为任意进制)
- 星期五五–大数据,Doppio和假Linus Torvalds
- JavaScript 调用Bomb后端云
- 双胺基修饰MOF/GO烯复合材料|硫修饰Cu基MOF材料|磁性纳米多孔碳材料FeO@C|mof材料的复杂定制