sprintboot-learn(一)
為什么80%的碼農(nóng)都做不了架構(gòu)師?>>> ??
@Controller和@RestController
示例工程springboot-learn
@Controller 注解使用下,返回的字符串默認(rèn)是一張頁(yè)面的名字。
返回的是index.html頁(yè)面
@RestController 注解使用,默認(rèn)是返回體。相當(dāng)于加了@ResponseBody
返回的是字符串”index.html”
資源文件相關(guān)注解
示例工程springboot-learn和springboot-mybatis
Springboot會(huì)默認(rèn)讀取application.properties配置文件。
@Configuration:標(biāo)記某個(gè)實(shí)體類為資源文件,在啟動(dòng)時(shí)實(shí)例化。
@PropertySource("classpath:pro.properties"):當(dāng)標(biāo)記在某個(gè)類上面的時(shí)候,如果該類在啟動(dòng)時(shí)需要實(shí)例化,則通過該注解指定讀取資源文件pro.properties,類中使用@Value的方式注入。
@ConfigurationProperties(prefix = "myProps"):根據(jù)指定的前綴讀取文件信息并綁定到實(shí)體類上面。
其中,String類型的一定要使用setter來(lái)接受屬性值,集合不需要。該注解一般針對(duì)yml配置文件綁定屬性的時(shí)候用的較多。
對(duì)應(yīng)ylm配置:
@ImportResource:引入xml配置文件(springMVC的<bean>方式配置)
如圖所示:改class有兩個(gè)注解,@Configuration標(biāo)記改類為資源類,在啟動(dòng)時(shí)實(shí)例化,實(shí)例化的時(shí)候由于用@ImportResource注解引入了資源文件,所以會(huì)解析該資源文件。如果不加@Configuration,則該類不會(huì)實(shí)例化,就不會(huì)引入資源文件。總的來(lái)說(shuō),改class并沒有用,寫這個(gè)類主要是為了引入一個(gè)資源文件,結(jié)構(gòu)好看些。所以將該注解直接放在啟動(dòng)類上面也可以。類似如圖:
application.properties
靜態(tài)資源文件夾
Server.port:配置服務(wù)器端口號(hào),其它相關(guān)配置在類org.springframework.boot.autoconfigure.web.ServerProperties中可以找到。
spring.resources.staticLocations:配置資源文件的默認(rèn)路徑,和以下配置方式是一樣的,/**暫時(shí)還沒沒搞懂啥情況,測(cè)試中無(wú)論咋配置結(jié)果都一樣,網(wǎng)上表示配置/**會(huì)覆蓋掉默認(rèn)的/static等資源目錄,/path/**則不會(huì)覆蓋掉默認(rèn)的,只是在默認(rèn)的路徑中追加。但是實(shí)際測(cè)試并不是這樣。
spring.profiles.active:加載指定后綴的配置文件。
資源文件加載順序:
如果在程序運(yùn)行的時(shí)候指定了其他資源文件,資源文件加載的順序:
@ProperSource指定 > 默認(rèn)application.properties > spring.profiles.active指定
即:最先加載@ProperSource注解指定的,然后加載默認(rèn)的,最后加載默認(rèn)配置中使用spring.profiles.active指定的。
這個(gè)加載順序在是springbootce測(cè)試的時(shí)候有詳細(xì)說(shuō)明,看“Junit單元測(cè)試.docx”,工程springbootJunit。
打包時(shí)拷貝靜態(tài)資源
| 種類 | targetPath | 會(huì)被打包的文件夾 | Idea路徑 | Jar路徑 | 資源訪問情況 |
| 第一種 | 無(wú) | 只會(huì)打包springboot配置了的靜態(tài)資源文件夾,如resources/static, | 位于target/classes路徑下 | 位于BOOT-INF/classes路徑下 | Springboot自己靜態(tài)文件夾下的會(huì)被自動(dòng)打包,Idea運(yùn)行或者jar包運(yùn)行都能訪問 |
| 第二種 | static/ | 會(huì)將<directDictory>指定的文件夾下面的所有內(nèi)容全部打包 | target/classes/static | BOOT-INF/classes/static | 都能訪問 |
| 第三種 | BOOT-INF/classes/static/ | 會(huì)將<directDictory>指定的文件夾下面的所有內(nèi)容全部打包 | target/BOOT-INF/classes/static | BOOT-INF/classes/static | jar寶運(yùn)行可以訪問,idea運(yùn)行不能訪問 |
| 第四種 | 不配置<resources> | 會(huì)將resources下所有文件及其文件夾打包到classes下 | Target/classess | BOOT-INF/classes | 如果resources下包含的文件夾是靜態(tài)文件夾,Idea運(yùn)行或者jar包運(yùn)行都能訪問 |
假定dist目錄中有index.html,第三種中idea運(yùn)行時(shí)是不能訪問到index.html的,但是打成jar包運(yùn)行就能訪問到。
原因:idea在運(yùn)行的時(shí)候target下classes就相當(dāng)于jar包中的BOOT-INF/classes(可以看第二種情況),但是在第三種情況中idea的路徑變成了target/BOOT-INF/classes而不是target/clasess,所以會(huì)出現(xiàn)訪問不到的情況。
*.*:當(dāng)前目錄下所有文件,不包含文件夾
**/**:當(dāng)前目錄下所有文件,包含文件夾
亂碼:
配置默認(rèn)讀取properties文件的編碼格式
spring.messages.encoding=UTF-8
關(guān)于亂碼這個(gè)問題,在后邊測(cè)試的時(shí)候不起作用了,建議還是講中文轉(zhuǎn)成unicode編碼放配置里頭,就不會(huì)亂碼。
日志
logging.path:配置日志文件文件路徑
logging.file:配置日志文件的名字(必須包含路徑,否則路徑配置項(xiàng)無(wú)效)
如果logging.path=logs3,logging.file=myapp.log,只會(huì)在當(dāng)前目錄下生成myapp.log
如果只配logging.file=lgs3/myapp.log,效果跟圖示效果一樣,會(huì)創(chuàng)建logs3文件夾并在其中生成日志文件myapp.log。
攔截器
示例工程:springboot-learn
繼承WebMvcConfigurerAdapter,需要加注解@Confifuration才會(huì)生效。
攔截規(guī)則中測(cè)試結(jié)果是/**和/*都是攔截所有,一般都用/**。
AddInterceptor方法的參數(shù)可以看到是HandlerInterceptor類型。
這里需要配置自定義的攔截器
MyIntercepter:
MyIntercepter2:
方法說(shuō)明:
preHandle:在controller方法之前執(zhí)行
postHandle:在controller方法之后執(zhí)行
afterCompletion:只有在preHandle方法返回true的時(shí)候才執(zhí)行
執(zhí)行順序:
根據(jù)攔截器的配置順序執(zhí)行。
?
圖中的true是preHandle的返回值,只有當(dāng)返回值為true的時(shí)候才執(zhí)行下一個(gè)攔截器,否則直接中斷。
afterCompletion是在preHandle和postHandle都執(zhí)行完之后再執(zhí)行,順序是反向的。
Controller:
訪問localhost:8080/test,localhost:8080/test1,看控制臺(tái)輸出:
over~~~
轉(zhuǎn)載于:https://my.oschina.net/wtkid/blog/2244948
總結(jié)
以上是生活随笔為你收集整理的sprintboot-learn(一)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: IDEA在jsp页面写out.print
- 下一篇: oracle 对象管理 01_用户及权限