Wicket源码初读

项目需要用到Wicket,对于我来说,这可真是个新兴事物。市面上用此框架的例子极少,但幸好有前人书写了《Wicket开发指南》,到底还是或多或少安慰了我对陌生事物恐惧的心灵。

1. 我们从web.xml开始着手:

<filter>
<filter-name>MyApplication</filter-name>
<filter-class>
org.apache.wicket.protocol.http.WicketFilter</filter-class>
<init-param>
<param-name>applicationClassName</param-name>
<param-value>com.web.MyApplication</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>MyApplication</filter-name>
<url-pattern>/do/*</url-pattern>
</filter-mapping>

在web.xml中描述使用WicketFilter作为Wicket的请求处理类,并使用applicationClassName作为外部参数,显然,这样做的目的是将WebApplication绑定到一个Filter。

2. 分析WicketFilter的初始化
[img]http://dl.iteye.com/upload/attachment/337453/bff15037-dbdf-30c9-af26-5f1bab597519.png[/img]
如web.xml配置表现出的可能行为一致,WicketFilter通过WebAppFactory创建WebApp,并将自身和WebApp进行了绑定、执行WebApp的初始化。

3. 分析WebApplication的初始化
[img]http://dl.iteye.com/upload/attachment/337447/13966188-82c6-3fae-8e4f-f30b28d4e275.png[/img]
从图中表现分析WebApp的内部调用主要以定义HTML的链接解析为主。
另外,在上一步:“WicketFilter的初始化”中,对WebApp的最后几个调用来看,在完成内部初始化后,还调用外部定义的初始化方法init和组件的初始化方法initializeComponents。

WicketFilter初始化分析完毕,现在就来分析请求处理过程:
1. 先热热身,引用指南中对请求结构的描述:
[img]http://dl.iteye.com/upload/attachment/337455/3699159e-b804-3542-80c8-1512d26358fb.png[/img]

2. 分析WicketFilter的请求处理
[img]http://dl.iteye.com/upload/attachment/337449/2fb8bb28-5e3f-32de-b64e-586827da3fb2.png[/img]

doFilter中没有重要的代码,看看核心的doGet:
[img]http://dl.iteye.com/upload/attachment/337451/ad7d0d3d-30c9-38f5-95ed-01deff97387a.png[/img]

这样看来,处理一个新的请求需要:
1. 包装HttpServletRequest到WebRequest;
2. 包装HttpServletResponse到WebResponse;
3. 建立一个新的请求上下文;
4. 调用WebApp的newRequestCycle建立请求过程;
5. 调用WebRequestCycle的request,处理请求。

3. 分析WebRequestCycle的request
[img]http://dl.iteye.com/upload/attachment/337445/4b658197-ddda-340b-a8c8-1fab5800963b.png[/img]

图中的请求处理步骤描述:
1. 预备请求 (PREPAPE_REQUEST=1)
2. 目标处理 (RESOLVE_TARGET=2)
3. 事件处理 (PROCESS_EVENTS=3)
4. 响应请求 (RESPOND=4)
5. 分离请求 (DETACH_REQUEST=5)
6. 完成请求 (DONE=6)
其中,在1,2,3步中出现的任何错误都会直接跳入到第4步中。
关注“事件处理”和“请求响应”可以发现,它是将处理分派到对应的Target对象,由这些对象处理请求以返回结果。

至此源码的初读完毕,希望它对您有些许帮助。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值