设为首页 收藏本站
查看: 612|回复: 0

[经验分享] Apache Wicket 学习 (Servlet & Filter)

[复制链接]

尚未签到

发表于 2017-1-3 11:53:39 | 显示全部楼层 |阅读模式
  如果使用 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 处理,找到了相应的页面续而处理。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-323262-1-1.html 上篇帖子: Apache Rewrite 详解RewriteCond 下篇帖子: Apache的mod_evasive模块
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表