日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > java >内容正文

java

Java协作开发,Java开发学习笔记之八:servlet之间的协作

發(fā)布時(shí)間:2024/4/19 java 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Java协作开发,Java开发学习笔记之八:servlet之间的协作 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

servlet與servlet,servlet與JSP(其本質(zhì)也是servlet)之間需要合作。主要因?yàn)橐韵聨讉€(gè)原因:

1.當(dāng)Web程序比較復(fù)雜時(shí),使用一個(gè)servlet來完成所有的功能顯然是不合理的。

2.Web構(gòu)件之間分工不同。比如servlet比較適合對(duì)于請(qǐng)求和響應(yīng)的控制,而JSP更適合在程序中充當(dāng)界面。

3.不同的Web應(yīng)用之間常常需要相互調(diào)用,這種相互調(diào)用僅僅通過HTML超鏈接的形式是不夠的。

servlet和其他Web構(gòu)件(如servlet,JSP,HTML)的合作主要有三類,分別是servlet鏈接(chaining)、包含響應(yīng)內(nèi)容(include)、轉(zhuǎn)遞請(qǐng)求(forward)。

較新的Web應(yīng)用服務(wù)器不支持servlet鏈接,取而代之的是過濾器(filter)鏈接機(jī)制。下面分別說明后兩種機(jī)制:包含響應(yīng)內(nèi)容和轉(zhuǎn)遞請(qǐng)求。

一、包含響應(yīng)內(nèi)容

顧名思義,包含響應(yīng)內(nèi)容這種合作機(jī)制的原理,就是在一個(gè)servlet內(nèi)容把另一個(gè)servlet的響應(yīng)內(nèi)容包含進(jìn)來。具體是這樣的:當(dāng)Servlet需要嵌入另一個(gè)Web資源時(shí),首先它建立一個(gè)請(qǐng)求分派對(duì)象(RequestDispatcher),然后使用RequestDispatcher對(duì)象的include方法在響應(yīng)中包括其他Web資源,最后將原servlet及被包含進(jìn)來的Web構(gòu)件的內(nèi)容合成為原Servlet的響應(yīng)輸出一并發(fā)送給客戶端。需要注意的是被包含的Web構(gòu)件(sevlet或JSP)不能改變從原Servlet傳遞進(jìn)來的ServletResponse對(duì)象的狀態(tài)編碼或頭信息,否則將觸發(fā)異常。參考如下幾段代碼:

1.

public class includeServlet extends HttpServlet{

public void doGet(HttpServletRequest req,HttpServletResponse resp)

{

RequestDispatcher dispatcher = req.getRequestDispatcher("/servletBeIncluded");

if (dispatcher != null)

dispatcher.include(req,resp);

...

}

...

}

2.

public class includeServlet extends HttpServlet{

public void doGet(HttpServletRequest req,HttpServletResponse resp)

{

RequestDispatcher dispatcher = getServetConfig().getServletContext().getRequestDispatcher("/servletBeIncluded");

if (dispatcher != null)

dispatcher.include(req,resp);

...

}

...

}

3.

public class includeServlet extends HttpServlet{

public void doGet(HttpServletRequest req,HttpServletResponse resp)

{

RequestDispatcher dispatcher = getServetConfig().getServletContext().getContext("/webApp2").getRequestDispatcher("/servletBeIncluded");

if (dispatcher != null)

dispatcher.include(req,resp);

...

}

...

}

以上三段代碼分別說明了三種取得RequestDispatcher的方式,其中,第一段代碼是由當(dāng)前的ServletRequest對(duì)象直接獲得當(dāng)前Web應(yīng)用下的另一個(gè)要被包含到當(dāng)前servlet中的servlet的dispatcher,即這一行代碼:req.getRequestDispatcher("/servletBeIncluded");第二段代碼是由當(dāng)Web應(yīng)用的Context對(duì)象獲得dispatcher;第三段代碼是由另一個(gè)Web應(yīng)用的Context對(duì)象獲得另一個(gè)Web應(yīng)用的servlet的dispatcher。這三段代碼說明了以下幾點(diǎn):

1.由當(dāng)前ServletRequest對(duì)象的getRequestDispatcher()方法只能獲得當(dāng)前Web應(yīng)用的Web構(gòu)件的dispatcher,達(dá)到了在同一個(gè)Web應(yīng)用,不同的Web構(gòu)件之間的協(xié)作。

2.可以由ServletContext獲得當(dāng)前或其它Web應(yīng)用的Web構(gòu)件的dispatcher,這樣就可以在不同的Web應(yīng)用之間進(jìn)行協(xié)作。

二、向其它Web資源轉(zhuǎn)遞請(qǐng)求? 這種協(xié)作機(jī)制和上述include機(jī)制類似,也是需要先獲得待協(xié)作Web資源(servlet或jsp)的ResquestDispatcher。與include機(jī)制不同的是,前者是包含,而后者是轉(zhuǎn)遞,也就是說直接將響應(yīng)轉(zhuǎn)向到另一個(gè)Web構(gòu)件中去,由另一個(gè)Web構(gòu)件去處理。也就是說當(dāng)轉(zhuǎn)遞執(zhí)行之后,ServletRequest對(duì)象的URL名稱路徑會(huì)變?yōu)槟繕?biāo)Web構(gòu)件的URL。參考如下代碼:

public class includeServlet extends HttpServlet{

public void doGet(HttpServletRequest req,HttpServletResponse resp)

{

RequestDispatcher dispatcher = req.getRequestDispatcher("/servletWillBeForward");

if (dispatcher != null)

dispatcher.forward(req,resp);

...

}

...

}

還有一種轉(zhuǎn)遞請(qǐng)求的形式:HttpServletRespnse.sendRedirect(String location)。這種方法與forward不同的地方是:sendRedirect是向客戶端發(fā)送一個(gè)HTTP的URL重定向響應(yīng),讓客戶瀏覽器將當(dāng)前Web請(qǐng)求發(fā)磅到另一個(gè)URL。因此,sendRedirect方法的參數(shù)的相對(duì)路徑不是相對(duì)于當(dāng)前Web應(yīng)用的當(dāng)前路徑,而是相對(duì)于Web應(yīng)用服務(wù)器的根路徑;或者可以直接在參數(shù)中指明絕對(duì)路徑,如:

resp.setRedirect("http://xiya.com.cn/xyoa/")。

與50位技術(shù)專家面對(duì)面20年技術(shù)見證,附贈(zèng)技術(shù)全景圖

總結(jié)

以上是生活随笔為你收集整理的Java协作开发,Java开发学习笔记之八:servlet之间的协作的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。