2、静态资源访问
2.1 静态资源访问目录
- 只要静态资源放在类路径下:called
/static
(or/public
or/resources
or/META-INF/resources
,访问的时候:当前项目根路径/+静态资源名 - 原理:静态映射/**
- 请求进来,先去找Controller能不能处理,不能处理的请求再交给静态资源处
2.2 改变默认的静态资源路径
- 访问所有的静态资源需要加上前缀 res
- 可以修改静态资源的存放路径
spring:
mvc:
static-path-pattern: /res/**
web:
resources:
static-locations: [classpath:/haha/]
2.3 welcom页面
- 静态资源目录下index.html
- 可以配置静态资源路径
- 但是不可以配置前缀,不然会导致失效
spring:
# mvc:
# static-path-pattern: /res/**
web:
resources:
static-locations: [classpath:/haha/]
3、请求参数处理
3.1 rest使用与原理
- Rest风格支持(使用HTTP请求方式动词来表示对资源的操作)
- 以前:/getUser 获取用户 /deleteUser 删除用户 /editUser 修改用户 /saveUser 保存用户
- 现在: /user GET-获取用户 DELETE-删除用户 PUT-修改用户 POST-保存用户
- 核心Filter;HiddenHttpMethodFilter
- 用法: 表单method=post,隐藏域 _method=put
- SpringBoot中手动开启
- 下面给个例子
- 如果没有开启HiddenHttpMethodFilter,当访问delete和put方法时,不会跳转到对应的页面
- 会默认请求第一个get方法,跳转到提交的页面
mvc:
hiddenmethod:
filter:
enabled: false # 此处需要打开 为true
测试REST风格;
<form action="/user" method="get">
<input value="REST-GET 提交" type="submit"/>
</form>
<form action="/user" method="post">
<input value="REST-POST 提交" type="submit"/>
</form>
<form action="/user" method="post">
<input name="_method" type="hidden" value="delete"/>
<input name="_m" type="hidden" value="delete"/>
<input value="REST-DELETE 提交" type="submit"/>
</form>
<form action="/user" method="post">
<input name="_method" type="hidden" value="PUT"/>
<input value="REST-PUT 提交" type="submit"/>
</form>
@RequestMapping(value = "/user",method = RequestMethod.GET)
// @GetMapping("/user")
public String getUser(){
return "GET-张三";
}
@RequestMapping(value = "/user",method = RequestMethod.POST)
// @PostMapping("/user")
public String saveUser(){
return "POST-张三";
}
@RequestMapping(value = "/user",method = RequestMethod.PUT)
// @PutMapping("/user")
public String putUser(){
return "PUT-张三";
}
// @DeleteMapping("/user")
@RequestMapping(value = "/user",method = RequestMethod.DELETE)
public String deleteUser(){
return "DELETE-张三";
}
Rest原理(表单提交要使用REST的时候)
- 表单提交会带上**_method=PUT**
- 请求过来被HiddenHttpMethodFilter拦截
- 请求是否正常,并且是POST
- 获取到**_method**的值。
- 兼容以下请求;PUT.DELETE.PATCH
- 原生request(post),包装模式requesWrapper重写了getMethod方法,返回的是传入的值。
- 过滤器链放行的时候用wrapper。以后的方法调用getMethod是调用requesWrapper的
- 请求是否正常,并且是POST