集成web
约 984 字大约 3 分钟
2024-10-12
整合 Web
web 开发-静态资源访问
在线文档:https://docs.spring.io/spring-boot/reference/features/external-config.html
只要静态资源放在/static、/public、/resources、/META-INF/resources 可以被直接访问——对应文件 WebProperties.java,会读取这个配置
private static final String[] CLASSPATH_RESOURCE_LOCATIONS = { "classpath:/META-INF/resources/", "classpath:/resources/", "classpath:/static/", "classpath:/public/" };常见静态资源;JS、CSS、图片(.jpg .png .gif .bmp .svg)、字体文件(Fonts)等
访问方式:默认:项目根路径/+静态资源名比如 http://localhost:8080/hi.html. —— 在设置 WebMvcProperties.java 中属性为:
private String staticPathPattern = "/**";
快速入门
创建 SpringBoot 项目 springbootweb
E:\ProjectCollection\FrameworkProject\hatida-springboot\springbootweb
注意事项和细节
- 静态资源访问原理:静态映射是/**,也就是对所有清求拦截,请求进来,先看 Controller 能不能处理,不能处理的请求交给静态资源处理器,如果静态资源找不到则响应 404 页面
- 改变静态资源访问前缀,比如我们希望 http://localhost:8080/hspres/*去请求静态资源,应用场景: 静态资源访问前缀和控制器请求路径冲突
(1)创建 application.yml
spring:
mvc:
static-path-pattern: /hatidares/**(2)重启应用,完成测试,浏览器输入:http://localhost:8080/hatidares/1.jpg
- 改变默认的静态资源路径,比如希望在类路径下增加 hatidaimg 目录作为静态资源路径,并完成测试
Rest 风格请求处理
SpringMVC 讲过
Rest 风格支持(HTTP 请求方式动词来表示对资源的操作)
举例说明:
- 请求方式:/monster
- GET-获取
- DELETE-删除
- PUT-修改
- POST-保存
注意事项和细节
客户端时 PostMan 可以直接发送 Put、delete 等方式的请求,可以不设置 Filter
如果要 SpringBoot 支持页面表单的 Rest 功能,则需要注意以下细节:
Rest 风格请求核心 Filter:HiddenHttpMethodFilter,表单请求会被 HiddenHttpMethodFilter 拦截,获取到表单_method 的值,再判断是 PUT/DELETE/PATCH(PATCH 是新引入的,是对 PUT 方法的补充,用来对已知资源进行局部更新:https://segmentfault.com/q/1010000005685904)
如果要 SpringBoot 支持页面表单的 Rest 功能,需要在 application.yml 启用 filter 功能,否则无效
修改 application.yml 启用 filter 功能
#注意放在文件前面,否则不生效 spring: mvc: static-path-pattern: /hatidares/** #/** 改为 /hatidares/,放在前面** hiddenmethod: filter: enabled: true #开启基于页面表单的Rest功能
为什么 return “GET-查询妖怪”,返回的是字符串,而不是转发到对应的资源文件?
@RestController 包含@ResponseBody 注解,springboot 底层(springmvc),在处理 return xxx 的时候对该注解解析处理,即返回字符串 xxx,而不会使用视图解析器来处理,如果把@RestController 改为@Controller,当访问 getMonster()时,如果你有 xxx.html 就会转发到 xxx.html,报 404
测试时将 xxx.html 文件放在 public\xxx.html 进行测试,并在 application.yml 配置视图解析器
接收参数注解
- SpringBoot 接收客户端提交数据/参数时会使用到相关注解
- 详解@PathVariable、@RequestHeader、@ModelAttribute、@RequestParam、@CookieValue、@RequestBody
应用实例
需求:演示各种方式提交数据/参数给服务器,服务器如何使用注解接收
- 创建 springbootweb\src\main\resources\public\index.html
复杂参数
在开发中,SpringBoot 在响应客户端请求时,也支持复杂参数
Map、Model、Errors/BindingResult、RedirectAttributes、ServletResponse、SessionStatus,UriComponentsBuilder,ServletUriComponentsBuilder,HttpSession
Map、Model 数据会被放在 request 域,到时 Debug
RedirectAttributes 重定向携带数据
实例
在 RequestController.java 编写相关方法
自定义对象参数-自动封装
- 在开发中,SpringBoot 在响应客户端/浏览器请求时,也支持自定义对象参数
- 完成自动类型转换与格式化
- 支持级联封装
举个例子:
class user{ //封装该对象的属性时,对car对象的属性也进行封装,就叫级联封装
private String name;
private Integer age;
private Car car;
}
class car{
private String car_name;
private String price;
}更新日志
fde06-docs: 添加 doc 技术文档于
