`
daur
  • 浏览: 15499 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
最近访客 更多访客>>
社区版块
存档分类
最新评论

Apache Wicket 学习 (Servlet & Filter)

 
阅读更多

如果使用 Wicket 的,那在 j2ee 的 web.xml 中或者使用 WicketServlet 或者使用 WicketFilter 来作为 wicket 与 J2EE 标准连接的入口。

 

那 WicketFilter 和 WicketServlet 究竟有什么不一样?

 

首先 ,明确 filter 和 servlet 的概念,

 

filter 是在 servlet 2.3 的标准添加的 feature,filter 可以通过配置后对一个符合 url mapping 的请求进行处理,包括对 request 的头信息以及消息体内数据的一些处理,也包括对 response 的处理,例如,将 response 的流引向另一个流对象

然后 filter 还可以组成一个链,及一个 filter 执行完之后,交由下一个 filter 完成。

 

servlet 就是一些根本的理解了,生命周期加上对 request 和 response 的处理,然后通过 web.xml 文件进行 mapping 的配置。

 

其次 ,wicket filter 和 wicket servlet 的区别,

 

单从代码上查阅,其实 wicket servlet 在其 doGet 以及 doPost 中都调用的是 wicket filter 的 doGet 方法,然后有一个 fallback 作为当 wicket 一个 request 处理过程中出现问题,实质上是在 requestCycle 处理 request 的 resolve target 这一步出现 target 解析不到 (我的理解是,无法映射到一个 wicket page 或者 wicket 类来处理这个请求)时,在交由 servlet 容器来处理(应该就是交由容器内置其的 servlet 处理,如果有匹配到的话)。

甚至 wicket servlet 的 init 方法都调用了 wicket filter 的 init 方法。

 

而在 wicket filter 中的 doGet 才是真正的 wicket 的 requestCycle 的开始或者说入口。

 

不过从使用上讲,wicket filter 可以当做一个 符合 servlet-api 标准或者 j2ee 标准的 filter 来使用,如果你希望处理 advanced chaining of resources(这个可能需要去仔细查看 wicket filter 在调用 doGet 之前的逻辑,不过我的理解是,最大的区别 filter 会使用到 http status 304 的特性,有点类似看这个请求对应的资源是否有修改过,如果没有并且还为失效,那就返回 304,wicket 是通过查看 http header If-Modified-Since 值来判断是否需要返回用户最新的资源,实际上是一种缓存技术的使用),就使用 wicket filter。

 

另外 ,在使用 wicket filter 的过程中,也许是因为版本的原因(1.3.7),我试图添加一个动态的 404 错误页面,当仅仅使用 servlet 时,一切都是 ok 的,通过配置 web.xml 中相应的变量,都可以简单的获得这些值,但是当使用 wicket 框架 webpage 的时候,并且用 wicket filter 作为框架入口时,就无法正常的 map 到相应的 wicket 页面,这时,我将 filter 换成了 servlet,一切又 ok 了。我的理解,如果使用 filter 的话,在无法找到一个 servlet 页面时,filter 会交给容器继续处理这个请求,而容器找不到某一个 url 时,不会再返回 wicket 框架进行处理(因为入口只有 filter,而此时 filter 序列已经走完了,只能继续 servlet 处理)。而在使用 servlet 时,容器再找不到 url 时,因为有 wicket servlet 的存在,则会继续返回到 servlet 处理,找到了相应的页面续而处理。

分享到:
评论

相关推荐

    Apache Wicket Cookbook

    ### Apache Wicket Cookbook知识点概述 #### 一、Apache ...通过阅读《Apache Wicket Cookbook》,不仅可以系统地学习Apache Wicket框架的各项功能,还能通过实际操作加深理解,最终成为一名熟练的Wicket开发者。

    apache-wicket

    Wicket has been around since 2004 and it has been an Apache project since 2007. During these years it has proved to be a solid and valuable solution for building enterprise web applications. Wicket ...

    apache wicket cookbook

    通过阅读《Apache Wicket Cookbook》,开发者不仅能掌握Wicket的基本概念和操作,还能学习到高级技巧和最佳实践,从而在实际项目中更有效地应用Apache Wicket框架。这本书是Wicket开发者的重要参考资料,无论是初学...

    apache-wicket-7

    学习Apache Wicket 7不仅涉及理论知识,还需要通过实践项目来加深理解。熟悉其API、组件模型、事件处理和模板系统,将有助于你构建出高效、可维护的Web应用程序。同时,持续关注Wicket社区的更新和最佳实践,可以...

    apacke-wicket-mvn编译

    【标题】:“apacke-wicket-mvn编译”指的是使用Apache Maven构建工具来编译一个基于Apache Wicket的项目。Apache Wicket是一款开源的Java Web应用框架,它以组件为基础,提供了丰富的功能来帮助开发者创建动态、...

    apache-wicket-1.5.11.zip

    8. **依赖管理**:Wicket 1.5.11可能还需要其他第三方库的支持,如Servlet容器API、JSON解析库等,开发者需要确保正确配置和管理这些依赖关系。 9. **版本升级**:从Wicket 1.5.11来看,这是较早的版本,随着时间的...

    apache-wicket-jee-example:此源代码对应于博客系列“ Apache Wicket&JEE”,网址为-apache source code

    这个示例项目对于初学者来说是宝贵的资源,可以用来学习如何在JEE环境中使用Apache Wicket。同时,对于有经验的开发者,它提供了实战案例,展示了两种技术如何协同工作,以解决实际问题。如果你想要提升你的Wicket和...

    wicket-sample:示例 Apache Wicket Web 应用程序,用于使用 Apache Fortress 演示基本的 Java EE 安全性和 RBAC

    本文档演示了如何获取、构建和部署 Apache Fortress Wicket 示例应用程序。 要完成本教程,请首先按照本 README 中的步骤进行操作。 接下来是这里的步骤: 先决条件 Java 8++ Apache Maven 3++ Apache Tomcat ...

    wicket:Apache Wicket-基于组件的Java Web框架

    什么是Apache Wicket? Apache Wicket是一个开源的,基于Java,基于组件的Web应用程序框架。 通过适当的标记/逻辑分离,POJO数据...Wicket项目包含多个资源和项目,您可以从中学习并快速入门: Wicket用户指南 ://w

    apache-wicket-1.3.0.zip_wicket

    Apache Wicket 是一个开源的Java Web应用程序框架,它专注于提供组件化的、声明式的编程模型,以简化Web开发。Wicket 1.3.0 版本是该框架的一个早期版本,尽管相对较旧,但仍然包含了许多核心特性,有助于开发者构建...

    创建并扩展Apache_Wicket_Web应用.doc

    Apache Wicket 是一个基于组件的轻量级Web应用框架,其设计目的是使展现层与业务逻辑分离,便于创建可测试、可调试且支持性强的Web 2.0应用程序。本篇文档关注的是如何在不修改已有代码的情况下扩展一个基于Wicket的...

    wicket-presentation:Apache Wicket演示文稿的源代码-apache source code

    总之,“Apache Wicket演示文稿的源代码”是一个宝贵的资源,对于希望深入了解和掌握Wicket框架的开发者来说,它是不可或缺的学习材料。通过分析和实践其中的示例,你将能够更有效地构建健壮、高性能的Web应用程序。

    wicket_mvn库

    在 Wicket Maven 库中,开发者可以找到 Wicket 相关的 JAR 包和其他依赖,如 Servlet API、JDBC 驱动等,这些都通过 Maven 的坐标(groupId, artifactId, version)进行引用。 3. **Wicket 版本管理**: Wicket 有多...

    acteur-wicket:在 Netty + Acteur 中运行没有 servlet 容器的 apache wicket 应用程序

    演员-检票口在没有 servlet 容器或任何 servlet 的情况下运行 Wicket 应用程序。 与实验性集成; 在这一点上不是很发达,但可以运行单页测试应用程序(运行测试包中的WicketActeurModuleTest类)。 这意味着在没有...

Global site tag (gtag.js) - Google Analytics