springMvc Velocity tool 源码分析
在公司使用pandoraboot配置了velocity tool,一直不明白官方支持的init方法没有调用,而且不支持velocity tool 1.x版本的定义(1.x和2.x的定义见下面),而另一种没使用pandoraboot的源码,确好好的,百思不得其解,然后各种断点调试了一天,发现了端倪,我们的starter中重写了VelocityLayoutView.java类,在new Tool的时候,使用了BeanUtils.instantiate方法,然后导致velocity tool初始化时的各种特性丢失,然后顺带lou了一把Velocity tool的源码,这里抛个砖。
velocity tool定义
.x定义
<toolbox>
<tool>
<key>tool</key>
<scope>request</scope>
<class>org.apache.velocity.tools.generic.AlternatorTool</class>
</tool>
</toolbox> .x定义,key定义在类里面,使用DefaultKey注解的形式
<tools>
<toolbox scope="application">
<tool class="org.apache.velocity.tools.generic.AlternatorTool"/>
</toolbox>
</tools>
Velocity tool的使用方法就不贴了,不懂的自行百度,使用velocity离不开VelocityViewResolver,这个是velocity的根基,首先VelocityViewResolver继承自AbstractTemplateViewResolver,实现了ApplicationContextAware接口,所以在VelocityViewResolver被spring初始化的时候,会调用initApplicationContext方法,这里会设置viewClass,即VelocityToolboxView,
然后控制权会回到DispatcherServlet的render方法中,执行resolveViewName,对应的是调用VelocityViewResolver.buildView,在父类里会调用spring方法BeanUtils.instantiateClass生成一个VelocityToolboxView(这个viewClass就是前面在VelocityViewResolver中设置的),同时调用setToolboxConfigLocation(),这个方法执行完成,VelocityViewResolver的工作就完成了,到这里,我们才有了一个真正的view对象,render方法中继续向前,就会到VelocityToolboxView中的createVelocityContext(),这里会调用ServletToolboxManager.getInstance()方法,这个方法很重要,首先它新建一个会调用ServletToolboxManager,同时这个方法里面加载了toolbox.xml文件并解析(解析是在toolboxManager.load方法里面,不展开了),load完成之后,各个tool类就被加载到ServletToolboxManager对象中了,注意这里tool类还没有被实例化,
最后会调用getToolbox()方法,这个方法里面会实例化各个tool(实例化的时候作了兼容,也就是会调用老1.x tool中的init方法,和2.x tool中configure(Map)),并放到sessionToolInfo和requestToolInfo中
然后流程到这里就完了,有时间补下流程图,睡觉了。

springMvc Velocity tool 源码分析的更多相关文章
- SpringMVC由浅入深day01_6源码分析(了解)
6 源码分析(了解) 通过前端控制器源码分析springmvc的执行过程. 入口 第一步:前端控制器接收请求 调用doDiapatch 第二步:前端控制器调用处理器映射器查找 Handler 第三步: ...
- Spring之SpringMVC的RequestToViewNameTranslator(源码)分析
前言 SpringMVC如果在处理业务的过程中发生了异常,这个时候是没有一个完整的ModelAndView对象返回的,它应该是怎么样处理呢?或者说应该怎么去获取一个视图然后去展示呢.下面就是要讲的Re ...
- Spring之SpringMVC的Controller(源码)分析
说明: 例子就不举了,还是直接进入主题,本文主要是以SpringMVC的Controller接口为入点,来分析SpringMVC中C的具体实现和处理过程. 1.Controller接口 public ...
- Spring之SpringMVC的MethodNameResolver(源码)分析
前言 在介绍SpringMVC 的Controller的具体实现中,我们讲到了MultiActionController.在获取处理请求对于的方法的时候我们用到了下面的代码,来自于MultiActi ...
- springmvc执行流程 源码分析
进入DispatcherServlet 执行onRefresh,然后执行初始化方法initStrategies.然后调用doService——>doDispatch. 根据继承关系执行Servl ...
- SpringMVC之HandlerMapping源码分析
01.doDispatch方法中代码如下:HandlerExecutionChain mappedHandler=this.getHandler(processedRequest) 02.Dispat ...
- SpringMVC源码分析-400异常处理流程及解决方法
本文涉及SpringMVC异常处理体系源码分析,SpringMVC异常处理相关类的设计模式,实际工作中异常处理的实践. 问题场景 假设我们的SpringMVC应用中有如下控制器: 代码示例-1 @Re ...
- SpringMVC执行流程及源码分析
SpringMVC流程及源码分析 前言 学了一遍SpringMVC以后,想着做一个总结,复习一下.复习写下面的总结的时候才发现,其实自己学的并不彻底.牢固.也没有学全,视频跟书本是要结合起来一起, ...
- springMVC源码分析--视图View(一)
之前的博客springMVC源码分析--HttpMessageConverter数据转化(一)中我们已经介绍了数据返回值的处理,在博客springMVC源码分析--ViewResolver视图解析器( ...
随机推荐
- python scrapy cookies 处理
def start_requests(self): cookies = 'anonymid=jcokuqwe................省略' # 首先是对cookies进行分割以;为节点 ook ...
- 菜鸟学习Spring Web MVC之一
---恢复内容开始--- 当当当!!沉寂两日,学习Spring Web MVC去了.吐槽:近日跟同行探讨了下,前端攻城师,左肩担着设计师绘图,右肩担着JAVA代码?!我虽设计过UI,但这只算是PS技巧 ...
- UVALive 7456 Least Crucial Node
题目链接 题意: 给定一个无向图,一个汇集点,问哪一个点是最关键的,如果有多个关键点,输出序号最小的那个. 因为数据量比较小,所以暴力搜索就行,每去掉一个点,寻找和汇集点相连的还剩几个点,以此确定哪个 ...
- 判断线段之间的关系(D - Intersecting Lines POJ - 1269 )
题目链接:https://vjudge.net/contest/276358#problem/D 题目大意:每一次给你两条直线,然后问你这两条直线的关系(平行,共线,相交(输出交点)). 具体思路:先 ...
- mybatis批量增加与删除——(十五)
1.首先应该明白,mybatis增删改返回值是int型的影响行数的值 mapper接口 package cn.xm.mapper; import java.util.List; import cn.x ...
- 字符串格式化(百分号&format)
字符串格式化 Python的字符串格式化有两种方式: 百分号方式.format方式 百分号方式: %[(name)][flags][width].[precision]typecode [ ]:表示 ...
- mysql+mycat压力测试一例【转】
前言 有很多人担心生产系统上新东西的程序怕压力跟不上和稳定性不行,是的,大家都怕,所以领导要求做一次压力测试,我个人也觉得是有必要的. 如果按原理来说,mycat如果不做分片,纯粹只是代理的话,他所做 ...
- springboot日志框架
Spring Boot日志框架Spring Boot支持Java Util Logging,Log4j2,Lockback作为日志框架,如果你使用starters启动器,Spring Boot将使用L ...
- OracleDBConsoleorcl 启动不了 服务特定错误2【解决办法】
问题描述: 我的oracle不知道为什么OracleDBConsoleorcl 启动不了 出现“服务特定错误2”现在我也不知道原因 估计是因为我电脑的IP经常变动,有时在公司用,有时在家里用! 我的o ...
- jenkins之参数化构建
事件背景: 今天一早接到一个需求,说要jenkins持续集成,输入自定义URL,然后完成回归测试,当时有点蒙,不知道如何下手,听群里的大神思路后豁然开朗,就记录了下 一.先安装插件 插件: [Buil ...