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的视图解析器十分相似,对比学习,更加提高
模版引擎可以方便我们把数据放到前端页面,简化我们的开发前端需要传值的操作,提升开发效率,