自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(127)
  • 收藏
  • 关注

原创 Java小案例-Guava使用指南

十五万字-Guava中文指南大全

2023-12-11 00:29:23 1136

原创 JAVA史上最全的面试题从基础到微服务,进大厂必备~~~

2023年史上最全的java面试题

2023-02-15 20:37:55 312 1

原创 47、视图解析-【源码分析】-视图解析器与视图

Spring 遍历配置的视图解析器,调用 `resolveViewName(String viewName, Locale locale)` 方法,尝试解析逻辑视图名。- 例如,逻辑视图名 `hello` 会被解析为 `/WEB-INF/views/hello.jsp`。- 逻辑视图名以 `redirect:` 开头,如 `redirect:/newUrl`。- 逻辑视图名以 `forward:` 开头,如 `forward:/jspPage`。47、视图解析-【源码分析】-视图解析器与视图。

2025-06-08 04:00:59 283

原创 48、拦截器-登录检查与静态资源放行

`preHandle`方法在请求到达Controller前执行,返回`true`放行,返回`false`拦截。- `.excludePathPatterns(...)`:指定放行的路径,包括登录相关路径和静态资源路径。"/css/**", // 静态资源。- **静态资源位置**:根据项目结构正确配置静态资源的存放位置和访问路径。- `.addPathPatterns("/**")`:拦截所有请求。- **路径匹配规则**:确保放行路径的准确性,避免误拦截或误放行。

2025-06-08 04:00:23 277

原创 46、web实验-遍历数据与页面bug修改

使用开发者工具查看元素盒模型,调整`margin`、`padding`、`width`、`height`等属性。- `th:each` 用于遍历集合,`user` 代表当前遍历的元素,`stats` 提供遍历状态(如序号)。- **模块化开发**:将页面拆分为独立的模块,便于代码复用和bug定位。- **代码规范**:遵循统一的代码规范,提高代码可读性和维护性。- **测试驱动开发**:编写单元测试,确保代码的稳定性和可靠性。- **原因**:CSS样式错误、盒模型问题、浏览器兼容性差异。

2025-06-06 00:04:04 326

原创 45、web实验-抽取公共页面

在其他需要使用公共片段的页面中,通过`th:insert`、`th:replace`或`th:include`属性引入公共片段。- **`th:include`**:将公共片段的内容插入到指定标签内部,但不保留公共片段的根标签。- **`th:insert`**:将公共片段的内容插入到指定标签内部,保留原标签。- **`th:replace`**:用公共片段的内容替换指定标签及其内容。-- 引入公共的侧边栏代码 -->-- 引入公共的头部代码 -->-- 引入公共的底部代码 -->

2025-06-06 00:03:08 486

原创 祝所有高考学子,旗开得胜!

金发少年的自信与深蓝笑眼的温暖,此刻都化作笔尖划过卷面时的闪亮荧光。书包里装着星辰大海的梦,手环上缠着青春倔强的誓言——愿你们在考场上像荧光棒般耀眼,用智慧点亮每一道题的缝隙;像白云般自在,把压力揉碎成云朵投进阳光里。当“旗开得胜”的金色誓言在风中飘扬,请记得:答案早已藏在你们高举的手臂里,藏在并肩奔跑的笑声中,藏在无数个挑灯夜战的星子下。——考神附体,超常发挥!

2025-06-05 23:41:55 139

原创 44、web实验-后台管理系统基本功能

**权限控制**:不同角色的用户拥有不同的操作权限,例如管理员可管理所有功能,普通用户只能查看部分信息。- **增删改查(CRUD)**:对系统中的数据进行添加、删除、修改和查询操作,如管理文章、产品信息等。- **用户登录/注销**:用户输入用户名和密码进行登录,登录后可执行相关操作,并提供注销功能。- **模板引擎**:Thymeleaf,用于渲染动态页面,与Spring Boot集成良好。- **后端框架**:Spring Boot,提供快速开发、自动配置等特性。

2025-06-05 19:54:54 655

原创 43、视图解析-Thymeleaf初体验

默认情况下,Spring Boot会在`src/main/resources/templates`目录下查找模板文件,模板的默认后缀名为`.html`。- **内置表达式语言**:提供强大的表达式语言(Thymeleaf EL),方便在模板中访问和操作数据。- **自然模板**:模板与常规HTML兼容,可以在不经过模板引擎解析的情况下直接打开查看。- **可读性强**:模板具有良好的可读性,即使没有模板引擎的上下文也能理解其结构。- **语法简洁**:标签语法简单明了,易于学习和使用。

2025-06-05 19:53:27 701

原创 42、响应处理-【源码分析】-浏览器与PostMan内容协商完全适配

*内容协商**是HTTP协议中的一种机制,允许服务器根据客户端的请求头信息(如`Accept`、`Accept-Language`、`Accept-Encoding`等),选择最合适的响应内容格式。- 发送GET请求到`http://localhost:8080/test/person`,设置请求头`Accept: application/json`,返回JSON格式数据。- 在浏览器中访问`http://localhost:8080/test/person?// 创建基于请求参数的内容协商策略。

2025-06-04 16:14:38 662

原创 41、响应处理-【源码分析】-自定义MessageConverter

**实现多协议数据兼容**:Spring MVC默认支持JSON、XML等格式的数据转换,通过自定义`MessageConverter`,可以支持自定义的数据格式,如`application/x-guigu`等。当客户端发送请求时,如果`Accept`头包含`application/x-guigu`,则会使用`GuiguMessageConverter`将`Person`对象转换为自定义格式的数据返回给客户端。- 实现`read()`和`write()`方法,分别处理数据的读取和写入逻辑。

2025-06-04 16:12:33 683

原创 40、响应处理-【源码分析】-基于请求参数的内容协商原理

Spring Boot中的`ContentNegotiationManager`负责内容协商,它会检查启用了哪些协商策略,包括基于请求头的`HeaderContentNegotiationStrategy`和基于请求参数的`ParameterContentNegotiationStrategy`。- **请求头策略**:如果未指定格式参数,或参数内容协商未启用,则根据请求头中的`Accept`字段进行内容协商,选择最合适的媒体类型。format=json`中获取`format`参数值为`json`。

2025-06-03 19:08:03 525

原创 39、响应处理-【源码分析】-内容协商原理

服务器从请求中读取`Accept`、`Accept-Language`、`Accept-Charset`、`Accept-Encoding`等请求头,了解客户端的偏好。- **Accept-Charset**:指定可接受的字符集,如`UTF-8`、`ISO-8859-1`。- **Accept-Encoding**:指定可接受的内容编码方式,如`gzip`、`deflate`。- **Accept-Language**:指定可接受的语言,如`en-US`、`zh-CN`。

2025-06-03 19:06:40 443

原创 38、响应处理-【源码分析】-HTTPMessageConverter原理

**功能**:处理表单数据,支持`application/x-www-form-urlencoded`和`multipart/form-data`。- 遍历所有注册的`HttpMessageConverter`,调用`canRead`方法,找到能处理该`Content-Type`的转换器。- **功能**:判断转换器是否能写入指定类型的数据,将`clazz`类型的Java对象转换为指定媒体类型的数据。- **功能**:判断转换器是否能读取指定类型的数据,并将其转换为`clazz`类型的Java对象。

2025-06-02 15:36:12 486

原创 37、响应处理-【源码分析】-ReturnValueHandler原理

**功能**:使用`HttpMessageConverter`将返回值转换为HTTP响应体,支持JSON、XML等格式。- **处理不同类型的返回值**:根据控制器方法返回值的类型,选择合适的`ReturnValueHandler`进行处理。2. **判断支持类型**:调用每个处理器的`supportsReturnType`方法,判断是否支持处理当前返回值类型。2. **执行处理逻辑**:调用处理器的`handleReturnValue`方法,将返回值转换为HTTP响应。否则返回`false`。

2025-06-02 15:34:35 309

原创 36、请求处理-【源码分析】-自定义Converter原理

在配置类上实现 `WebMvcConfigurer` 接口,并重写 `addFormatters` 方法,将自定义 `Converter` 添加到 `FormatterRegistry` 中。2. **注册 `Converter`**:通过 `WebMvcConfigurer` 将自定义 `Converter` 添加到 `ConversionService`。2. `WebDataBinder` 尝试将 "张三,18" 绑定到 `Person` 对象的 `name` 和 `age` 属性。

2025-06-01 13:09:10 532

原创 35、请求处理-【源码分析】-自定义参数绑定原理

通过`WebMvcConfigurer`的`addFormatters`方法将自定义`Converter`注册到`FormattingConversionService`中。- 参数上存在`@ModelAttribute`注解,或没有该注解但`annotationNotRequired`为`true`。3. **数据绑定**:利用`WebDataBinder`将请求参数绑定到对象属性,借助`Converters`进行类型转换。其中,`Person`类包含`name`、`age`和`birth`属性。

2025-06-01 13:07:55 429

原创 34、请求处理-【源码分析】-Model、Map原理

mavContainer.getModel()` 方法会返回一个 `Model` 实例,通常是一个 `BindingAwareModelMap` 对象,它既是 `Model` 也是 `Map`。- **`Model` 和 `Map` 参数在 Spring Boot 中本质上是同一个对象,都是 `BindingAwareModelMap` 的实例。- **通过 `Model` 或 `Map` 添加的数据最终都会被放入 `HttpServletRequest` 的请求域中,供视图访问。// 输出 true。

2025-05-31 15:27:40 538

原创 33、请求处理【源码分析】Servlet API参数解析原理

通过 `NativeWebRequest` 的 `getNativeRequest(Class<T> requiredType)` 方法,从当前请求上下文中获取原生的 `HttpServletRequest` 或 `HttpServletResponse`。- Spring 会遍历所有注册的 `HandlerMethodArgumentResolver`,调用 `supportsParameter` 方法判断是否支持 `HttpServletRequest` 类型的参数。

2025-05-31 15:25:50 448

原创 32、请求处理-【源码分析】-各种类型参数解析原理

使用 `HttpMessageConverter`(如 `Jackson2HttpMessageConverter`)将 JSON 转换为 `User` 对象。- 使用 `TypeConverter` 将字符串数组转换为 `List<Long>`。- 使用 `TypeConverter` 将字符串转换为 `Long` 类型。- 使用 `TypeConverter` 将字符串转换为 `Long` 类型。- 从请求路径的矩阵变量中提取名为 `low` 和 `brand` 的值。

2025-05-30 13:16:58 401

原创 31、请求处理@MatrixVariable与UrlPathHelper

通过以上介绍,您可以在Spring Boot项目中正确使用`@MatrixVariable`和配置`UrlPathHelper`来处理矩阵变量,实现灵活的URL参数传递。- 可使用`List<String>`或`String[]`接收同名变量的多个值,如`/path;`分隔,格式为`path;low=34`,`path`是路径变量,`low`是矩阵变量。key=value`,`var`是路径变量,`key`是矩阵变量。- `brand`值为`["byd", "audi", "yd"]`

2025-05-30 13:15:38 461

原创 30、请求处理-@RequestAttribute

**请求转发**:特别适用于请求转发场景,当一个请求被转发到另一个处理程序时,可以通过`@RequestAttribute`访问在转发前设置的属性。- **重定向**:由于重定向会发起新的请求,原请求的属性将丢失,无法通过`@RequestAttribute`获取。- **作用范围**:`@RequestAttribute`获取的是当前请求域中的属性,仅限于本次请求的生命周期内有效。- **获取请求属性**:允许你在控制器方法参数中直接注入请求域中的属性值。- **`name`或`value`**

2025-05-29 12:37:00 845

原创 29、请求处理-常用参数注解使用

**说明**:在转发请求时,通过`HttpServletRequest`设置属性,然后在目标方法中通过`@RequestAttribute`获取。- **用途**:用于获取请求体的内容,通常用于处理`POST`、`PUT`等请求的JSON或XML数据。- **说明**:当请求`/user/123`时,`userId`会被赋值为`123`。- **说明**:获取名为`JSESSIONID`的Cookie值。- **说明**:获取请求中的`User-Agent`头信息。

2025-05-29 12:35:44 496

原创 28、请求处理-【源码分析】-请求映射原理

**参数解析**:使用 `HandlerMethodArgumentResolver` 解析请求参数,支持多种参数类型,如请求体 (`@RequestBody`)、路径变量 (`@PathVariable`)、请求头 (`@RequestHeader`) 等。保存了所有 `@RequestMapping` 注解与处理方法的映射关系。- **URL 路径匹配**:精确匹配、通配符匹配 (`*`)、路径变量 (`/{variable}`)、正则表达式 (`/{regex:pattern}`)。

2025-05-28 19:35:10 826

原创 27、请求处理-【源码分析】-怎么改变默认的_method

通过自定义 `HiddenHttpMethodFilter` Bean 并设置 `setMethodParam` 方法,覆盖了默认的配置,从而改变了 `_method` 参数的默认值。通过以上步骤,成功将 Spring Boot 中默认的 `_method` 参数修改为 `_m`,实现了自定义请求方法参数的功能。- 在表单中,将原先的 `_method` 隐藏域名称修改为 `_m`。1. **自定义 `HiddenHttpMethodFilter`**#### 修改默认 `_method` 参数。

2025-05-28 19:32:38 365

原创 26、请求处理-【源码分析】-Rest映射及源码解析

`@ConditionalOnProperty(prefix = "spring.mvc.hiddenmethod.filter", name = "enabled", matchIfMissing = true)`:默认开启,可以通过`spring.mvc.hiddenmethod.filter.enabled`配置项关闭。- 如果存在,将请求方法替换为`_method`的值,从而将POST请求转换为PUT或DELETE等请求。- 检查请求中是否存在名为`_method`的参数。

2025-05-27 15:04:15 1005

原创 25、web场景-【源码分析】-静态资源原理

访问路径为`/webjars/库名/版本号/资源路径`,例如:`http://localhost:8080/webjars/jquery/3.5.1/jquery.js`。这意味着,只要将静态资源放在这些目录下的任意一个,就可以通过浏览器直接访问,例如:`http://localhost:8080/文件名`。配置后,访问静态资源需加上`/res`前缀,如:`http://localhost:8080/res/文件名`。- 如果找到,则返回该资源;- 静态资源处理器按照默认的目录顺序查找匹配的静态资源。

2025-05-27 15:02:47 480

原创 24、web场景-welcome与favicon功能

**方法**:在Spring Boot项目的静态资源目录下(如`src/main/resources/static`或`src/main/resources/public`)放置名为`index.html`的文件。- **访问前缀**:如果配置了静态资源的访问前缀(如`spring.mvc.static-path-pattern: /res/**`),则需要相应调整欢迎页和Favicon的路径。- **优先级**:静态资源目录中的`index.html`优先级高于模板引擎渲染的页面。

2025-05-26 08:46:36 475

原创 23、web场景-静态资源规则与定制化

**说明**:访问`http://example.com/img/logo.png`,实际会查找`/var/www/images/logo.png`。- **`location /static/`**:匹配以`/static/`开头的请求,根目录为`/var/www`,设置缓存30天,关闭访问日志。- **默认目录**:`/static`、`/public`、`/resources`、`/META-INF/resources`。- **说明**:设置静态资源缓存1小时。

2025-05-26 08:44:57 500

原创 22、web场景-web开发简介

**工作原理**:用户通过浏览器(客户端)向Web服务器(服务器端)发送请求,服务器返回相应的响应结果,在浏览器中展示。- **动态网站**:根据用户请求和交互动态生成内容,具有更强的交互性和个性化,如电子商务平台、社交网站。- **React**、**Vue.js**、**Angular**:构建复杂用户界面的前端框架。- **作用**:存储和管理网站的数据,支持高效的数据查询和更新。1. **需求分析**:明确网站的功能、性能和用户体验需求。- **架构设计**:确定系统的整体结构和技术选型。

2025-05-25 23:08:23 463

原创 21、配置文件-自定义类绑定的配置提示

在编写`myconfig`下的属性时,IDE会自动提示`property1`和`property2`。通过以上步骤,可以实现自定义类与配置文件的绑定,并在配置文件中获得自动提示,提高开发效率。添加依赖并重启项目后,在配置文件中编写与自定义类相关的配置时,IDE将提供自动提示。#### 使用`@ConfigurationProperties`注解。// 提供getter和setter方法。21、配置文件-自定义类绑定的配置提示。#### 配置打包插件。

2025-05-25 23:05:35 266

原创 20、配置文件-yaml的用法

在Spring Boot中,YAML文件(通常命名为`application.yml`或`application.yaml`)用于配置应用程序的各种属性。单引号`''`会转义特殊字符,双引号`""`会保留特殊字符的含义。在代码中,可以通过`@Value`注解或`@ConfigurationProperties`注解获取这些配置值。- 使用`#`符号表示注释,从`#`开始到行尾的内容将被忽略。- **布尔值**:`true`、`false`。- 使用`---`分隔不同的环境配置。

2025-05-24 09:41:35 451

原创 19、最佳实践-Spring Initailizr

**依赖管理**:根据用户选择的依赖,自动生成项目的`pom.xml`(Maven)或`build.gradle`(Gradle)文件,方便管理项目依赖。- 使用注解进行组件扫描和依赖注入,如`@Controller`、`@Service`、`@Repository`、`@Autowired`等。- **Artifact**:项目的唯一标识,简洁明了,如`my-spring-boot-project`。- **Group**:通常使用公司或组织的域名倒序,如`com.example`。

2025-05-24 09:40:29 364

原创 18、最佳实践-dev-tools

**合理使用`console`方法**:使用`console.log()`、`console.warn()`、`console.error()`等方法输出日志,帮助定位问题。- **记录和分析性能**:打开DevTools的性能面板,录制页面加载或操作过程,分析性能瓶颈,识别耗时长的函数和资源加载情况。- **设备模拟**:使用DevTools的设备模拟功能,测试页面在不同设备和屏幕尺寸下的显示效果。- **分析函数调用**:通过调用树查看函数执行时间,优化耗时较长的函数,减少不必要的计算和循环。

2025-05-23 08:00:04 322

原创 17、最佳实践-Lombok简化开发

**`@NoArgsConstructor`/`@AllArgsConstructor`/`@RequiredArgsConstructor`**:生成无参、全参或必要参数构造函数。- **`@Data`**:生成getter、setter、`equals`、`hashCode`、`toString`方法,适用于简单的POJO类。- **`@Getter`/`@Setter`**:仅生成指定字段的getter和setter方法。- 在团队项目中,统一Lombok的使用规范,避免因版本差异导致的问题。

2025-05-23 07:58:45 300

原创 16、最佳实践-SpringBoot应用如何编写

使用`@ControllerAdvice`和`@ExceptionHandler`处理全局异常,返回统一的错误响应。- 使用`@Data`、`@Getter`、`@Setter`等注解减少getter、setter等样板代码。- 使用`application.properties`或`application.yml`配置应用属性。- 根据环境设置合适的日志级别,例如:开发环境使用`DEBUG`,生产环境使用`INFO`。- `com.example.app.repository`:数据访问层。

2025-05-22 10:03:42 1139

原创 15、自动配置【源码分析】-自动配置流程

自动配置类通常通过 `@EnableConfigurationProperties` 注解启用配置属性绑定,将 `application.properties` 或 `application.yml` 中的配置与对应的 `XXXProperties` 类绑定。- `AutoConfigurationImportSelector` 的 `selectImports` 方法会从 `META-INF/spring.factories` 文件中加载所有候选的自动配置类。

2025-05-22 10:02:15 755

原创 14、自动配置【源码分析】-初始加载自动配置类

从 `META-INF/spring.factories` 文件中读取 `org.springframework.boot.autoconfigure.EnableAutoConfiguration` 键对应的所有自动配置类名。- 通过 `@Import` 注解引入 `AutoConfigurationImportSelector` 类,负责加载自动配置类。- **`@ConditionalOnClass`**:当类路径中存在指定类时,配置类生效。

2025-05-21 22:32:34 409

原创 13、自动配置【源码分析】-自动包规则原理

Spring Boot的自动配置通过`@EnableAutoConfiguration`和`META-INF/spring.factories`文件,加载并筛选符合条件的自动配置类。- 例如,`@ConditionalOnClass`检查类路径中是否存在特定类,`@ConditionalOnProperty`根据配置文件中的属性值决定是否生效。- 复合注解,包含`@SpringBootConfiguration`、`@EnableAutoConfiguration`和`@ComponentScan`。

2025-05-21 22:31:08 315

原创 12、底层注解-@ConfigurationProperties配置绑定

Spring Boot通过`ConfigurationPropertiesBindingPostProcessor`后处理器,在容器启动时扫描带有`@ConfigurationProperties`注解的Bean,并将配置属性绑定到对应的属性上。- **自动映射**:将配置文件(如`application.properties`或`application.yml`)中的属性值自动映射到Java类的对应属性上。- **数据校验**:结合`@Valid`注解,可以对绑定属性进行数据校验,确保配置的有效性。

2025-05-20 09:20:35 487

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除