`
pikachu
  • 浏览: 119889 次
社区版块
存档分类
最新评论

Liferay 4.3 中 friendly url的生成和解析过程

阅读更多
friendly url是liferay的一个功能.在liferay里,可以将portal系统生成的复杂的url转换成好记的url.
比如在我的liferay 4.3.1环境下
http://localhost:8080/c/portal/layout?p_l_id=10125&_19_messageId=10505&p_p_id=19&p_p_state=maximized&p_p_action=0&_19_struts_action=%2Fmessage_boards%2Fview_message

http://localhost:8080/web/26/1/message_boards/message/10505
是同一个页面.

程序是如何将原来复杂的url转换成那么简单的friendly url的,当程序要处理friendly url时,又是如何处理的呢?

具体的调试跟踪过程不再赘述,这是一个有趣而痛苦的过程,这里我只列出最后的调试结果

liferay解析friendlyurl的过程
  1. 浏览器提交friendlyurl
  2. FriendlyURLServlet.service处理
  3. 调用getRedirect
  4. 从url里能够截取 groupid,layoutid (url中的/26/1)
  5. 调用PortalUtil.getLayoutActualURL
  6. 从liferay-portlet.xml中查询friendly url mapper
  7. 根据mapper的getMapping方法和url中截取的相匹配,查到对应的mapper(url中的message_boards)
  8. 调用mapper的populateParams,将friendly url转换为参数对(message_boards/message/10505->_19_messageId=10505; _19_struts_action=%2Fmessage_boards%2Fview_message)
  9. 从前面查出的groupid,layoutid,查询出plid (/web/26/1->p_l_id=10125)
  10. 补充其余的参数(p_p_action,p_p_state)
  11. 返回原始的url给FriendlyURLServlet
  12. forward该url
接下去和以前版本一样,由MainServlet处理
以上流程见下图


liferay生成friendlyurl的过程
  1. 页面获得PortletURL实例(renderResponse.createActionURL() renderResponse.createRenderURL())
  2. PortletURLImpl.generateToString()
  3. PortalUtil.getLayoutFriendlyURL 构造出groupid和layoutid样式的url
  4. 调用getPortletFriendlyURLPath
  5. 从_portlet.getFriendlyURLMapper()查询mapper
  6. 如果由mapper,那么调用mapper.buildPath,mapper会将原先的parameter转换成friendlyurl
  7. 将页面url和protleturl合并,在页面上显示最终的friendlyurl
以上流程见下图


分享到:
评论
1 楼 dins2003 2007-10-24  
不错,受益匪浅。不过当用户的screenName是汉字时,FriendlyURL 地址不能正常工作,请问该如何解决?

相关推荐

    7z压缩,三合一-LifeRay-开发参考手册&二次开发指南&4.3中文开发指南

    3. **LifeRay4.3中文开发指南**:这个版本的指南针对的是LifeRay 4.3版本,这个版本可能包含了4.3版本的新特性、改进和最佳实践。中文版的开发指南对于中文用户来说非常友好,能够帮助他们更方便地理解和应用LifeRay...

    liferay development 中文

    《Liferay Development 中文》是关于企业级门户平台Liferay的开发指南,主要面向开发者,旨在帮助他们理解和掌握Liferay的开发技术。Liferay是一款开源的企业级内容管理系统,广泛用于构建数字体验平台,如企业网站...

    liferay开发文档集合

    4. **《liferay_4_portlet_development_guide.pdf》** - 该文档专注于Liferay中的portlet开发,讲解了portlet生命周期、MVC Portlet、JSR 286规范以及如何在Liferay平台上创建和集成portlet,对于想要开发Liferay...

    liferay-portlet-development-guide-4.3

    该文档包含了中文和英文两个版本,中文版的《Liferay_Portal_4.3Chinese_DEV.pdf》对于国内开发者来说尤为方便,因为它消除了语言障碍,使得开发者能够更高效地学习和理解Liferay Portlet的开发过程。通过这份指南,...

    liferay代码生成器

    Liferay代码生成器是一款专为Liferay门户平台设计的开发工具,它旨在简化开发者在创建、维护和扩展Liferay应用时的工作流程。Liferay是一个开源的企业级内容管理和数字体验平台,广泛用于构建企业网站、社交网络和...

    liferay5.1.2文档(完)

    再者,`liferay_4_portlet_development_guide.pdf`是Liferay 4.x Portlet开发指南,虽然标题中的4.x与5.1.2有所出入,但Portlet开发的基本原理和流程在不同版本间变化不大。该指南将引导开发者了解如何使用JAVA进行...

    liferay6.2 CRUD FriendlyURL Search-Container

    在这个“liferay6.2 CRUD FriendlyURL Search-Container”示例中,我们将深入探讨如何在Liferay 6.2环境中实现基本的数据操作(创建、读取、更新和删除,即CRUD)以及友好的URL和搜索容器的使用。 首先,CRUD操作是...

    Liferay Portal 中文开发指南

    本指南全面介绍了Liferay Portal的开发流程和技术要点,不仅覆盖了Portlet开发的基础知识,还深入探讨了如何利用Liferay提供的各种服务来增强应用的功能性。对于初学者而言,这是一个宝贵的资源,能够帮助他们快速...

    Liferay开发指南(中文)和liferay详细介绍(英文)

    6. **数据迁移与升级**:详细步骤和工具用于迁移旧版Liferay数据到最新版本,以及系统升级过程。 通过深入学习这两个文件,开发者不仅可以掌握Liferay的基本操作,还能具备高级定制和开发能力,从而充分利用Liferay...

    liferay中文资源

    3. **教程视频**:如果包含视频教程,那将是视觉学习者的福音,直观地演示了Liferay的使用和开发过程。 4. **论坛讨论**:可能包含了从ITEYE或其他中文技术社区收集的Liferay相关问题及解决方案,为用户提供了宝贵的...

    liferay6.06

    学习如何捕获和处理在开发过程中可能出现的异常,提供良好的错误反馈,提高用户体验。 13. Portlet配置文件解析: 理解portlet.xml、web.xml等配置文件的结构和作用,有助于Portlet的定制和优化。 14. Build ...

    liferay如何在eclipse中配置开发和debug环境

    为了在Eclipse环境中高效地开发和调试Liferay应用,我们需要进行一系列的配置步骤。以下将详细介绍如何在Eclipse中设置Liferay的开发和Debug环境。 1. **安装必要的软件和插件** - 首先,确保你已经安装了最新版本...

    liferay 6.0 开发指南

    - **Portlet部署**:讲解了将开发好的Portlet部署到Liferay中的步骤和注意事项。 - **Portlet结构**:详细解析了一个典型Portlet的各个组成部分及其功能。 - **MyGreeting Portlet示例**:通过一个具体的例子...

    liferay主题开发中对于portal_normal.vm模块的解析

    在Liferay主题开发中,`portal_normal.vm`是一个至关重要的模板文件,它是Liferay门户页面的基础布局。这个文件使用Velocity模板语言编写,用于定义页面结构和动态内容的展示方式。以下是对`portal_normal.vm`中关键...

    liferay_portlet对象详解

    本文将深入解析 Portlet 的关键概念,包括 Portlet 请求与 URL、Portlet 模式和窗口状态。 1. Portlet 请求与 URL 在 Liferay 的 Portal 页面中,多个 Portlet 共存,但用户每次只能与一个 Portlet 进行交互。JSR...

    liferay的开发文档

    Liferay是一款开源的企业级门户平台,它提供了丰富的功能和高度可定制性,广泛应用于构建企业网站、社交网络和内部协作系统。本压缩包包含了四个重要的Liferay开发文档,旨在帮助开发者深入理解和掌握Liferay的使用...

    Liferay开发文档整理.pdf

    文档中还提到了Liferay Plugins SDK,这是用于创建和管理Liferay插件的工具和环境。插件SDK包含开发Portlet,Hook插件,Ext插件等多种类型插件所需的脚本和文件结构。 ### Liferay IDE 和服务构建器 Liferay IDE是...

    Liferay开发持久化层和服务层演示Demo代码

    在本文中,我们将深入探讨如何使用Liferay框架进行开发,特别是关注其持久化层和服务层的构建。通过分析“Liferay开发持久化层和服务层演示Demo代码”这一主题,我们将理解Liferay Service Builder如何帮助开发者...

Global site tag (gtag.js) - Google Analytics