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(一)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: IDEA在jsp页面写out.print
- 下一篇: oracle 对象管理 01_用户及权限