欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Wicket源码初读

程序员文章站 2022-07-15 15:16:10
...
项目需要用到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的初始化
Wicket源码初读
            
    
    博客分类: Java wicketWebXML框架Apache
如web.xml配置表现出的可能行为一致,WicketFilter通过WebAppFactory创建WebApp,并将自身和WebApp进行了绑定、执行WebApp的初始化。

3. 分析WebApplication的初始化
Wicket源码初读
            
    
    博客分类: Java wicketWebXML框架Apache
从图中表现分析WebApp的内部调用主要以定义HTML的链接解析为主。
另外,在上一步:“WicketFilter的初始化”中,对WebApp的最后几个调用来看,在完成内部初始化后,还调用外部定义的初始化方法init和组件的初始化方法initializeComponents。

WicketFilter初始化分析完毕,现在就来分析请求处理过程:
1. 先热热身,引用指南中对请求结构的描述:
Wicket源码初读
            
    
    博客分类: Java wicketWebXML框架Apache

2. 分析WicketFilter的请求处理
Wicket源码初读
            
    
    博客分类: Java wicketWebXML框架Apache

doFilter中没有重要的代码,看看核心的doGet:
Wicket源码初读
            
    
    博客分类: Java wicketWebXML框架Apache

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

3. 分析WebRequestCycle的request
Wicket源码初读
            
    
    博客分类: Java wicketWebXML框架Apache

图中的请求处理步骤描述:
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对象,由这些对象处理请求以返回结果。

至此源码的初读完毕,希望它对您有些许帮助。
  • Wicket源码初读
            
    
    博客分类: Java wicketWebXML框架Apache
  • 大小: 149.5 KB
  • Wicket源码初读
            
    
    博客分类: Java wicketWebXML框架Apache
  • 大小: 60.2 KB
  • Wicket源码初读
            
    
    博客分类: Java wicketWebXML框架Apache
  • 大小: 37.1 KB
  • Wicket源码初读
            
    
    博客分类: Java wicketWebXML框架Apache
  • 大小: 99 KB
  • Wicket源码初读
            
    
    博客分类: Java wicketWebXML框架Apache
  • 大小: 125.2 KB
  • Wicket源码初读
            
    
    博客分类: Java wicketWebXML框架Apache
  • 大小: 71 KB