用戶在地址欄鍵入http://localhost:8080/后,整個(gè)Liferay系統(tǒng)發(fā)生了些什么呢?
1. 第一步,生成 http://localhost:8080/c
Request: GET/HTTP/1.1
Response:
狀態(tài):HTTP/1.1 200 OK
內(nèi)容:... <body onload="javascript:location.replace('/c')"> ...
解釋:
在web.xml中有關(guān)于首頁(yè)的定義如下,也就是說(shuō)當(dāng)用戶敲入http://localhost:8080/所調(diào)用的頁(yè)面。
web.xml
--------
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
在index.jsp中有如下內(nèi)容,所以可以知道Response的內(nèi)容如何得來(lái)。
index.jsp
----------
<%@ page import="com.liferay.portal.util.PortalUtil" %>
<html>
<head>
<title></title>
<meta content="0; url=<%= PortalUtil.getPathMain() %>" http-equiv="refresh">
</head>
<body onload="javascript:location.replace('<%= PortalUtil.getPathMain() %>')">
</body>
</html>
2. 第二步,生成 http://localhost:8080/c/portal/layout
Request: GET/c HTTP/1.1
Response:
狀態(tài):HTTP/1.1 302 Moved Temporarily
頭部:Location: http://10.108.10.205:8080/c/portal/layout
解釋:
當(dāng)服務(wù)器收到"GET/c"請(qǐng)求后,根據(jù)web.xml中的定義,請(qǐng)求會(huì)送入MainServlet進(jìn)行處理。如何生成"/c/portal/layout"有待分析,以后補(bǔ)充,還好不影響大局。
web.xml
--------
<servlet-mapping>
<servlet-name>MainServlet</servlet-name>
<url-pattern>/c/*</url-pattern>
</servlet-mapping>
3. 第三步,生成 http://10.108.10.205:8080/web/guest/home
Request: GET/c/portal/layout HTTP/1.1
Response:
狀態(tài):HTTP/1.1 302 Moved Temporarily
頭部:Location: http://10.108.10.205:8080/web/guest/home
解釋:
當(dāng)服務(wù)器收到請(qǐng)求后,同樣會(huì)送到MainServlet處理,然后會(huì)傳遞到LayoutAction, layout.jsp, portlet.jsp, TemplateProcessor, PortletColumnLogic, load_render_portlet.jsp, portlet_js.jspf,等等,很漫長(zhǎng)的,也很有確的一個(gè)過(guò)程,后面會(huì)有單獨(dú)的分析,中間仍有一些不明朗的地方,仍有待挖掘。不過(guò)不妨礙理清 Liferay的大致經(jīng)絡(luò)。
4. 第四步,生成網(wǎng)頁(yè)
Request: GET /web/guest/home HTTP/1.1
Response:
狀態(tài):HTTP/1.1 200 OK
內(nèi)容:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "
<html dir="ltr">\n
<head>\n
<title>liferay.com - Welcome</title>\n
<meta content="text/html; charset=UTF-8" http-equiv="content-type" />\r
<link rel="Shortcut Icon" href="/html/themes/classic/images/liferay.ico" _fcksavedurl=""/html/themes/classic/images/liferay.ico"" />\r
<link href="/c/portal/css_cached?themeId=classic&colorSchemeId=01&t=1203549390654" type="text/css"
rel="stylesheet" />\r
<style type="text/css">\r
</style>\r
<script type="text/javascript">\r
var themeDisplay = {\r
getCompanyId: function() {\r
return "10094";\r
},\r
......
解釋:
在web.xml中有定義,所以"GET /web/guest/home"請(qǐng)求會(huì)由FriendlyURLServlet處理。
web.xml
--------
<servlet>
<servlet-name>FriendlyURLPublicServlet</servlet-name>
<servlet-class>com.liferay.portal.servlet.FriendlyURLServlet</servlet-class>
<init-param>
<param-name>private</param-name>
<param-value>false</param-value>
</init-param>
<load-on-startup>4</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>FriendlyURLPublicServlet</servlet-name>
<url-pattern>/web/*</url-pattern>
</servlet-mapping>
在FriendlyURLServlet.service()方法中,再次將請(qǐng)求傳遞到/c/portal/layout,由LayoutAction進(jìn)行后續(xù)處理。
FriendlyURLServlet.service()
-----------------------------
ServletContext ctx = getServletContext();
String mainPath = PortalUtil.PATH_MAIN;
String redirect = mainPath; //redirect = "/c/portal/layout..."
......
RequestDispatcher rd = ctx.getRequestDispatcher(redirect);
rd.forward(req, res);
Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=2177392