• <label id="pxtpz"><meter id="pxtpz"></meter></label>
      1. <span id="pxtpz"><optgroup id="pxtpz"></optgroup></span>

        當(dāng)前位置:雨林木風(fēng)下載站 > 技術(shù)開(kāi)發(fā)教程 > 詳細(xì)頁(yè)面

        servlet+bean+jsp綜合案例,希望能給你提示!!

        servlet+bean+jsp綜合案例,希望能給你提示!!

        更新時(shí)間:2022-05-06 文章作者:未知 信息來(lái)源:網(wǎng)絡(luò) 閱讀次數(shù):

        本文討論Java Servlet和Java Server Page這兩種技術(shù),它們可以用于隔離用戶(hù)界面與業(yè)務(wù)邏輯,實(shí)現(xiàn)多層次的Web應(yīng)用程序。我們用一個(gè)簡(jiǎn)單的應(yīng)用來(lái)演示如何實(shí)現(xiàn)這種隔離,以及如何實(shí)現(xiàn)快速的部署和改變Web應(yīng)用程序。
        說(shuō)明 本文說(shuō)明如何隔離表現(xiàn)層與業(yè)務(wù)邏輯,實(shí)現(xiàn)多層次的Web應(yīng)用程序

        正文 適用操作系統(tǒng):
        跨平臺(tái)


        隔離表現(xiàn)層與業(yè)務(wù)邏輯,實(shí)現(xiàn)多層次的Web應(yīng)用程序

        引言
        在建立服務(wù)器端Web應(yīng)用程序時(shí),將表現(xiàn)層與業(yè)務(wù)邏輯分離可以更容易的創(chuàng)建動(dòng)態(tài)的Web頁(yè)面,同時(shí)也可以讓沒(méi)有應(yīng)用開(kāi)發(fā)經(jīng)驗(yàn)的Web頁(yè)面設(shè)計(jì)人員能非常容易的改變Web站點(diǎn)的外觀。對(duì)于一個(gè)內(nèi)容需要頻繁更新的Web站點(diǎn),這就意味著更新周期更短,可以以最快的速度帶給本站點(diǎn)的訪(fǎng)問(wèn)者以最新的內(nèi)容。

        早期的Web應(yīng)用程序結(jié)構(gòu)都很簡(jiǎn)單,通常用戶(hù)界面與業(yè)務(wù)邏輯都混合在一起。修改這種應(yīng)用的任何一方,都將使維護(hù)整個(gè)應(yīng)用程序變得十分困難。將用戶(hù)界面與業(yè)務(wù)邏輯隔離就簡(jiǎn)化了應(yīng)用程序的維護(hù),從而可以更快更容易的改變應(yīng)用程序。本文討論Java Servlet和Java Server Page這兩種技術(shù),它們可以用于隔離用戶(hù)界面與業(yè)務(wù)邏輯。我們用一個(gè)簡(jiǎn)單的應(yīng)用來(lái)演示如何實(shí)現(xiàn)這種隔離,以及如何實(shí)現(xiàn)快速的部署和改變應(yīng)用程序。
        首先,我們簡(jiǎn)介一下Java Servlet和JSP及它們?nèi)绾卧谝粋(gè)Web應(yīng)用中協(xié)調(diào)工作。

        什么是Servlet?
        Servlet是平臺(tái)獨(dú)立的Java服務(wù)器端組件。它以多種方式來(lái)擴(kuò)展服務(wù)器端的功能,同時(shí)將維護(hù)和支持的開(kāi)銷(xiāo)也降到最小。Servlet不同于CGI腳本,它被編譯成Java的字節(jié)碼(bytecode),所以它沒(méi)有引入任何與平臺(tái)有關(guān)的因素,從而實(shí)現(xiàn)了真正的“Write Once,Run Anywhere”。

        什么是Java Server Page(JSP)?
        JSP是建立含有動(dòng)態(tài)內(nèi)容的Web應(yīng)用程序的Java技術(shù)。一個(gè)JSP頁(yè)面是一個(gè)文本文檔,包含了靜態(tài)的HTML內(nèi)容和動(dòng)態(tài)的動(dòng)作標(biāo)記。這些動(dòng)作描述了如何處理返回給客戶(hù)的響應(yīng)。在應(yīng)用開(kāi)發(fā)階段,JSP與Servlet差異很大,然而在運(yùn)行時(shí),它被編譯成Servlet,在JSP引擎中執(zhí)行。JSP引擎存在于任何一種Web應(yīng)用服務(wù)器中,如WebSphere V3.x。

        Servlet和JSP協(xié)同工作
        從理論上講,用戶(hù)可以只使用Servlet來(lái)接收從Web瀏覽器發(fā)來(lái)的HTTP請(qǐng)求,Servlet動(dòng)態(tài)的處理請(qǐng)求(可能是查詢(xún)后端系統(tǒng)來(lái)完成請(qǐng)求),然后在Servlet中直接發(fā)送HTML或XML文檔的響應(yīng)給瀏覽器。
        上述方法在原理上是可行的,但它把Web頁(yè)面的產(chǎn)生也交由Java Servlet來(lái)做。如果Web頁(yè)面的設(shè)計(jì)人員要改變頁(yè)面的外觀就必須編輯、重新編譯Servlet。這將要求動(dòng)態(tài)Web頁(yè)面的設(shè)計(jì)人員需要有應(yīng)用程序開(kāi)發(fā)經(jīng)驗(yàn)。顯然,我們需要將Web頁(yè)面的顯示與Servlet處理請(qǐng)求相隔離。
        滿(mǎn)足上述需求的方法是采納Model-View-Controller(MVC)模型來(lái)建立Web應(yīng)用程序。在MVC模型中,后端系統(tǒng)是我們的Model,用來(lái)創(chuàng)建用戶(hù)響應(yīng)界面的模板是View,而把這兩者聯(lián)系起來(lái)的紐帶是Controller。JSP完美的對(duì)應(yīng)于MVC模式中的View,Servlet包含了管理如何處理請(qǐng)求的邏輯,實(shí)際上就成為了Controller,而系統(tǒng)已有的業(yè)務(wù)規(guī)則就是Model。
        我們來(lái)看一個(gè)例子,它使用了MVC模式實(shí)現(xiàn)表現(xiàn)層和業(yè)務(wù)邏輯的隔離,該例實(shí)現(xiàn)了從瀏覽器訪(fǎng)問(wèn)3270后端系統(tǒng)的一個(gè)應(yīng)用。





        示例程序的體系結(jié)構(gòu)如圖1所示。瀏覽器使用HTML和JSP實(shí)現(xiàn)了View,一組在應(yīng)用服務(wù)器中的Java Servlet提供了Controller,后端的CICS等應(yīng)用提供了業(yè)務(wù)規(guī)則或稱(chēng)作Model。Servlet、HTML、JSP頁(yè)面調(diào)用的流程如圖2所示,并附有詳細(xì)的文字?jǐn)⑹觥?br>



        示例應(yīng)用流程詳解
        發(fā)起請(qǐng)求

        用戶(hù)用瀏覽器載入初始HTML頁(yè)面,該頁(yè)面是由Web使能的應(yīng)用服務(wù)器提供的。應(yīng)用服務(wù)器以與Web Server相同的方式來(lái)進(jìn)行Web文件服務(wù)。這個(gè)頁(yè)面是整個(gè)Web應(yīng)用的入口點(diǎn)。它使用了HTML FORM action標(biāo)記來(lái)訪(fǎng)問(wèn)Servlet。在我們的例子中,這個(gè)Servlet是LoginServlet。同樣附加的參數(shù)也隨著FORM的動(dòng)作發(fā)給Servlet。
        下面是一段例子:
        <FORM action="http://localhost:8080/servlet/LoginServlet" method="POST">
        <input type="text" size="30" name="firstname">
        <input type="text" size="30" name="surname">
        .
        .
        <input type=hidden name=host value="localhost">
        <input type=hidden name=port value="9876">
        <input type=submit value=" Submit ">
        </FORM>
        請(qǐng)求一般是以HTTP或HTTPS來(lái)發(fā)起,然后由Servlet來(lái)處理。它使用HttpServletRequest.getParameter()方法來(lái)訪(fǎng)問(wèn)FORM表單提供的參數(shù)。
        Servlet然后測(cè)試用戶(hù)是否有Session。Session用來(lái)將從遠(yuǎn)程客戶(hù)端來(lái)的一系列請(qǐng)求關(guān)聯(lián)起來(lái),這對(duì)于無(wú)狀態(tài)保持功能的HTTP協(xié)議是必須的。
        Session可用如下方法來(lái)創(chuàng)建:
        HttpSession session = req.getSession(true)
        ;
        對(duì)象可以被加入到Session中去:
        session.putValue(“host”,hostToConnectTo);
        session.putValue(“port”,tmpPort);

        Controller
        Servlet負(fù)責(zé)調(diào)用處理用戶(hù)請(qǐng)求的JavaBean。它也負(fù)責(zé)創(chuàng)建對(duì)用戶(hù)的響應(yīng)。在我們建議的應(yīng)用結(jié)構(gòu)中,響應(yīng)將被傳遞到JSP。因此,Servlet被叫做Controller。
        回到我們的例子。下面的代碼實(shí)例化一個(gè)類(lèi)型CICSEmulator的新類(lèi)叫newEmulator。這是一個(gè)由第三方廠(chǎng)商提供的3270終端仿真類(lèi),它提供了一組對(duì)仿真終端直接操縱的方法(類(lèi)似的類(lèi)也可以用IBM VisualAge for Java企業(yè)版中的Enterprise Access Builder來(lái)生成)。newEmulator可以從Session中傳遞變量,此例中變量為遠(yuǎn)程主機(jī)和端口。

        CICSEmulator newEmulator = new CICSEmulator();
        newEmulator.setTN3270Port(portToConnectTo);
        newEmulator.setTN3270Host(hostToConnectTo);

        第二個(gè)實(shí)例化的類(lèi)是一個(gè)Java Bean叫做AcctDetails。它是一個(gè)數(shù)據(jù)訪(fǎng)問(wèn)Bean,它將向后端的系統(tǒng)查找和獲取數(shù)據(jù)。AcctDetails將newEmulator來(lái)作為它的 3270終端,然后傳遞變量(姓和名)給它的set方法。

        AcctDetails getAccountDetails = new AcctDetails();
        getAccountDetails.set3270Emulator(newEmulator);
        getAccountDetails.setSurname(inputsurname);
        getAccountDetails.setFirstName(inputfirstname);

        數(shù)據(jù)訪(fǎng)問(wèn)Bean執(zhí)行請(qǐng)求

        Bean實(shí)例getAccountDetails的方法performWork(),它連接后端3270系統(tǒng),并基于用戶(hù)提供的姓名來(lái)獲取用戶(hù)帳戶(hù)的細(xì)節(jié)。

        try {
        getAccountDetails.performWork();
        session.putValue("resultsBean", getAccountDetails);
        }
        catch ( IllegalStateException e ) {
        // handle the error
        }

        如果執(zhí)行成功,Servlet把getAccountDetails Bean放入用戶(hù)的session中。這個(gè)Bean的標(biāo)識(shí)符為resultsBean,它包含了用戶(hù)查詢(xún)的結(jié)果,這些結(jié)果可以用Bean的get方法來(lái)訪(fǎng)問(wèn)。

        控制權(quán)傳給JSP

        我們已經(jīng)提到,MVC模式的重點(diǎn)就在于它隔離了表現(xiàn)層與業(yè)務(wù)邏輯。Servlet負(fù)責(zé)處理請(qǐng)求,它會(huì)去調(diào)用數(shù)據(jù)訪(fǎng)問(wèn)Bean,數(shù)據(jù)訪(fǎng)問(wèn)Bean getAccountDetails包含了從后端系統(tǒng)訪(fǎng)問(wèn)和獲取數(shù)據(jù)的服務(wù)器端邏輯。后端系統(tǒng)(Model)包含了業(yè)務(wù)規(guī)則。而對(duì)用戶(hù)的響應(yīng)(View)是由JSP創(chuàng)建出來(lái)的。
        Servlet將request和response對(duì)象傳遞給JSP時(shí)遵循如下的語(yǔ)法:
        getServletContext().getRequestDispatcher(“/jspDemo/login.jsp”).forward(req,res);
        Forward方法允許Servlet將響應(yīng)的處理傳給第三方。它的參數(shù)request和response必須就是調(diào)用servlet的service方法時(shí)傳遞的對(duì)象。 它使用 getRequestDispatcher對(duì)象來(lái)得到requestDispatcher,從而確定了到目的JSP的路徑。以“/”開(kāi)始的JSP路徑名被解釋成相對(duì)于當(dāng)前應(yīng)用上下文環(huán)境的根路徑。

        訪(fǎng)問(wèn)ResultsBean

        JSP負(fù)責(zé)創(chuàng)建對(duì)用戶(hù)的響應(yīng),它可以訪(fǎng)問(wèn)getAccountDetails Bean的數(shù)據(jù)(使用標(biāo)識(shí)符resultsBean來(lái)引用)。這些在HTML中用如下語(yǔ)法來(lái)完成:

        <HTML>
        <BODY>
        .
        .
        <jsp:useBean id="resultsBean" scope="session" class="acct.AcctDetails " />
        <jsp:getProperty name="resultsBean" property="*"/>

        其中<JSP:useBean>是去查找已存在的對(duì)象(本例中是resultsBean)。本例中我們把getAccountDetails bean放入session中并命名為resultsBean。于是上述JSP語(yǔ)句就從session中得到了resultsBean,然后就可以通過(guò)訪(fǎng)問(wèn)resultsBean的get方法來(lái)得到它的數(shù)據(jù)。
        也可以通過(guò)如下JSP語(yǔ)句來(lái)實(shí)現(xiàn):

        <%= resultsBean.getDetails_Title() %>
        <%= resultsBean.getDetails_Initial() %>

        上述語(yǔ)句也是JSP表達(dá)式的一個(gè)例子。在<%=和%>之間所有的內(nèi)容被放入JSP引擎中處理,結(jié)果被作為輸出送給JSP文件。上述的兩個(gè)表達(dá)式將執(zhí)行resultsBean的get方法來(lái)顯示用戶(hù)的title和Middle_Initial。同任何一種腳本語(yǔ)言(如JavaScript)一樣,JSP代碼可以在HTML頁(yè)面中任意嵌入。JSP的語(yǔ)法也非常簡(jiǎn)單,這意味著JSP可以由Web頁(yè)面設(shè)計(jì)人員來(lái)維護(hù)而不是應(yīng)用開(kāi)發(fā)人員。開(kāi)發(fā)人員負(fù)責(zé)的是servlet和數(shù)據(jù)訪(fǎng)問(wèn)Bean。在JSP中的任何改變不會(huì)影響到servlet,反之亦然。

        響應(yīng)

        JSP在請(qǐng)求時(shí)被動(dòng)態(tài)翻譯成Java Servlet,并在應(yīng)用服務(wù)器中緩存。后續(xù)JSP請(qǐng)求的響應(yīng)將明顯加速。用戶(hù)收到的最終響應(yīng)都是HTML頁(yè)面(以.jsp為擴(kuò)展名),這些頁(yè)面包含了動(dòng)態(tài)產(chǎn)生的內(nèi)容。

        總結(jié):

        在本文示例的應(yīng)用結(jié)構(gòu)中,客戶(hù)端瀏覽器發(fā)起的請(qǐng)求直接到了servlet,然后用數(shù)據(jù)訪(fǎng)問(wèn)Bean來(lái)處理請(qǐng)求,從后端系統(tǒng)獲取數(shù)據(jù)。Servlet將結(jié)果包裝進(jìn)resultsBean,把它放入session中,然后調(diào)用JSP來(lái)處理這個(gè)響應(yīng)。Servlet是初始請(qǐng)求到產(chǎn)生響應(yīng)的總體控制者。
        JSP決定產(chǎn)生給用戶(hù)響應(yīng)的內(nèi)容。JSP只應(yīng)當(dāng)包含如何格式化表現(xiàn)層的邏輯。這種隔離的優(yōu)點(diǎn)在于它創(chuàng)建了在應(yīng)用中可重用的、可移植的、平臺(tái)獨(dú)立的組件,這些組件可以作為將來(lái)更大的應(yīng)用的一部分。
        隔離Servlet開(kāi)發(fā)與JSP顯示為應(yīng)用開(kāi)發(fā)人員和Web頁(yè)面設(shè)計(jì)人員彼此獨(dú)立的工作帶來(lái)了極大的方便。同樣,這種方法也完美的符合了本文所介紹的MVC設(shè)計(jì)模型。

        溫馨提示:喜歡本站的話(huà),請(qǐng)收藏一下本站!

        本類(lèi)教程下載

        系統(tǒng)下載排行

        主站蜘蛛池模板: 在线观看H网址免费入口| 九九精品国产亚洲AV日韩| 久久性生大片免费观看性| 国产aa免费视频| 亚洲永久网址在线观看| 18成禁人视频免费网站| 亚洲视频在线观看不卡| 无码人妻精品中文字幕免费| 亚洲av无码不卡| 男女午夜24式免费视频| 亚洲一区二区三区免费在线观看| 亚洲动漫精品无码av天堂| 在线观看亚洲AV日韩AV| 在线jyzzjyzz免费视频| 亚洲成av人影院| 日韩精品无码一区二区三区免费| 亚洲高清在线播放| 精品无码免费专区毛片| 亚洲xxxx18| 五月天婷亚洲天综合网精品偷| 亚洲国语精品自产拍在线观看 | 久久久国产精品无码免费专区| 亚洲嫩草影院久久精品| 波多野结衣免费在线| 蜜臀亚洲AV无码精品国产午夜.| 亚洲五月午夜免费在线视频| 人人玩人人添人人澡免费| 亚洲最大在线观看| 亚洲AV无码乱码在线观看性色扶 | 四虎精品视频在线永久免费观看| 亚洲人配人种jizz| 亚洲色一色噜一噜噜噜| 99久久精品国产免费| 亚洲日韩精品国产一区二区三区| 婷婷综合缴情亚洲狠狠尤物| 国产精品免费福利久久| 男人天堂2018亚洲男人天堂| 一级毛片在线观看免费| 学生妹亚洲一区二区| 亚洲色婷婷一区二区三区| 三级网站免费观看|