sprintboot-learn(一)

@Controller和@RestController

示例工程springboot-learn

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

sprintboot-learn(一)

返回的是index.html页面

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

sprintboot-learn(一)

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

资源文件相关注解

示例工程springboot-learn和springboot-mybatis

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

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

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

sprintboot-learn(一)

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

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

sprintboot-learn(一)

对应ylm配置:

sprintboot-learn(一)

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

sprintboot-learn(一)

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

sprintboot-learn(一)

application.properties

静态资源文件夹

sprintboot-learn(一)

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

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

sprintboot-learn(一)

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

sprintboot-learn(一)

资源文件加载顺序:

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

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

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

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

打包时拷贝静态资源

sprintboot-learn(一)

种类

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

日志

sprintboot-learn(一)

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

sprintboot-learn(一)

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

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

sprintboot-learn(一)

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

sprintboot-learn(一)

MyIntercepter:

sprintboot-learn(一)

MyIntercepter2:

sprintboot-learn(一)

方法说明:

preHandle:在controller方法之前执行

postHandle:在controller方法之后执行

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

执行顺序:

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

sprintboot-learn(一)

 

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

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

Controller:

sprintboot-learn(一)sprintboot-learn(一)

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

sprintboot-learn(一)sprintboot-learn(一)

over~~~

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