sprintboot-learn(一)

@Controller和@RestController

示例工程springboot-learn

@Controller 注解使用下,返回的字符串默认是一张页面的名字。

76c67fb3b6d375b3be4904acb1c04d3beb2.jpg

返回的是index.html页面

@RestController 注解使用,默认是返回体。相当于加了@ResponseBody

7aa28eb1fc1a94ca4a88bb336ece9eac139.jpg

返回的是字符串”index.html”

资源文件相关注解

示例工程springboot-learn和springboot-mybatis

Springboot会默认读取application.properties配置文件。

@Configuration:标记某个实体类为资源文件,在启动时实例化。

@PropertySource("classpath:pro.properties"):当标记在某个类上面的时候,如果该类在启动时需要实例化,则通过该注解指定读取资源文件pro.properties,类中使用@Value的方式注入。

c952881e702bace07e3ff607ba1a528b190.jpg

@ConfigurationProperties(prefix = "myProps"):根据指定的前缀读取文件信息并绑定到实体类上面。

其中,String类型的一定要使用setter来接受属性值,集合不需要。该注解一般针对yml配置文件绑定属性的时候用的较多。

f2aa2e6714a133d41eabfc034e1b419725a.jpg

对应ylm配置:

0f4fedc4be316d199ca7e242af6f923b6c9.jpg

@ImportResource:引入xml配置文件(springMVC的<bean>方式配置)

44dd791e34e2d86146858625edbaf073644.jpg

如图所示:改class有两个注解,@Configuration标记改类为资源类,在启动时实例化,实例化的时候由于用@ImportResource注解引入了资源文件,所以会解析该资源文件。如果不加@Configuration,则该类不会实例化,就不会引入资源文件。总的来说,改class并没有用,写这个类主要是为了引入一个资源文件,结构好看些。所以将该注解直接放在启动类上面也可以。类似如图:

e25c983127fad0e7ebfa15af6f69c16e7d1.jpg

application.properties

静态资源文件夹

2308f1499867856d03146fc73c13418f0de.jpg

Server.port:配置服务器端口号,其它相关配置在类org.springframework.boot.autoconfigure.web.ServerProperties中可以找到。

spring.resources.staticLocations:配置资源文件的默认路径,和以下配置方式是一样的,/**暂时还没没搞懂啥情况,测试中无论咋配置结果都一样,网上表示配置/**会覆盖掉默认的/static等资源目录,/path/**则不会覆盖掉默认的,只是在默认的路径中追加。但是实际测试并不是这样。

730c8d20e9a900cc2886805f97c748e5fa6.jpg

spring.profiles.active:加载指定后缀的配置文件。

d2a418d6aa677a867cf4871b5540f92d8a7.jpg

资源文件加载顺序:

如果在程序运行的时候指定了其他资源文件,资源文件加载的顺序:

@ProperSource指定 > 默认application.properties > spring.profiles.active指定

即:最先加载@ProperSource注解指定的,然后加载默认的,最后加载默认配置中使用spring.profiles.active指定的。

这个加载顺序在是springbootce测试的时候有详细说明,看“Junit单元测试.docx”,工程springbootJunit。

打包时拷贝静态资源

f8b12f05a9283aeb035c4a833b9165ae8fa.jpg

种类

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编码放配置里头,就不会乱码。

日志

beada1635c7f26609dbd161dffbac3fb42f.jpg

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才会生效。

a9bdbab3fb787e5913dbf276517f6b075de.jpg

拦截规则中测试结果是/**和/*都是拦截所有,一般都用/**。

AddInterceptor方法的参数可以看到是HandlerInterceptor类型。

4e04b491b3e4027cc0097e04f4fbf1a7693.jpg

这里需要配置自定义的拦截器

5de18db4c58b92eff04da9d4de30d50062c.jpg

MyIntercepter:

a1afbd6db8e09632881800bb64312761c1c.jpg

MyIntercepter2:

7cd75897c9d57f514033a5eb508df7a7307.jpg

方法说明:

preHandle:在controller方法之前执行

postHandle:在controller方法之后执行

afterCompletion:只有在preHandle方法返回true的时候才执行

执行顺序:

根据拦截器的配置顺序执行。

efb84662e78ce5efc24f65dac29d0f30397.jpg

 

图中的true是preHandle的返回值,只有当返回值为true的时候才执行下一个拦截器,否则直接中断。

afterCompletion是在preHandle和postHandle都执行完之后再执行,顺序是反向的。

Controller:

aa7cede2e932704ce1cf2bc148df9279dc4.jpg5b1038b4c2cf70f81e3a55f10ab250f83b7.jpg

访问localhost:8080/test,localhost:8080/test1,看控制台输出:

f47c27bf029e37bcd6a58e0947f7ff0a485.jpgb07559681b538da8f7bb0bc7c15badd14f1.jpg

over~~~

转载于:https://my.oschina.net/wtkid/blog/2244948

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值