首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 其他教程 > 其他相关 >

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

2012-11-21 
Liferay 4.3 中 friendly url的生成和解析过程friendly url是liferay的一个功能.在liferay里,可以将portal

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的过程

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


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


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

热点排行