<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    MicroFish

    Open & Open hits
    隨筆 - 33, 文章 - 2, 評論 - 4, 引用 - 0
    數(shù)據(jù)加載中……

    Java Web 開發(fā)

    13. Tomcat與其他HTTP服務(wù)器集成
    13.1 Tomcat與HTTP服務(wù)器集成的原理
    ?<!-- Define a non-SSL HTTP/1.1 Connector on port 8080 -->
    ??? <Connector port="8080" maxHttpHeaderSize="8192"
    ?????????????? maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
    ?????????????? enableLookups="false" redirectPort="8443" acceptCount="100"
    ?????????????? connectionTimeout="20000" disableUploadTimeout="true" />
    ?
    <!-- Define an AJP 1.3 Connector on port 8009 -->
    ??? <Connector port="8009"
    ?????????????? enableLookups="false" redirectPort="8443" protocol="AJP/1.3" />
    ?
    第一個連接監(jiān)聽8080端口,負(fù)責(zé)建立HTTP連接,在通過瀏覽器訪問TOMCAT服務(wù)器的WEB應(yīng)用時(shí),使用的就是這個連接。
    第二個連接器監(jiān)聽8009端口,負(fù)責(zé)和其他的HTTP服務(wù)器建立連接,在把TOMCAT與其他HTTP服務(wù)器集成時(shí),就需要用到這個連接器。
    ?
    13.2 在Windows下Tomcat與Apache服務(wù)器集成
    1.install apache http server

    2.copy jk into <APACHE_HOME>/modules
    ?
    3.create workers.properties and copy it into <APACHE_HOME>/conf
    workers.tomcat_home=C:\jakarta-tomcat? #讓mod_jk模塊知道Tomcat
    workers.java_home=C:\j2sdk1.4.2? #讓mod_jk模塊知道j2sdk
    ps=\? #指定文件路徑分割符
    worker.list=worker1
    worker.worker1.port=8009? #工作端口,若沒占用則不用修改
    worker.worker1.host=localhost? #Tomcat服務(wù)器的地址
    worker.worker1.type=ajp13? #類型
    worker.worker1.lbfactor=1? #負(fù)載平衡因數(shù)
    ?
    4.modify <APACHE_HOME>/conf/httpd.conf
    # Using mod_jk2.dll to redirect dynamic calls to Tomcat
    LoadModule jk_module modules\mod_jk_2.0.46.dll
    JkWorkersFile "conf\workers.properties"
    JkLogFile "logs\mod_jk2.log"
    JkLogLevel debug
    JkMount /*.jsp worker1
    JkMount /helloapp/* worker1

    5.test

    6.banlance
    (1)copy jk into <APACHE_HOME>/lib
    ?
    (2)create workers.properties in <APACHE_HOME>/conf
    ps=\? #指定文件路徑分割符
    worker.list=worker1,worker2,loadbalancer
    worker.worker1.port=8009? #工作端口,若沒占用則不用修改
    worker.worker1.host=localhost? #Tomcat服務(wù)器的地址
    worker.worker1.type=ajp13? #類型
    worker.worker1.lbfactor=100? #負(fù)載平衡因數(shù)
    worker.worker2.port=8009? #工作端口,若沒占用則不用修改
    worker.worker2.host=anotherhost? #Tomcat服務(wù)器的地址
    worker.worker2.type=ajp13? #類型
    worker.worker2.lbfactor=100? #負(fù)載平衡因數(shù)
    worker.loadbalancer.type=lb
    worker.loadbalancer.balanced_workers=worker1, worker2
    ?
    (3)modify <APACHE_HOME>/conf/httpd.conf
    # Using mod_jk2.dll to redirect dynamic calls to Tomcat
    LoadModule jk_module modules\mod_jk_2.0.46.dll
    JkWorkersFile "conf\workers.properties"
    JkLogFile "logs\mod_jk2.log"
    JkLogLevel debug
    JkMount /*.jsp loadbalancer
    JkMount /helloapp/* loadbalancer

    (4)keep worker's name the same as jvmRoute property of <Engine> element in server.xml
    eg. <Engine name="Catalina" defaultHost="localhost" debug="0" jmvRoute="worker1">

    (5)test
    ?
    if both of tomcat servers are running in the same server, at least the port of one of tomact servers should be modified.
    shut down HTTP connection of tomcat server, cancel HTTP connector in server.xml
    ?
    13.3 Tomcat與IIS服務(wù)器集成
    1.prepare
    (1)JK isapi_redirect.dll add it into <CATALINA_HOME>/bin

    (2)create workers.properties in <CATALINA_HOME>/conf
    workers.tomcat_home=C:\jakarta-tomcat? #讓mod_jk模塊知道Tomcat
    workers.java_home=C:\j2sdk1.4.2? #讓mod_jk模塊知道j2sdk
    ps=\? #指定文件路徑分割符
    worker.list=worker1
    worker.worker1.port=8009? #工作端口,若沒占用則不用修改
    worker.worker1.host=localhost? #Tomcat服務(wù)器的地址
    worker.worker1.type=ajp13? #類型
    worker.worker1.lbfactor=1? #負(fù)載平衡因數(shù)
    ?
    (3)create uriworkermap.properties in <CATALINA_HOME>/conf
    /index.jsp=worker1
    /helloapp/*=worker1
    2.edit register
    equals configurate attribuates of JK
    ?
    3.add 'jakarta' vitural directory in IIS for JK
    choose 腳本和可執(zhí)行程序
    ?
    4.把JK插件作為ISAPI篩選器加入IIS
    ?
    14. MVC
    14.1 用RequestDispatcher 實(shí)現(xiàn)MVC
    1. 定義用以表示數(shù)據(jù)的bean
    2. 使用一個servlet處理請求
    – servlet讀取請求參數(shù),檢查數(shù)據(jù)的缺失或異常等。
    3. 填充bean
    – 該servlet調(diào)用業(yè)務(wù)邏輯(與具體應(yīng)用相關(guān)的代碼)或數(shù)據(jù)訪問代碼得到最終的結(jié)果。得出的結(jié)果被放在第一步中定義的bean中。
    4. 將bean存儲在請求、會話或servlet的上下文中
    – 該servlet調(diào)用請求、會話或servlet上下文對象的setAttribute存儲表達(dá)請求結(jié)果的bean的引用。
    5. 將請求轉(zhuǎn)發(fā)到JSP頁面
    – 該servlet確定哪個JSP頁面適合于處理當(dāng)前的情形,并使用RequestDispatcher的forward方法將控制轉(zhuǎn)移到那個頁面。
    6. 從bean中提取數(shù)據(jù)
    – JSP頁面使用jsp:useBean和與第4步匹配的位置訪問之前存儲的bean,然后使用jsp:getProperty輸出bean的屬性。
    – JSP頁面并不創(chuàng)建或修改bean;它只是提取并顯示由servlet創(chuàng)建的數(shù)據(jù)。
    ?
    RequestDispatcher dispatcher =
    request.getRequestDispatcher(address);
    dispatcher.forward(request, response);
    ?
    14.2 jsp:useBean在MVC中的使用與在獨(dú)立JSP頁面中有什么不同
    ? JSP頁面不應(yīng)該創(chuàng)建對象
    – 應(yīng)該由servlet,而非JSP頁面,創(chuàng)建所有的數(shù)據(jù)對象。因此,為了保證JSP頁面不會創(chuàng)建對象,我們應(yīng)該使用<jsp:useBean ... type="package.Class" />而不是<jsp:useBean ... class="package.Class" />
    ? JSP頁面也不應(yīng)該修改已有的對象
    – 因此,我們應(yīng)該只使用jsp:getProperty,不使用jsp:setProperty。
    ?
    14.3 基于請求的數(shù)據(jù)共享
    ? Servlet
    ValueObject value = new ValueObject(...);
    request.setAttribute("key", value);
    RequestDispatcher dispatcher =request.getRequestDispatcher("/WEB-INF/SomePage.jsp");
    dispatcher.forward(request, response);
    ? JSP
    <jsp:useBean id="key" type="somePackage.ValueObject" scope="request" />
    <jsp:getProperty name="key" property="someProperty" />
    ?
    14.4 基于會話的數(shù)據(jù)共享
    ? Servlet
    ValueObject value = new ValueObject(...);
    HttpSession session = request.getSession();
    session.setAttribute("key", value);
    RequestDispatcher dispatcher =request.getRequestDispatcher("/WEB-INF/SomePage.jsp");
    dispatcher.forward(request, response);
    ? JSP
    <jsp:useBean id="key" type="somePackage.ValueObject" scope="session" />
    <jsp:getProperty name="key" property="someProperty" />
    ?
    14.5 基于ServletContext的數(shù)據(jù)共享
    ? Servlet
    synchronized(this) {
    ValueObject value = new ValueObject(...);
    getServletContext().setAttribute("key", value);
    RequestDispatcher dispatcher =request.getRequestDispatcher("/WEB-INF/SomePage.jsp");
    dispatcher.forward(request, response);
    }
    ? JSP
    <jsp:useBean id="key" type="somePackage.ValueObject" scope="application" />
    <jsp:getProperty name="key" property="someProperty" />
    ?
    15. Expression Language
    15.1 啟用表達(dá)式語言
    ? 僅能夠用于支持JSP 2.0 (servlets 2.4) 的服務(wù)器中
    –例如:Tomcat 5,而非Tomcat 4
    ? 必須在web.xml文件中使用JSP 2.0
    <?xml version="1.0" encoding="ISO-8859-1"?>
    <web-app xmlns="http://java.sun.com/xml/ns/j2ee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation=
    "http://java.sun.com/xml/ns/j2ee web-app_2_4.xsd"
    version="2.4">

    </web-app>
    ?
    15.2 訪問作用域變量
    ? ${varName}
    – 表示在PageContext,HttpServletRequest,HttpSession,和ServletContext中,依照所列的順序進(jìn)行查找,輸出這個屬性名所對應(yīng)的對象。
    – PageContext不適用于MVC。
    ? 等價(jià)的形式
    – ${name}
    – <%= pageContext.findAttribute("name") %>
    – <jsp:useBean id="name" type="somePackage.SomeClass" scope="...">
    <%= name %>
    ?
    15.3 訪問bean的屬性
    ? ${varName.propertyName}
    – 表示查找給定名稱的作用域變量,并輸出指定的bean屬性
    ? 等價(jià)的形式
    – ${customer.firstName}
    – <%@ page import="coreservlets.NameBean" %>
    <%NameBean person =(NameBean)pageContext.findAttribute("customer");%>
    <%= person.getFirstName() %>
    ?
    15.4 訪問集合
    ? ${attributeName[entryName]}
    ? Works for
    – Array. Equivalent to
    ? theArray[index]
    – List. Equivalent to
    ? theList.get(index)
    – Map. Equivalent to
    ? theMap.get(keyName)
    ? Equivalent forms (for HashMap)
    – ${stateCapitals["maryland"]}
    – ${stateCapitals.maryland}
    – But the following is illegal since 2 is not a legal var name
    ? ${listVar.2}
    ?
    15.5 引用隱式對象(預(yù)定義變量名)
    ? pageContext. The PageContext object.
    – E.g. ${pageContext.session.id}
    ? param and paramValues. Request params.
    – E.g. ${param.custID}
    ? header and headerValues. Request headers.
    – E.g. ${header.Accept} or ${header["Accept"]}
    – ${header["Accept-Encoding"]}
    ? cookie. Cookie object (not cookie value).
    – E.g. ${cookie.userCookie.value} or ${cookie["userCookie"].value}
    ? initParam. Context initialization param.
    ? pageScope, requestScope, sessionScope, appliationScope.
    – Instead of searching scopes.
    ? Problem
    – Using implicit objects usually works poorly with MVC model

    posted on 2007-03-06 17:19 劉璐 閱讀(338) 評論(0)  編輯  收藏 所屬分類: servlet&jsp


    只有注冊用戶登錄后才能發(fā)表評論。


    網(wǎng)站導(dǎo)航:
     
    主站蜘蛛池模板: 亚洲VA中文字幕无码一二三区| 亚洲av最新在线观看网址| 亚洲嫩模在线观看| 亚洲天堂免费在线| 韩国免费A级毛片久久| 182tv免费视视频线路一二三| 四虎影视免费永久在线观看| 亚洲高清在线观看| 亚洲精品中文字幕| 2021国内精品久久久久精免费| 午夜影视日本亚洲欧洲精品一区| 久久免费视频网站| 国产免费无遮挡精品视频| 亚洲AV无码一区二区乱子仑| 久久久久国色av免费看| 亚洲国产主播精品极品网红| 中文字幕乱码亚洲精品一区| 日日麻批免费40分钟无码| 国产精品亚洲mnbav网站| 亚洲精品日韩一区二区小说| 啦啦啦手机完整免费高清观看| 亚洲国产精品白丝在线观看| 中文字幕久无码免费久久| 久久久青草青青亚洲国产免观| 美景之屋4在线未删减免费| 18禁超污无遮挡无码免费网站国产 | 亚洲国产女人aaa毛片在线| 香蕉成人免费看片视频app下载| 亚洲精品偷拍无码不卡av| av网站免费线看| 免费在线观看你懂的| 亚洲国产精品无码中文lv| 亚洲AV无码专区日韩| 女bbbbxxxx另类亚洲| 免费无码一区二区三区蜜桃大| 亚洲一区二区三区亚瑟| 18pao国产成视频永久免费| 亚洲欧美熟妇综合久久久久| 亚洲香蕉成人AV网站在线观看| 久久久精品国产亚洲成人满18免费网站 | 在线观看亚洲精品福利片|