`
devroller2
  • 浏览: 34579 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

说说ROLLER的PageServlet类

阅读更多

发现网上roller可参考的东西很少,都是些如何安装部署的文章,无疑对我们这些有点小小水平的帮助不大。决定边学边写,权当笔记吧,不对的地方各位大侠指正,谢谢。为什么要学习roller,其实我是想在上面做二次开发。roller已经集成权限管理、菜单管理等模块,如果在其上做二次开发,完完全全是实现自己的业务功能模块即可,另外一个重要的原因是可以通过优秀的开源软件学习别人优秀的设计理念和经验。

 

roller是一个多用户博客管理系统,分前台博客页面展现和后台博客管理页面。前者主要是通过velocity来展现,后台通过jsp+tiles。

 

今天要说的是前台博客页面相关的内容。在这里这个类PageServlet是不得不说的,通过名字我们大概可以了解此类是处理页面的,具体做些什么工作,下面再说。

 

先来说说此servlet是如何被触发的,在web.xml中它的url映射是如下配置的:

    <servlet>
        <servlet-name>PageServlet</servlet-name>
        <servlet-class>org.apache.roller.weblogger.ui.rendering.servlets.PageServlet</servlet-class>
        <load-on-startup>5</load-on-startup>
    </servlet>

    <servlet-mapping>
        <servlet-name>PageServlet</servlet-name>
        <url-pattern>/roller-ui/rendering/page/*</url-pattern>
    </servlet-mapping>

 当url符合/roller-ui/rendering/page/*时,此servlet的doGet方法就被执行。什么时候、哪些连接才会符合此url呢。后台管理页面相关的连接是有的,但这里说点曲折一点的东西!

 

经过阅读源代码和观察,当直接进入某个博客时此servlet也比执行。但是博客的url一般都不包含/roller-ui/rendering/page/*这样的字符,即使是这样,这博客地址也太长了点吧。roller是怎么样做的呢?当我们输入一个博客地址,比如:

http://localhost:8080/roller/abc

 我们想直接进入abc这个博客页面。当用户在浏览器地址栏里输入这个博客地址时,roller有一个filter优先被触发,见如下web.xml配置:

    <filter>
        <filter-name>RequestMappingFilter</filter-name>
        <filter-class>org.apache.roller.weblogger.ui.rendering.filters.RequestMappingFilter</filter-class>
    </filter>

    <filter-mapping>
        <filter-name>RequestMappingFilter</filter-name>
        <url-pattern>/*</url-pattern>
        <dispatcher>REQUEST</dispatcher>
    </filter-mapping>

这个 RequestMappingFilter主要的工作是把请求映射到真正能处理它的地方,比如前面说的进入abc这个博客页面。页面在哪里?对不起,这里没有一个jsp或一个controller对应一个url的说法。所有的都到PageServlet去啦。为什么呢?

 

原来在RequestMappingFilter中,会遍历所有的映射处理器,具体来说就是交给类WeblogRequestMapper判断,如果恰好被命中,请求的uri就被修改并forward。否则请求就交个下一个filter处理了。

 

WeblogRequestMapper修改uri,使之符合PageServlet的映射要求,请求就交给PageServlet处理了。这时,请求才真正被传给PageServlet处理。

 

前面我们了解的PageServlet被触发的过程,现在来了解它做写什么工作。这个类的doGet方法实在是长,而且很多if-else判断(我最怕这样的代码),看得人有点晕晕的,至今我也不是完全明白这个方法的所有处理流程。先挑些能看懂的讲吧,权当笔记。

 

这个类大概的流程是将用户要打开的博客页面从缓存中取出来展现,如果缓存中没有就去读取博客内容相关的信息,通过velocity渲染成页面并把页面整个缓存起来备用。

 

 

当然很多细节就不说了,比如判断是否是站点首页,是否缓存过期等等,还有很多,大家自己去看吧。我说的也不一定对。

 

 

roller是如何展现一个博客页面的呢?又如何缓存的呢?菜单又是如何管理?

 

有空的时候再拿出来给大家交流。

 

 

 

1
0
分享到:
评论
3 楼 yaobiao753 2010-11-27  
哥们,继续写吧~共同研究
2 楼 devroller2 2010-10-19  
Javakeith 写道
希望继续些下去,别放弃!

最近忙着搞公司的培训,过几天再写,谢谢鼓励。
1 楼 Javakeith 2010-10-19  
希望继续些下去,别放弃!

相关推荐

    3DMAX卷曲修改器Roller下载

    在传统的3DMAX建模中,这类复杂的动态效果可能需要通过复杂的骨架设置和关键帧动画来实现,而Roller则简化了这一过程,让非专业动画师也能制作出高质量的卷曲动画。 首先,Roller提供了直观的用户界面,用户可以...

    roller

    在实际的IT实践中,阅读和理解开源项目的源码是提升技术能力的重要途径,特别是对于工具类项目如Roller,理解其内部机制可以帮助我们更好地定制和优化。 标签中提到了"源码",这暗示了我们可能会讨论Roller的内部...

    roller安装

    包下的类负责处理博客的更新和推送;`com.roller.model`包含模型实体,它们与数据库交互;`com.roller.ui`则包含了用户界面的逻辑。 对于开发者来说,以下工具在roller的开发和维护中至关重要: - **IDE**:...

    Roller初体验

    【标题】:“Roller初体验” 在IT领域,Roller是一款开源的Java博客系统,它提供了丰富的功能,便于用户创建、管理和分享个人或团队的博客内容。本文将围绕Roller的初体验,深入探讨其核心特性,源码结构以及如何与...

    roller5 for tomcat

    《Roller 5 for Tomcat:一款便捷的博客平台整合指南》 在互联网技术日新月异的今天,各类Web应用程序层出不穷,其中博客系统作为个人和团队表达思想、分享知识的重要平台,一直受到广泛关注。Roller 5 for Tomcat...

    Apacheroller

    1. **添加 roller-custom.properties 到类路径**: - 将自定义配置文件添加到应用服务器的类路径中。 2. **通过管理控制台部署**: - 使用应用服务器的管理控制台上传 `.war` 文件。 #### 开始使用 Roller 1. **...

    Apache Roller

    Apache Roller是一个全功能,多用户和组博客服务器,适合大型和小型博客网站。它运行一个Java Web应用程序应该能够运行在任何Java EE服务器和关系数据库。目前,Apache Roller能很好的支持Tomcat和MySQL。 本人用...

    开源Java博客Roller v5.0 for tomcat.zip

    Roller 是一个全功能的多用户博客平台,于2002年首发,采用Java语言开发,设计精巧,源代码是很好的学习资料。它支持weblogging应有的特性如:评论功能,所见即所得HTML编辑,TrackBack,提供页面模板,RSS ...

    Roller4.0的另外一套cas简单解决方案

    Roller4.0的另外一套cas简单解决方案. 最近在使用roller4.0和cas的单点登录集成.中间碰到了很多很多的问题.也许我碰到的问题都是属于自己的技术不成熟,能力不够引起的.但是我想应该还是有很多人和我是差不多的吧.我...

    roller-part01

    apache-roller-srapaapache-roller-srcche-roller-srccapache-rolaapache-roller-srcpache-roller-srcler-srcapapache-roller-srcache-roller-srcapache-roller-src

    roller-install-guide.pdf

    - **配置类路径**:确保将 `roller-custom.properties` 文件放置在正确的类路径中。 - **通过管理控制台部署**:可以通过 Java 应用服务器的管理控制台来部署 Apache Roller。 #### 八、开始使用 Apache Roller - *...

    apache-roller-4.0.1

    Apache Roller是著名的开源博客系统,主要用于创建、管理和发布Web日志。这个压缩包"apache-roller-4.0.1"包含了Apache Roller的第4.0.1版本,这是一个基于Java技术构建的Web应用程序。接下来,我们将深入探讨Apache...

    roller-part2

    apache-rollapachapache-roller-srce-roller-srcer-srcapache-rolleapacapache-roller-srche-roller-srcr-srcapache-roapache-roller-srcller-srcapache-roller-src

    roller install、user、template guide

    在IT行业中,"roller"可能是指一个开源项目或者软件工具,但具体信息不足,我们只能根据常规的安装、用户和模板指南来理解这个主题。以下是对这些概念的详细解释: 一、roller install(roller安装指南) 在安装...

    apache-roller-src

    apache-roller-src apache-roller-src apache-roller-src apache-roller-src apache-roller-src apache-roller-src apache-roller-src apache-roller-src apache-roller-src apache-roller-src

Global site tag (gtag.js) - Google Analytics