SpringBoot
学习视频链接:小狂神Springboot
每日格言:
志当存高远。——诸葛亮《诫外生书》
SpringBoot web开发
jar:webapp在哪里
最大特点:自动装配
SpringBoot帮我们配置了什么,能不能进行修改,能修改那些东西,能不能拓展
- xxxxAutoConfiguration…向容器中自动配置组件
- XXXXProperties:实现自动配置类装配配置文件中自定义的内容!
要解决的问题:
- 导入静态资源,如何导入!
- 首页问题
- 模版引擎,thymeleaf
- 装配扩展SpringMvc
- 剩下的就只有增删改了
- 拦截器
- 扩展国际化
静态资源
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
if (!this.resourceProperties.isAddMappings()) {
logger.debug("Default resource handling disabled");
return;
}
addResourceHandler(registry, "/webjars/**", "classpath:/META-INF/resources/webjars/");
addResourceHandler(registry, this.mvcProperties.getStaticPathPattern(), (registration) -> {
registration.addResourceLocations(this.resourceProperties.getStaticLocations());
if (this.servletContext != null) {
ServletContextResource resource = new ServletContextResource(this.servletContext, SERVLET_LOCATION);
registration.addResourceLocations(resource);
}
});
}
什么是webjars
一个网站是和maven仓库类似的导入依赖的网站
导入的依赖结构是
我们的静态资源路径方法中
addResourceHandler(registry, "/webjars/**", "classpath:/META-INF/resources/webjars/");
就是去类路径下找到/META-INF/resources/webjars/下的文件,
例子:
访问http://localhost:8080/webjars/jquery/3.6.0/jquery.js
实测成功
总结:
- SpringBoot处理静态资源的方式
- webjars:http://localhost:8080/webjars/jquery/3.6.0/jquery.js
- pubilc:按优先级排序:resources,static,public,如何访问:/**:
- http://localhost:8080/1.js
- 优先级:resources>static(默认)》public
首页如何定制
在web配置类WebMvcAutoConfiguration中共有对首页的一系列处理
如何找得到资源下的index?
调用查找资源方法,找到index并且返回,没找到的话相对处理后返回空
SpringBoot页面跳转:
@Controller
public class HelloController {
@RequestMapping("/a")
public String hello(){
return "index";
}
}
注意:
- 在template目录下的所有页面,只能通过controller来跳转
- 需要模版引擎的支持
模版引擎:Thymeleaf
我们以前用jsp来展示数据,模版引擎的作用就是我们来写一个页面模版,比如一些值,表达式,tomcat支持jsp但是由于我们用的是嵌入式的tomcat,所以他现在默认是不支持jsp的
thymeleaf:
Thymeleaf 是适用于 Web 和独立环境的现代服务器端 java 模板引擎,能够处理 html、XML、javaScript、CSS 甚至纯文本。
Thymeleaf 的主要目标是提供一种优雅且高度可维护的模板创建方式。为了实现这一点,它建立在自然模板的概念之上,以不影响模板用作设计原型的方式将其逻辑注入模板文件。这改善了设计的沟通并弥合了设计和开发团队之间的差距。
Thymeleaf也已经从一开始就设计了Web标准记-尤其是html5 -允许您创建充分验证模板
Springboot推荐使用模版引擎来简化开发,
引入依赖:
<dependency>
<groupId>org.thymeleaf</groupId>
<artifactId>thymeleaf-spring5</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
使用只需要导入依赖,我们将html放到templeats下就可以跳转了
注意:如果导入jar失败尝试回退版本,即可
thymeleaf基础语法:
<!--所有的html元素都可以被thymeleaf接管,如何接管? th:元素-->
<div th:text="${msg}"></div>
表达式:
${x}
将返回x
存储在 Thymeleaf 上下文中或作为请求属性的变量。${param.x}
将返回一个名为(可能是多值的)的请求参数x
。${session.x}
将返回一个会话属性叫x
。${application.x}
将返回一个名为的servlet 上下文属性x
。
常用语法:
- 简单的表达:
- 变量表达式:
${...}
- 选择变量表达式:
*{...}
- 消息表达:
#{...}
- 链接 URL 表达式:
@{...}
- 片段表达式:
~{...}
- 变量表达式:
- 文字
- 文本字面量:
'one text'
,'Another one!'
,… - 数字字面量:
0
,34
,3.0
,12.3
,… - 布尔文字:
true
,false
- 空字面量:
null
- 文字标记:
one
,sometext
,main
,…
- 文本字面量:
- 文字操作:
- 字符串连接:
+
- 字面替换:
|The name is ${name}|
- 字符串连接:
- 算术运算:
- 二元运算符:
+
,-
,*
,/
,%
- 减号(一元运算符):
-
- 二元运算符:
- 布尔运算:
- 二元运算符:
and
,or
- 布尔否定(一元运算符):
!
,not
- 二元运算符:
- 比较与相等:
- 比较器:
>
,<
,>=
,<=
(gt
,lt
,ge
,le
) - 等式运算符:
==
,!=
(eq
,ne
)
- 比较器:
- 条件运算符:
- 如果-那么:
(if) ? (then)
- 如果-然后-其他:
(if) ? (then) : (else)
- 默认:
(value) ?: (defaultvalue)
- 如果-那么:
常用代码示例:
controller:index
@Controller
public class HelloController {
@RequestMapping("/index")
public String hello(Model model){
model.addAttribute("msg","<h1>hello SpringBoot</h1>");
model.addAttribute("users", Arrays.asList("hyc","lhy"));
return "index";
}
}
index.html
<!--所有的html元素都可以被thymeleaf接管,如何接管? th:元素-->
<!--不转义-->
<div th:text="${msg}"></div>
<!--转义-->
<div th:utext="${msg}"></div>
<hr>
<!--th:text显式数据-->
<h3 th:each="user:${users}" th:text="${user}"></h3>
<!--行内显式数据-->
<h3 th:each="user:${users}" >[[${user}]]</h3>
</body>
小结:
- 看了一下Springboot的WebMvcAutoConfiguration的设置首页的方法,发现和我们之前SpringMVC的视图解析器十分相似,对比学习,更加提高
- 模版引擎可以方便我们把数据放到前端页面,简化我们的开发前端需要传值的操作,提升开发效率,