- 博客(162)
- 资源 (33)
- 问答 (7)
- 收藏
- 关注
原创 springmvc源码之ViewResolver视图解析器
ViewResolver进行视图解析,根据逻辑视图名解析成真正的视图,首先根据逻辑视图名解析成物理视图名即具体的页面地址,再生成View视图对象,最后对View进行渲染将处理结果通过页面展示给用户。springmvc框架提供了很多的View视图类型,包括:jstlView、freemarkerView、pdfView等。InternalResourceViewResolver将逻辑视图名称解析为View对象,架构该对象渲染的任务委托给Web应用程序上下文的一个模板。
2023-01-17 11:42:52
189
原创 springmvc源码之HandlerAdapter处理适配器
Spring 中的处理器的实现有很多种方式,比如可以实现 Controller 接口,也可以用 @RequestMapping 注解将方法作为一个处理器等,这就导致 Spring 不知道怎么调用用户的处理器逻辑。平常使用最多的也是RequestMappingHandlerAdapter,即使用@Controller和@RequestMapping来进行映射的接口,即实现了InitializingBean接口,所以会执行afterPropertiesSet方法。
2023-01-13 16:18:22
416
原创 springmvc源码之HandlerMapping处理器映射器
HandlerMapping帮助DispatcherServlet进行web请求的url到具体处理类的匹配,用来根据请求的url查找Handler,内部维护的Map映射,springmvc提供了不同的映射器实现不同的映射方式,例如:配置文件方式,实现接口方式,注解方式等。在进行访问的时候会通过org.springframework.web.servlet.DispatcherServlet#getHandler方法来遍历handlerMappings。
2023-01-04 11:35:09
261
原创 springmvc源码之DispatcherServlet前端控制器
国际化处理AcceptHeaderLocaleResolver 基于URL参数的配置,可以读取url中locale=zh_CN来控制国际化参数CookieLocaleResolver 基于cookie的配置,可以通过浏览器的cookie设置获取Locale对象SessionLocaleResolver 基于session的配置,可以公国检验session的预置的属性来解析,如果没有则会根据请求头中的accept-language来确定主题处理,根据主题控制网页风格。
2022-12-26 15:41:39
312
原创 linux利器curl
使用-G表示发起Get请求,同时可以联合–data-urlencode来转义URL参数里的中文特殊符号,data-urlencode默认是POST请求,如果没有-G参数,会发起一个POST请求。有时候想在命令行下通过http访问接口/网页,可以使用curl来进行操作。使用-X可以指定发送请求类型,如GET|POST|PUT|DELETE。使用-d表示发起post请求,-d后为post内容。使用-I参数,只会返回响应header。使用-i参数,会返回响应header。使用-H可以设置HTTP请求头。
2022-12-20 16:51:12
472
原创 springmvc源码之Web上下文初始化
web上下文与SerlvetContext的生命周期应该是相同的,springmvc中的web上下文初始化是由ContextLoaderListener来启动的在web.xml中配置ContextLoaderListenerContextLoaderListenerContextLoaderListener实现了ServletContextListener接口,ServletContextListener是Servlet定义的,提供了与Servlet生命周期结合的回调,contextInitializ
2022-11-21 11:27:15
221
原创 springmvc国际化
之前javaweb的时候就是用过国际化,而springmvc作为一个javaweb的框架,肯定也是支持国际化的,其建立在java国际化的基础之上,通过不同国家或语言的消息资源,通过ResourceBundle加载指定的Locale对应的资源文件,在取得该资源文件中指定key对应的消息。在springmvc中选择语言区域,可以使用语言区域解析器,而LocaleResolver就是springmvc中提供的区域解析器接口,实现类有。
2022-10-25 17:12:55
243
原创 springmvc文件上传
在Servlet3.0中配置的话,需要在web.xml中为DispatcherServlet添加一个multipart-config元素,或者通过编程的方式使用MultipartConfigElement进行注册,不允许在MultipartResolver中配置这些信息。StandardServletMultipartResolver:依赖于Servlet3.0对multipart的支持,如果没有使用Servlet3.0的容器,那么只能使用CommonsMultipartResolver。
2022-10-23 14:40:40
228
原创 RequestBodyAdvice和ResponseBodyAdvice
该接口是在消息体被HttpMessageConverter消息解析器写入之前执行的。该接口是在获取@RequestBody参数数据之前进行处理的。在spring4中新添加的两个接口。
2022-10-20 12:02:27
326
原创 springmvc参数解析
现在使用这种格式的比较多,报文会在请求体内,而不是拼接到地址中,使用springmvc接收时使用@RequestBody注解标注,使用到的参数处理器为RequestResponseBodyMethodProcessor,默认会用到MappingJackson2HttpMessageConverter进行参数类型的转换,底层依赖到Jackson相关的包。
2022-10-18 10:23:09
254
原创 spring获取当前request
使用RequestContextHolder.currentRequestAttributes()获取的RequestAttributes对象是线程局部变量(ThreadLocal),request对象也是线程局部变量。有时候需要在处理业务的时候用到request对象,可以使用该方法获取。
2022-10-16 15:18:40
293
原创 springmvc注解的使用
可以放到方法上或者参数上,它将方法参数或方法返回值绑定到命名中的Model属性中,然后将其公开给Web视图。默认情况下Spring MVC将模型中的数据存储到request域中,当一个请求结束后,数据就失效了,如果要跨页面使用,那么需要使用到session,而@SessionAttributes注解就可以使得模型中的数据存储一份到session域中。标记在方法的参数上,会将客户端传递过来的参数按名称注入到指定对象中,并且会将这个对象自动加入ModelMap中,便于View层使用。如:get/{id}
2022-10-13 14:42:39
222
原创 使用springSession完成分布式session
分布式session可以使用spring session来进行实现,由于HttpRequest的Wrapper功能,许多HttpRequest中的方法都可以进行替换来进行自定义的重写,所以可以将getSession方法重写掉,然后进行自定义的session存储和处理,当然了,你能想到的,一般都是早就有人已经实现了,就不重复造轮子了。启动项目之后正常的向往常一样的操作session,就可以看到redis中存有session了。这里演示的是将session存储在redis中,所需要的依赖。
2022-10-11 14:19:32
184
原创 restTemplate解析401异常失败
这时候需要在创建restTemplate的时候更改requestFactory,使用HttpComponentsClientHttpRequestFactory。如果使用restTemplate默认构造器的话,在进行错误解析的时候,使用。
2022-10-08 10:41:06
285
原创 spring源码分析之事务源码分析
而且继承的类也是一样的,都是AbstractAdvisorAutoProxyCreator,之后的逻辑就与AOP的很是相似了,找Advisor类的bean,是有一个的,注册BeanFactoryTransactionAttributeSourceAdvisor。与AOP的标签解析相同,tx:annotation-driven标签也是自定义标签,http://www.springframework.org/schema/tx找到对应的handler是TxNamespaceHandler。
2022-10-07 12:15:09
338
原创 spring源码分析之AOP开启注解
在获取bean的时候会创建bean,但是不要忘了该类还实现了一个BeanFactoryAware接口,在创建bean之后会进行初始化,也就会执行org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory#invokeAwareMethods方法。即进行自定义标签的解析,会去META-INF/spring.handlers中寻找对应的handler,该标签的namespace是。
2022-10-06 14:34:35
444
原创 spring源码分析之循环依赖
对于setter注入造成的循环依赖,spring采用的是提前暴露刚完成的构造器实例化但未完成setter方法注入的bean来实现的,而且只能解决单例作用域的bean。使用构造器注入构成循环依赖,这种方式无法进行解决,抛出了BeanCurrentlyInCreationException异常。spring中将循环依赖处理分为了两种情况。在创建bean之前会进行检测。在创建bean之后会进行移除。
2022-09-30 12:59:44
84
原创 spring源码分析之获取bean
在进行获取bean的时候使用getBean方法来进行获取,那么就从getBean来作为入口,看一下获取bean的流程。从缓存singletonObjects中加载单例,如果加载不成功尝试从singletonFactories中加载。主要是为了解决FactoryBean的情况。这个方法比较长,分为很多步。依赖注入是在这里进行的。三级缓存解决循环依赖。
2022-09-27 15:18:52
377
原创 spring源码分析之ProxyFactoryBean
ProxyFactoryBean是spring ioc环境中创建AOP应用的底层方法,通过它完成了对AOP的封装。
2022-09-26 15:55:55
168
原创 spring源码分析之上下文构建
以ClassPathXmlApplicationContext为例来说明一个简单地创建ApplicationContext实例的方法,spring会做什么事呢?spring在初始化上下文的最重要的方法就是这个refresh()方法了prepareRefresh初始化容器初始化之前的初始化工作obtainFreshBeanFactory创建BeanFactory创建BeanFactory,实现BeanFactory的全部功能refreshBeanFactoryorg.springframewo
2022-09-21 18:01:58
224
原创 spring配置双数据源
原文链接 https://zhhll.icu/2021/框架/spring/基础/18.spring配置双数据源/前段时间有个需求,需要将将数据存到两个数据库中,一个库中存放主信息,一个库中存放特殊信息,看来是要使用双数据源了,来搞起来吧既然是双数据源,先不管怎么切换,配置得先搞起来动态数据源配置好了数据源之后,需要进行定义动态数据源,继承AbstractRoutingDataSource,AbstractRoutingDataSource是基于特定的查找key路由到特定的数据源。它内部维护了一组目标数
2022-09-20 14:52:47
212
原创 linux之alias别名
可以将alias命令保存在系统启动文件中,如~/.bash_profile中。可以使用alias来设置命令的别名来简化命令。可以使用alias命令来查看所设置的别名。可以使用unalias来去除别名。
2022-09-19 14:29:27
348
原创 CSDN编程竞赛介绍
报名了三次,但是有一次太忙了,没腾出手来活动时间:9月8日-21日(竞赛时间截止9.18)竞赛考试时间:9月18日 8:30-11:00(作答时间2小时)9月18日 11:00前点击比赛报名,并于9月18日 8:30—11:00,PC端登陆考试系统(当前页面届时将开放考试入口),在2小时内完成考试作答9月8日-9月21日,点击竞赛专属话题,在对应的模板编辑器里发稿成功即参与成功。
2022-09-19 10:20:49
139
原创 spring自定义属性编辑器
属性编辑器是用来解析bean的配置文件中的属性标签的,spring的BeanWrapperImpl默认会注册CustomCollectionEditor(集合)、CustomMapEditor(Map)、CurrencyEditor(货币)、ByteArrayPropertyEditor等,可以使用来注册属性编辑器,实现了BeanFactoryPostProcessor接口,由spring容器自动检测并执行。
2022-09-15 17:40:03
415
原创 spring引入外部属性文件
这样配置当然也可以,只是要去修改spring配置文件的时候由于spring的配置文件内容太多,不太方便,所以有时候会引入外部的属性文件。有时候我们并不想把所有的配置信息都放到spring的配置文件中,这样的话也不太好维护,比如说数据库的信息。会生成一个PropertySourcesPlaceholderConfigurer类来解析占位符。db.properties属性文件。
2022-08-25 10:25:51
168
原创 spring的扩展接口
这时所有的bean的描述信息已经加载完毕,但是还没有进行bean初始化。它扩展自BeanFactoryPostProcessor,在执行BeanFactoryPostProcessor的功能前,提供了可以添加bean definition的能力,允许在初始化一般bean前,注册额外的bean。与BeanFactoryPostProcessor的区别是处理的对象不同,BeanFactoryPostProcessor是对beanfactory进行处理,BeanPostProcessor是对bean进行处理,
2022-08-23 15:15:10
238
1
原创 CSDN线上竞赛第四期体验
想着提升一下算法,又不知从何开始,正好CSDN提供了一个线上竞赛,就报名参加了一下,正好也是周末,题嘛,确实也是不会做,差的还很多,而且这题有的还有问题,唉,心累。
2022-08-22 11:42:41
82
原创 spring bean的作用域
spring容器中bean有五种作用域- singleton单例:这种 bean 范围是默认的,这种范围确保不管接受到多少个请求,每个容器中只有一个 bean 的实例,单例的模式由 bean factory 自身来维护,在加载spring配置文件时就会创建对象- prototype原型:原型范围与单例范围相反,为每一个 bean 请求提供一个实例,在调用getBean方法的时候才会创建- request请求:在请求 bean 范围内会每一个来自客户端的网络请求创建一个实例,在请求完成以后,bean 会
2022-08-19 16:44:16
125
原创 spring事务失效场景
Spring在扫描Bean的时候会自动为标注了@Transactional注解的类生成一个代理类(proxy),当有注解的方法被调用的时候,实际上是代理类调用的,代理类在调用之前会开启事务,执行事务的操作,但是同类中的方法互相调用,相当于this.B(),此时的B方法并非是代理类调用,而是直接通过原有的Bean直接调用,所以注解会失效。首先spring的事务是使用AOP来实现的,而AOP的底层是代理(JDK代理或者CGLIB代理),所以事务失效就想什么时候不能进行代理。配置的方法非public修饰。...
2022-08-18 10:41:13
87
1
原创 spring事件监听
Spring 提供了以下 5 中标准的事件:上下文更新事件ContextRefreshedEvent该事件会在ApplicationContext 被初始化或者刷新时发布。也可以在调用 ConfigurableApplicationContext 接口中的 refresh()方法时被触发上下文开始事件ContextStartedEvent当容器调用ConfigurableApplicationContext的 Start()方法开始/重新开始容器时触发该事件。......
2022-08-17 12:03:10
96
1
原创 linux之系统资源命令
第三行是分区信息:total是swap的总数,used是已经使用的,free是空闲的,当上面提到的+buffers/cache表示的可用内存都已使用完,新的读写请求过来后,会把内存中的部分数据写入磁盘,从而把磁盘的部分空间当做虚拟内存来使用。第一行是内存信息:total表示总内存数,used表示已经使用的,free表示空闲的,shared表示多个进程共享的,buffers表示缓冲内存数,cached表示缓存内存数。按L切换显示画面上边的刻度;按f可以编辑过滤代码,这是翻译过来的说法,我还没用过这个!...
2022-08-16 14:19:14
386
1
原创 linux之进程管理命令
第一行是任务队列信息,返回信息与uptime类似,系统当前时间、系统运行了多长时间、有多少用户正在使用该系统、系统每隔1分钟、5分钟、15分钟的平均负载。显示各种进程分别占用内存的情况,可以看到所有内存地址的详细信息,而且还显示了启动进程的命令。第二行是进程统计信息,分别为总数、正在运行的数量、睡眠的数量、停止的数量、僵尸数。第三行 %Cpu一行中展示的是cpu的使用情况。根据CPU使用率排序的活动进程。显示多处理器系统的CPU使用率。显示系统上运行的进程列表。...
2022-08-15 15:30:41
316
1
原创 linux之后台运行命令
很多时候需要将命令放在后台执行,那么如何让命令在后台运行呢,只需要在命令后加上&即可。使用定时任务,让系统执行该命令,这样该命令就与终端无关了,不依赖所登录的终端。使用nohup命令,使得后台命令在离开操作终端也可以正确的在后台执行。但是后台运行的命令在关闭终端之后就会终止,如何解决这个问题呢?...
2022-08-11 10:18:24
828
3
原创 linux之查看端口占用
可以使用netstat -tunlp | grep 端口号 来查看指定的端口号的进程情况。可以使用lsof -i:端口号 来查看端口占用情况。
2022-08-09 14:14:10
2461
1
原创 linux之定时任务
由于at只能执行一次,所以使用的并不多,真正使用的多的是crontab执行定时任务。在/etc/crontab配置文件中配置。依赖于crond服务。
2022-08-08 15:41:51
258
1
原创 linux之linux下载软件包
我在使用系统自带的yum源文件时发现无法访问那些网站,所以去找了个搜狐的镜像源,将原本的baseurl的前半部分换为http://mirrors.sohu.com/该命令的作用是调用gcc编译器,读取上述Makefile文件中的信息进行系统软件编译,编译是为了把源码程序转换成linux可执行的文件。yum的源配置文件保存在/etc/yum.repos.d文件夹中,默认使用的是CentOS-Base.repo。用于带 HP Alpha CPU 的计算机,最初是 DEC 公司开发的。......
2022-08-05 17:10:02
1633
1
原创 linux之vim编辑器
末行模式该模式下,在vim界面最下边可以输入命令,来执行各种操作,编辑完文件之后,想要保存修改或者不保存修改都需要进入末行模式来进行操作,从命令模式切到底末模式,按(冒号)进入末行模式。vim有三种模式,命令模式,插入模式,末行模式,在一开始的时候默认进入的是命令模式。插入模式(输入模式)可以向文件中输入字符的模式。命令模式默认的模式,该模式下有很多的快捷键。按Esc退出输入模式,进入命令模式。...
2022-07-29 15:07:49
107
1
Mycat-server-1.6.7.4-release-20200105164103-mac.tar.gz
2022-05-20
apache-shardingsphere-incubating-4.0.1-sharding-proxy-bin.tar.gz
2022-05-13
java中的强引用软引用问题
2017-05-21
myeclipse报错自动关闭
2017-05-19
java内部类中的局部变量
2017-05-19
关于JavaScript的事件
2017-04-24
myeclipse下编写的jsp中文乱码
2017-04-23
html表格单元格焦点事件问题
2017-04-22
myeclipse中编写html表单
2017-04-21
TA创建的收藏夹 TA关注的收藏夹
TA关注的人