Terry.Li-彬

          虛其心,可解天下之問(wèn);專其心,可治天下之學(xué);靜其心,可悟天下之理;恒其心,可成天下之業(yè)。

            BlogJava :: 首頁(yè) :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
            143 隨筆 :: 344 文章 :: 130 評(píng)論 :: 0 Trackbacks
           

          用戶在地址欄鍵入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

          主站蜘蛛池模板: 上栗县| 南宫市| 临西县| 瑞安市| 绥中县| 乌拉特前旗| 宁陵县| 长沙县| 阿鲁科尔沁旗| 四子王旗| 南溪县| 清水河县| 南康市| 华坪县| 大港区| 兰西县| 平舆县| 武隆县| 剑川县| 永善县| 拉萨市| 贵南县| 红河县| 陆良县| 邻水| 徐闻县| 莱芜市| 安阳县| 仙居县| 阳高县| 麟游县| 许昌县| 寿宁县| 岳普湖县| 平昌县| 伊金霍洛旗| 麻江县| 鹤岗市| 石棉县| 台南市| 凤台县|