Skip to content

Commit 49bc9c9

Browse files
committed
docs: 更新文档
1 parent 6c87289 commit 49bc9c9

File tree

7 files changed

+711
-6
lines changed

7 files changed

+711
-6
lines changed

docs/.vuepress/config.js

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -26,27 +26,31 @@ module.exports = {
2626
themeConfig: {
2727
nav: [
2828
{
29-
text: 'Spring综合',
29+
text: '综合篇',
3030
link: '/01.Java/13.框架/01.Spring/00.Spring综合/'
3131
},
3232
{
33-
text: 'Spring核心',
33+
text: '核心篇',
3434
link: '/01.Java/13.框架/01.Spring/01.Spring核心/'
3535
},
3636
{
37-
text: 'Spring数据',
37+
text: '数据篇',
3838
link: '/01.Java/13.框架/01.Spring/02.Spring数据/'
3939
},
4040
{
41-
text: 'SpringIO',
41+
text: 'Web篇',
42+
link: '/01.Java/13.框架/01.Spring/03.SpringWeb/'
43+
},
44+
{
45+
text: 'IO篇',
4246
link: '/01.Java/13.框架/01.Spring/04.SpringIO/'
4347
},
4448
{
45-
text: 'Spring集成',
49+
text: '集成篇',
4650
link: '/01.Java/13.框架/01.Spring/05.Spring集成/'
4751
},
4852
{
49-
text: 'Spring其他',
53+
text: '其他',
5054
link: '/01.Java/13.框架/01.Spring/99.Spring其他/'
5155
}
5256
],

docs/01.Java/13.框架/01.Spring/03.SpringWeb/02.DispatcherServlet.md

Lines changed: 573 additions & 0 deletions
Large diffs are not rendered by default.
Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
---
2+
title: Spring MVC 之 Filter
3+
categories:
4+
- Java
5+
- 框架
6+
- Spring
7+
- SpringWeb
8+
tags:
9+
- Java
10+
- 框架
11+
- Spring
12+
- Web
13+
- Filter
14+
date: 2023-02-14 17:44:09
15+
permalink: /pages/4a164d/
16+
---
17+
18+
# Spring MVC 之 Filter
19+
20+
`spring-web` 模块提供了一些有用的 Filter:
21+
22+
- [Form Data](https://docs.spring.io/spring-framework/docs/current/reference/html/web.html#filters-http-put)
23+
- [Forwarded Headers](https://docs.spring.io/spring-framework/docs/current/reference/html/web.html#filters-forwarded-headers)
24+
- [Shallow ETag](https://docs.spring.io/spring-framework/docs/current/reference/html/web.html#filters-shallow-etag)
25+
- [CORS](https://docs.spring.io/spring-framework/docs/current/reference/html/web.html#filters-cors)
26+
27+
## 表单内容过滤器
28+
29+
浏览器只能通过 HTTP GET 或 HTTP POST 提交表单数据,但非浏览器客户端也可以使用 HTTP PUT、PATCH 和 DELETE。 Servlet API 需要 `ServletRequest.getParameter*()` 系列方法来支持仅对 HTTP POST 的表单字段访问。
30+
31+
`spring-web` 模块提供了 `FormContentFilter` 来拦截内容类型为 `applicationx-www-form-urlencoded` 的 HTTP PUT、PATCH、DELETE 请求,从请求体中读取表单数据,并包装 `ServletRequest` 通过 `ServletRequest.getParameter()` 系列方法使表单数据可用。
32+
33+
## 转发过滤器
34+
35+
当请求通过代理(如负载均衡器)时,主机、端口和方案可能会发生变化,这使得从客户端角度创建指向正确主机、端口和方案的链接成为一项挑战。
36+
37+
[RFC 7239](https://tools.ietf.org/html/rfc7239) 定义了 `Forwarded` HTTP 头,代理可以使用它来提供有关原始请求的信息。还有其他非标准头,包括 `X-Forwarded-Host``X-Forwarded-Port``X-Forwarded-Proto``X-Forwarded-Ssl``X-Forwarded-Prefix`
38+
39+
`ForwardedHeaderFilter` 是一个 Servlet 过滤器,它修改请求以便 a) 根据 `Forwarded` 头更改主机、端口和 scheme;b) 删除这些头以消除进一步的影响。该过滤器依赖于包装请求,因此它必须排在其他过滤器之前,例如 `RequestContextFilter`,它应该与修改后的请求一起使用,而不是原始请求。
40+
41+
`Forwarded` 头有安全考量,因为应用程序无法知道头是由代理按预期添加的,还是由恶意客户端添加的。这就是为什么应将信任边界处的代理配置为删除来自外部的不受信任的 `Forwarded` 头。还可以使用 `removeOnly=true` 配置 `ForwardedHeaderFilter`,在这种情况下它会删除但不使用头。
42+
43+
为了支持[异步请求](https://docs.spring.io/spring-framework/docs/current/reference/html/web.html#mvc-ann-async)和错误分派,此过滤器应使用 `DispatcherType.ASYNC``DispatcherType.ERROR` 进行映射。如果使用 Spring Framework 的 `AbstractAnnotationConfigDispatcherServletInitializer`(参见 [Servlet Config](https://docs.spring.io/spring-framework/docs/current/reference/html/web.html#mvc-container-config)),所有过滤器都会自动为所有调度类型注册。但是,如果通过 `web.xml` 或在 Spring Boot 中通过 `FilterRegistrationBean` 注册过滤器,请确保除了 `DispatcherType.REQUEST` 之外还包括 `DispatcherType.ASYNC``DispatcherType.ERROR`
44+
45+
## ETag 过滤器
46+
47+
`ShallowEtagHeaderFilter` 过滤器通过缓存写入响应的内容并从中计算 MD5 哈希来创建“浅”ETag。下次客户端发送时,它会做同样的事情,但它还会将计算值与 `If-None-Match` 请求标头进行比较,如果两者相等,则返回 304 (NOT_MODIFIED)。
48+
49+
此策略节省网络带宽但不节省 CPU,因为必须为每个请求计算完整响应。前面描述的控制器级别的其他策略可以避免计算。
50+
51+
此过滤器有一个 `writeWeakETag` 参数,该参数将过滤器配置为写入类似于以下内容的弱 ETag:`W"02a2d595e6ed9a0b24f027f2b63b134d6"`(如 [RFC 7232 Section 2.3](https://tools.ietf.org/html/rfc7232#section-2.3) 中所定义)。
52+
53+
为了支持[异步请求](https://docs.spring.io/spring-framework/docs/current/reference/html/web.html#mvc-ann-async),这个过滤器必须用 `DispatcherType.ASYNC` 映射,这样过滤器才能延迟并成功生成一个 ETag 到最后最后一次异步调度。如果使用 Spring Framework 的 `AbstractAnnotationConfigDispatcherServletInitializer`,所有过滤器都会自动为所有调度类型注册。但是,如果通过 `web.xml` 或在 Spring Boot 中通过 `FilterRegistrationBean` 注册过滤器,请确保包含 `DispatcherType.ASYNC`
54+
55+
## 跨域过滤器
56+
57+
Spring MVC 通过控制器上的注解为 CORS 配置提供细粒度支持。但是,当与 Spring Security 一起使用时,建议依赖内置的 `CorsFilter`,它必须在 Spring Security 的过滤器链之前订阅。
58+
59+
## 参考资料
60+
61+
- [Spring Framework 官方文档](https://docs.spring.io/spring-framework/docs/current/spring-framework-reference/index.html)
62+
- [Spring Framework 官方文档之 Web](https://docs.spring.io/spring-framework/docs/current/reference/html/web.html)
Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
---
2+
title: Spring MVC 之 Controller
3+
categories:
4+
- Java
5+
- 框架
6+
- Spring
7+
- SpringWeb
8+
tags:
9+
- Java
10+
- 框架
11+
- Spring
12+
- Web
13+
- Controller
14+
date: 2023-02-14 19:21:22
15+
permalink: /pages/5d002f/
16+
---
17+
18+
# Spring MVC 之 Controller
19+
20+
Spring MVC 提供了一种基于注解的编程模型,`@Controller``@RestController` 组件使用注解来表达请求映射、请求输入、异常处理等。注释控制器具有灵活的方法签名,并且不必扩展基类或实现特定接口。以下示例显示了一个由注释定义的控制器:
21+
22+
```java
23+
@Controller
24+
public class HelloController {
25+
26+
@GetMapping("/hello")
27+
public String handle(Model model) {
28+
model.addAttribute("message", "Hello World!");
29+
return "index";
30+
}
31+
}
32+
```
33+
34+
在前面的示例中,该方法接受一个 `Model` 并以 `String` 形式返回一个视图名称,但还存在许多其他选项。
35+
36+
## 声明
37+
38+
## RequestMapping
39+
40+
## 处理方法
41+
42+
## Model
43+
44+
## 数据绑定
45+
46+
## 异常
47+
48+
## @ControllerAdvice
49+
50+
## 参考资料
51+
52+
- [Spring Framework 官方文档](https://docs.spring.io/spring-framework/docs/current/spring-framework-reference/index.html)
53+
- [Spring Framework 官方文档之 Web](https://docs.spring.io/spring-framework/docs/current/reference/html/web.html)

docs/01.Java/13.框架/01.Spring/03.SpringWeb/README.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,9 @@ hidden: true
2323
## 📖 内容
2424

2525
- [Spring WebMvc](01.SpringWebMvc.md)
26+
- [DispatcherServlet](02.DispatcherServlet.md)
27+
- [Filter](03.Filter.md)
28+
- [Controller](04.Controller.md)
2629
- [SpringBoot 之应用 EasyUI](21.SpringBoot之应用EasyUI.md)
2730

2831
## 📚 资料

docs/Spring5官方文档.pdf

-5.24 MB
Binary file not shown.

prettier.config.js

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
/**
2+
* @see https://prettier.io/docs/en/options.html
3+
* @see https://prettier.io/docs/en/configuration.html
4+
*/
5+
module.exports = {
6+
tabWidth: 2,
7+
semi: false,
8+
singleQuote: true,
9+
trailingComma: 'none'
10+
}

0 commit comments

Comments
 (0)