10-补充

2022-07-18

10-补充 springmvc之补充 一. 编码问题 在编程中我们经常遇到中文乱码问题,主要分为以下几种: 返回一个页面 返回一个string类型且方法注释了@ResponseBody注解 返回一个json数据且方法注释了@ResponseBody注解 下面依次看看每种情况 1.1 返回页面乱码 这种情况在springboot中已经看不到了,因为springboot已经帮我们做了编码的自动配置为utf-8 首先看看正常页面编码是如何设置的: 在HttpEncodingAutoConfiguration这个自动配置类中,注入了CharacterEncodingFilter。 private final HttpProperties.Encoding properties; public HttpEncodingAutoConfiguration(HttpProperties properties) { this.properties = properties.getEncoding(); } @Bean @ConditionalOnMissingBean public Charact....

03-HandlerMapping

2022-07-18

03-HandlerMapping springmvc之HandlerMapping 一 概述 HandlerMapping的作用是根据request找到对应的处理器Handler @Nullable HandlerExecutionChain getHandler(HttpServletRequest request) throws Exception; 二. 源码分析 HandlerMapping家族成员如下所示: 通常我们使用的是RequestMappingHandlerMapping 接下来分析下整个家族的实现方式,另外一条继承线路AbstractUrlHandlerMapping不常使用,不做分析 2.1 AbstractHandlerMapping 2.1.1 创建 该类继承了WebApplicationObjectSupport,因此在初始化时会自动调用initApplicationContext() @Override protected void initApplicationContext() throws BeansException { extendInte....

09-其他组件

2022-07-18

09-其他组件 springmvc之其他组件 一. LocaleResolver LocaleResolver的作用是使用request解析出Locale。主要是配合视图渲染来使用的,在DispatchServlet中有如下的代码 protected void render(ModelAndView mv, HttpServletRequest request, HttpServletResponse response) throws Exception { // Determine locale for request and apply it to the response. Locale locale = (this.localeResolver != null ? this.localeResolver.resolveLocale(request) : request.getLocale()); response.setLocale(locale); 如果配置了LocaleResolver,那么使用LocaleResolver从request中解析出Local,否则使用req....

06-RequestToViewNameTranslator

2022-07-18

06-RequestToViewNameTranslator springmvc之RequestToViewNameTranslator 一. 概述 RequestToViewNameTranslator可以在处理器返回的view为空时使用它根据request获取viewName。这个组件的实现非常简单,只有一个实现类DefaultRequestToViewNameTranslator 这个组件不是很常用,这里简单分析下 二. 源码分析 2.1 在DispatchServlet中的体现 在DispatchServlet中,如下的方法使用到了这个组件 applyDefaultViewName(processedRequest, mv); private void applyDefaultViewName(HttpServletRequest request, @Nullable ModelAndView mv) throws Exception { if (mv != null && !mv.hasView()) { String defaultViewName = ge....

00-环境搭建问题

2022-07-18

00-环境搭建问题 spring源码环境搭建问题 下载源码和gradle就不再赘述,主要记录几个难缠的问题 一. 少包 在导入ide之后,发现有spring-cglib-repack-3.2.4.jar和spring-objenesis-repack-2.4.jar不存在,在spring-framework目录下执行gradle objenesisRepackJar和gradle cglibRepackJar命令,会在Spring-framework\spring-core\build\libs目录下生成jar包。 二. kotlin错误 Error:Kotlin: [Internal Error] java.lang.LinkageError: loader constraint violation: loader (instance of org/jetbrains/kotlin/cli/jvm/plugins/PluginURLClassLoader$SelfThenParentURLClassLoader) previously initiated loading for a....

spring注解驱动开发之web开发

2022-07-18

spring注解驱动开发之web开发 spring注解驱动开发之Web开发 一. servlet3.0 maven依赖 <dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> <version>3.0.1</version> </dependency> Shared libraries(共享库) / runtimes pluggability(运行时插件能力) 1、Servlet容器启动会扫描,当前应用里面每一个jar包的 ServletContainerInitializer的实现 2、提供ServletContainerInitializer的实现类; 必须绑定在,META-INF/services/javax.servlet.ServletContainerInitializer 文件的内容就是ServletContainerInitializer实现类的....

freemarker

2022-07-18

freemarker 什么是freemarker FreeMarker 是一款 模板引擎: 即一种基于模板和要改变的数据, 并用来生成输出文本(HTML网页,电子邮件,配置文件,源代码等)的通用工具。 它不是面向最终用户的,而是一个Java类库,是一款程序员可以嵌入他们所开发产品的组件。 入门 模板+数据模型=输出 为模板准备的数据整体被称作为 数据模型。 注:模板就相当于jsp,使用el表达式,数据模型就是后台所绑定的数据 常用指令 if指令 <#if student.gender == 0> 女 <#elseif student.gener == 1> 男 <#else> 保密 </#if> list指令 <#list sequence as loopVariable>repeatThis</#list> 解释如下: 相当于foreach遍历 sequence 要遍历的值 loopVariable 遍历值中每一个子项 例子: <#list misc.fruits> ....

注解大全

2022-07-18

注解大全 @Column(name = "") 表示属性对应的字段名 @Entity 放在bean类前,表示该类为实体类 @Table(name = "") 表示该实体类对应的表名 @Id 放在属性前,表示该属性为主键 @GeneratedValue(generator="system-uuid") 用generator属性指定要使用的策略生成器。 @GenericGenerator(name = "system-uuid", strategy = "uuid") 声明一个策略通用生成器,name为”system-uuid”,策略strategy为”uuid”。 uuid是通用唯一识别码(Universally Unique Identifier)的缩写,是一种软件建构的标准 @ManyToOne ManyToOne(多对一)单向:不产生中间表,但可以用@Joincolumn(name=" ")来指定生成外键的名字,外键在多的一方表中产生!hibernate中@ManyToOne默认是立即加载,@OneToMany默认是懒加载 @Joincolumn 一对一:现假设有P....

AOP小知识

2022-07-18

AOP小知识 aop中对参数的拦截,如果参数是对象,修改中间的属性会影响参数本身,即aop中的对象是实实在在传过来的,而不是拷贝了一份

hql语法

2022-07-18

hql语法 HQL简单查询语句语法 如果查找具体的一个两个数据需要加select,全部查询可以省略select hql = " from Person p where p.age = 10"; 这里的Person是java中的实体类,实际中需要写全名

spring-aop

2022-07-18

spring-aop AOP(面向切面编程) Aspect-Oriented Programming AOP 中的基本单元是 Aspect(切面) 指在程序运行期间动态的将某段代码切入到指定方法指定位置进行运行的编程方式 一. 基本概念 1.1 Acpect(切面) aspect 由 pointcount 和 advice 组成, 它既包含了横切逻辑的定义, 也包括了连接点的定义. Spring AOP就是负责实施切面的框架, 它将切面所定义的横切逻辑织入到切面所指定的连接点中. AOP的工作重心在于如何将增强织入目标对象的连接点上, 这里包含两个工作: 如何通过 pointcut 和 advice 定位到特定的 joinpoint 上 如何在 advice 中编写切面代码. 可以简单地认为, 使用 @Aspect 注解的类就是切面. 1.2 advice(增强) 由 aspect 添加到特定的 join point(即满足 point cut 规则的 join point) 的一段代码. 许多 AOP框架, 包括 Spring AOP, 会将 advice 模拟为一个拦截器(....

spring注解驱动开发之IOC

2022-07-18

spring注解驱动开发之IOC spring注解驱动开发(一) 项目路径见/Users/mahaonan/mhn/javaProject/springannotation 一. 组件注解介绍 1. @Configuration和@Bean 配置类 @ComponentScan(value = "com.mahaonan", includeFilters = { @ComponentScan.Filter(type = FilterType.ANNOTATION, classes = { Controller.class }), @ComponentScan.Filter(type = FilterType.ASSIGNABLE_TYPE, classes = BookService.class), @ComponentScan.Filter(type = FilterType.CUSTOM, classes = {MyTypeFilter.class}) }, useDefaultFilters = false) @Configuration public class Mai....

freemarker2

2022-07-18

freemarker2 freemarker后台 freemarker简单环境搭建 导入maven依赖 org.freemarker freemarker 2.3.9 创建Freemarker工具类,获取模板对象 public class FreemarkerUtil { /** 获取模板对象 @param name @return / public Template getTemplate(String name){ Template temp = null; try{ //获取Configuration配置对象 Configuration cfg = new Configuration(); //设置模板加载的路径 cfg.setDirectoryForTemplateLoading(new File("F:\mhn\Test\src\main\webapp\ftl")); //获取模板对象 temp = cfg.getTemplate(name); }catch (IOException e){ e.printStackTrace(); } return temp;....

day01

2022-07-18

day01 Spring Java Bean 类定义,符合如下规则的java对象称为Java Bean 必须有包 必须有无参数构造器 必须实现 序列化接口 有get set方法声明的"Bean属性". bean属性 不是对象属性,指get,set方法 boolean类型的get属性方法,可以声明为 isXXX 符合一定规范的Java对象 Spring IOC Spring IOC用于管理(创建,修改属性等)Java Bean对象. Spring IOC可以创建Java Bean对象 Spring IOC可以修改Bean属性 Spring IOC可以作为Java Bean的工厂使用 Spring 可以管理Bean属性 Bean属性注入:修改"Bean属性" 不是对象的属性!实际上是调用了setXXX方法,修改了Bean属性. 工厂方法 简单理解就是利用方法创建对象 将对象复杂的创建过程封装到方法中 使用时候调用方法就重用了复杂的对象创建过程,简洁的得到对象. 静态工厂方法:(类调用(静态)) Connection getConnection() Co....

7.31

2022-07-18

7.31 Hibernate 什么是Hibernate Hibernate框架简化了java应用程序与数据库交互的开发。 Hibernate是一个开源,轻量级的ORM(对象关系映射)工具。 hibernate的优点 开源和轻量级: Hibernate框架是根据LGPL许可证和轻量级的开源工具。 快速性能: Hibernate框架的性能很快,因为缓存在Hibernate框架内部使用。 hibernate框架中有两种类型的缓存:一级缓存和二级缓存。一级缓存默认是启用的。 数据库独立查询: HQL(Hibernate查询语言)是面向对象的SQL版本。 它生成数据库独立查询。 所以你不需要编写数据库特定的查询语句。 在Hibernate之前,如果项目更改了数据库,我们需要更改SQL查询,从而导致维护变得非常复杂。 自动创建表: Hibernate框架提供了自动创建数据库表的功能。 因此,无需手动在数据库中创建表。 简化复杂连接: 在hibernate框架中可轻松获取多个表中的数据。 提供查询统计和数据库状态: Hibernate支持查询缓存,并提供有关查询和数据库状态的统计信息。 dia....

day03

2022-07-18

day03 Spring MVC 使用Spring MVC 导入spring-mvc包 在 web.xml 中配置前端控制器 为前端控制器提供 spring 配置文件 在Spring配置文件中配置Spring MVC组件 ModelAndView 什么是ModelAndView: Spring MVC认为web控制器处理结果后,需要将数据(Model)发送到视图(view)显示,ModelAndView就是一个封装显示数据和视图的Java Bean对象. ModelAndView构造器 new ModelAndView(view,model) new ModelAndView(view)

05-互联网架构服务降级熔断Hystrix

2022-07-18

05-互联网架构服务降级熔断Hystrix 互联网架构服务降级熔断Hystrix 一. 分布式核心知识之熔断,降级讲解 系统负载过高,突发流量或者网络等各种异常情况介绍,常用的解决方案 1. 熔断 保险丝,熔断服务,为了防止整个系统故障,包含自己和下游服务 下单服务 -> 商品服务 -> 用户服务(出现故障 -> 熔断) 2. 降级 抛弃一些非核心的接口和数据 只带核心的物品,抛弃非核心的,等有条件时再恢复 3. 熔断和降级互相交集 相同点 1)从可用性和可靠性出发,为了防止系统崩溃 2)最终让用户体验到的是某些功能暂时不能用 不同点 1)服务熔断一般是由下游服务故障导致的,而服务降级一般是从整体系统负荷考虑,由调用方控制 二. Netflix开源组件断路器Hystrix介绍 1. 什么是Hystrix hystrix对应的中文名字是“豪猪”,豪猪周身长满了刺,能保护自己不受天敌的伤害,代表了一种防御机制,这与hystrix本身的功能不谋而合,因此Netflix团队将该框架命名为Hystrix,并使用了对应的卡通形象做作为logo。 2. ....

06-微服务网关zuul

2022-07-18

06-微服务网关zuul 微服务网关zuul开发 一. 微服务网关介绍和使用场景 1. 什么是网关 API Gateway,是系统的唯一对外的入口,介于客户端和服务器端之间的中间层,处理非业务功能 提供路由请求、鉴权、监控、缓存、限流等功能 统一接入 智能路由 AB测试、灰度测试 负载均衡、容灾处理 日志埋点(类似Nignx日志) 流量监控 限流处理 服务降级 安全防护 鉴权处理 监控 机器网络隔离 2. 主流的网关 zuul:是Netflix开源的微服务网关,和Eureka,Ribbon,Hystrix等组件配合使用,Zuul 2.0比1.0的性能提高很多 kong: 由Mashape公司开源的,基于Nginx的API gateway nginx+lua:是一个高性能的HTTP和反向代理服务器,lua是脚本语言,让Nginx执行Lua脚本,并且高并发、非阻塞的处理各种请求 二. springCloud网关组件zuul的基本使用 1. 主要依赖 <dependency> <groupId>org.springframework.cloud</gr....

07-分布式链路追踪系统Sleuth和ZipKin实战

2022-07-18

07-分布式链路追踪系统Sleuth和ZipKin实战 分布式链路追踪系统Sleuth和ZipKin实战 一. 微服务下的链路追踪讲解和重要性 1. 什么是链路追踪系统 zipkin 由Twitter团队开源, Zipkin是一个分布式的跟踪系统。它有助于收集数据需要解决潜在的问题在市微服架构的时机。它管理数据的收集和查找 。 该产品结合spring-cloud-sleuth使用较为简单, 集成很方便。 但是功能较简单。 2. 重要性 对于普通系统或者服务来说,一般通过打日志来进行埋点,然后再通过elk进行定位及分析问题,更有甚者直接远程服务器,使用各种linux命令单手操作查看日志,说到这,我也没摆脱这种困境。那么随着业务越来越复杂,企业应用也进入了分布式服务化的阶段,传统的日志监控等方式无法很好达到跟踪调用,排查问题等需求。这时候就需要一个系统来解决实际中的各种问题. 二. SpringCloud的链路追踪组件Sleuth实战 最主要功能,做日志埋点 1. 什么是Sleuth 一个组件,专门用于追踪每个请求的完整调用链路

03-SpringCloud核心组件

2022-07-18

03-SpringCloud核心组件 SpringCloud核心组件 一. 什么是微服务的注册中心 理解注册中心 服务管理,核心是有个服务注册表,心跳机制动态维护(保证服务接口可用) 服务提供者provider 启动时向注册中心上报自己的网络信息 服务消费者consumer 启动时向注册中心上报自己的网路信息,拉取provider的相关网络信息 用途 微服务应用和机器越来越多,调用方需要知道接口的网络地址,如果靠配置文件的方式去控制网络地址,对于动态新增机器,维护带来很大问题 主流注册中心 zookeeper,Eureka, consul, etcd 二. 分布式应用知识CAP理论知识 1. CAP定理 指的是一个分布式系统中,Consistency(一致性), Availability(可用性), Partition-tolerance(分区容错性), 三者不可同时获得 即三选二 2. 分别介绍 一致性 在分布式系统中的所有数据备份,在同一时刻是否同样的值. (所有节点在同一时间的数据完全一致,越多节点,数据同步越耗时) 主从数据库的数据一致....