开源社区
文章平均质量分 80
wl_ldy
这个作者很懒,什么都没留下…
展开
-
struts 的digester类解析xml文件
学习struts 的digester类解析xml文件 1、digester的简介 digester是struts的一个工具,用来解析struts的配置文件struts-config.xml,将xml的元素转换成java的对象。Digester是通过调用预定义的规则来操作xml元素,将xml的元素转换为java对象。 Digester底层采用SAX解析xml文件。首先识别出特定xml元素(实际细分为begin,body,end,finish四个步骤)后,执行特定的动作。diges转载 2010-10-07 20:20:00 · 1483 阅读 · 0 评论 -
Struts2源码阅读(六)_ActionProxy&ActionInvocation
<br />下面开始讲一下主菜ActionProxy了.在这之前最好先去了解一下动态Proxy的基本知识.<br />ActionProxy是Action的一个代理类,也就是说Action的调用是通过ActionProxy实现的,其实就是调用了ActionProxy.execute()方法,而该方法又调用了ActionInvocation.invoke()方法。归根到底,最后调用的是DefaultActionInvocation.invokeAction()方法。<br />DefaultActionInv转载 2010-10-18 15:57:00 · 3553 阅读 · 3 评论 -
Struts2源码阅读(四)_Dispatcher&ConfigurationProvider续
<br />接下来第三步:init_LegacyStrutsProperties()<br />调用的是调用的是LegacyPropertiesConfigurationProvider<br />通过比较前面DefaultPropertiesProvider与调用的是LegacyPropertiesConfigurationProvider.<br />发现DefaultPropertiesProvider继承自后者,但重写了register()方法,主要是生成PropertiesSetting的不同,前转载 2010-10-18 15:46:00 · 1689 阅读 · 0 评论 -
Struts2源码阅读(三)_Dispatcher&ConfigurationProvider
首先强调一下struts2的线程程安全,在Struts2中大量采用ThreadLocal线程局部变量的方法来保证线程的安全,像Dispatcher等都是通过ThreadLocal来保存变量值,使得每个线程都有自己独立的实例变量,互不相干.接下来就从Dispatcher开始看起,先看其构造函数://创建Dispatcher,此类是一个Delegate,它是真正完成根据url解析转向,读取对应Action的地方 public Dispatcher(ServletContext servletCo转载 2010-10-18 15:39:00 · 1132 阅读 · 0 评论 -
Struts2源码阅读(二)_ActionContext及CleanUP Filter
1. ActionContextActionContext是被存放在当前线程中的,获取ActionContext也是从ThreadLocal中获取的。所以在执行拦截器、 action和result的过程中,由于他们都是在一个线程中按照顺序执行的,所以可以可以在任意时候在ThreadLocal中获取 ActionContext。ActionContext包括了很多信息,比如Session、Application、Request、Locale、ValueStack等,其中 ValueStack可以解析ognl表转载 2010-10-18 15:30:00 · 1684 阅读 · 0 评论 -
StringBuffer和StringBuilder的区别与联系(源码级)
<br />他们的相同点都是继承了AbstractStringBuilder类,所有方法基本相同,但是StringBuffer是线程安全的,方法前有synchronized关键字。他们的初始化大小都是16,扩容机制是新容量=(旧容量+1)×2<br />public StringBuilder() { super(16); }public StringBuffer() { super(16); }<br />void expandCapacity(int minimumC转载 2010-10-14 23:07:00 · 1323 阅读 · 0 评论 -
Java集合源码----LinkedList解析
<br />LinkedList的实现其实是一个带哑头节点的双向循环链表。 <br />1.LinkedList的字段 <br />private transient Entry<E> header = new Entry<E>(null, null, null); <br />//Entry是一个LinkedList的内部类,其实就是链表上的节点,包含两个指针,一个指向 <br />//前面节点,一个指向后面节点 <br /> private static class Entry<E> { <br /转载 2010-10-13 15:12:00 · 1093 阅读 · 0 评论 -
Java集合源码--ArrayList的解析
ArrayList可以看作是对一个数组的包装,实现可变数组。 1.ArrayList的基本字段 //保存真正元素的数组,这里可能大家会感到奇怪,为什么把这数组标记为transient,这 //样序列化时不能序列化这个数组了。所以之后就只能才能手动序列化保存ArrayList里 //的元素值了。虽说数组里保存的都是对象的引用,序列化的时候,也会把真正的对象序 //列化保存起来的。但是如果是直接不用transient修饰这个数组,那么序列化时,那些 //elementData中为null的空间也会序列化。一句话转载 2010-10-13 14:55:00 · 2017 阅读 · 0 评论 -
if (log.isDebugEnabled()) {}使用场景初析
<br />一:问题:<br />在使用log4j,common-log这样的log框架时,发现很多代码中这样写 <br />if (log.isDebugEnabled()) { <br /> log.debug( "xxxx "); <br />} <br /><br />我很奇怪,为什么要与log.isDebugEnabled()?既然log.debug()在没有指定输出级别为DEBUG时不会有输出,为什么还要在前面加一个isDebugEnabled转载 2010-10-07 20:45:00 · 1193 阅读 · 0 评论 -
Struts中ActionServlet源码深入分析执行过程
<br />执行流程:<br />1、ActionServlet处理.do的请求 不管是get还是post方式都将转到<br /> protected void process(HttpServletRequest request, HttpServletResponse response) 方法。<br /> <br />2、根据请求对象和servletContext对象选择请求所隶属的模块<br /> ModuleUtils.getInstance().selectMo转载 2010-10-08 17:39:00 · 1536 阅读 · 0 评论 -
Struts处理请求全过程
<br />一次请求的流程<br /><br />一:接受请求<br /> 1.以.do结尾的URL被ActionServlet拦截,执行service方法<br /> 2.根据请求传递的方法GET/POST选择执行doGet()或doPost()方法<br /> 3.在doGet()/doPost()方法中,调用process()方法<br />二:process()方法<br />1. 选择模块<br /> ModuleUtils.getInstance翻译 2010-10-08 17:31:00 · 2097 阅读 · 1 评论 -
ActionServlet的初始化过程
一:介绍在tomcat的启动过程中,tomcat会读取/WEB-INF/web.xml文件中的配置信息进行一些初始化的工作,而Struts的启动工作就从这里开始.在web.xml文件中有如下的配置信息:actionorg.apache.struts.action.ActionServletconfig/WEB-INF/struts-config.xmldebug3转载 2010-10-08 15:06:00 · 3298 阅读 · 0 评论 -
Struts2源码阅读(一)_Struts2框架流程概述
1. Struts2架构图请求首先通过Filter chain,Filter主要包括ActionContextCleanUp,它主要清理当前线程的ActionContext和Dispatcher;FilterDispatcher主要通过AcionMapper来决定需要调用哪个Action。 ActionMapper取得了ActionMapping后,在Dispatch转载 2010-10-18 13:28:00 · 3628 阅读 · 1 评论