亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來(lái)到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? 將 microsoft 的 internet information server 用作 java servlet 引擎(轉(zhuǎn)).txt

?? 優(yōu)秀的JAVA學(xué)習(xí)文檔
?? TXT
?? 第 1 頁(yè) / 共 2 頁(yè)
字號(hào):
[b]Active Server Page[/b] 
當(dāng)您從 ASP 中調(diào)用 servlet 時(shí),您正是在調(diào)用 doGet 方法,并傳入適當(dāng)?shù)恼?qǐng)求和響應(yīng)對(duì)象。從這時(shí)起,servlet 就具有了完全的控制權(quán)。ASP 腳本用作 servlet 的[I]引導(dǎo)程序[/I]。但在您可以傳入請(qǐng)求和響應(yīng)對(duì)象之前,您必須用相應(yīng)的適配器類來(lái)包裝它們(稍后我對(duì)此將有詳細(xì)分析)。
我將從頭開(kāi)始講下去。客戶機(jī)要請(qǐng)求的 URL 看起來(lái)與 http://localhost/servlet.asp 類似。.asp 擴(kuò)展名意味著所請(qǐng)求的文檔是一個(gè) Active Server Page 腳本。下面就是完整的 servlet.asp 腳本:[TABLE][TR][TD][PRE]dim requestAdapterset requestAdapter = getObject( "java:com.nutrio.asp.RequestAdapter" )dim responseAdapterset responseAdapter = getObject( "java:com.nutrio.asp.ResponseAdapter" )dim servletset servlet = getObject( "java:com.nutrio.servlet.HelloWorldServlet" )servlet.doGet requestAdapter, responseAdapter[/PRE][/TD][/TR][/TABLE]
分析上一段腳本,您將發(fā)現(xiàn),它是從聲明一個(gè)稱為 requestAdapter 的變量入手的。dim 是 Visual Basic 中對(duì)變量進(jìn)行聲明的命令。在 Visual Basic 中,變量沒(méi)有固定類型,各種變量實(shí)際上是由 Variant 對(duì)象進(jìn)行包裝的,這可使變量以調(diào)用代碼所要求的任何一種類型(例如,數(shù)字、字符串,等等)出現(xiàn)。這樣做確實(shí)非常方便,但有可能使代碼容易混淆,而且也不安全。這正是為什么要發(fā)明“匈牙利表示法”(Hungarian Notation) 的原因(請(qǐng)參閱[url href=http://www.cn.ibm.com/developerWorks/java/jw-iis/index.shtml#resources]參考資料[/url])。不過(guò),這完全是另外一場(chǎng)爭(zhēng)論。
聲明變量以后,就應(yīng)該使用 ASP 的 getObject 方法實(shí)例化您的第一個(gè)適配器類,并相應(yīng)地為其賦值。getObject 方法是 IIS 版本 4 中新增的。它被稱為 [I]moniker[/I] (一種 COM 對(duì)象,用于創(chuàng)建其它對(duì)象的實(shí)例,請(qǐng)參閱[url href=http://www.cn.ibm.com/developerWorks/java/jw-iis/index.shtml#resources]參考資料[/url]),但它使您能夠訪問(wèn) Java 對(duì)象,而沒(méi)有注冊(cè)任何組件對(duì)象模型(COM,請(qǐng)參閱[url href=http://www.cn.ibm.com/developerWorks/java/jw-iis/index.shtml#resources]參考資料[/url])這類令人頭痛的事。然后,您依次聲明、實(shí)例化響應(yīng)封裝并為其賦值,然后對(duì) servlet 做同樣的事情。最后,您調(diào)用 servlet 的 doGet 方法,并傳入[I]改編了的[/I]請(qǐng)求和響應(yīng)對(duì)象。 
這個(gè)特定的腳本具有相當(dāng)大的局限性,因?yàn)樗粏?dòng)一個(gè)特定的 servlet。您很可能希望將其擴(kuò)展,以啟動(dòng)一整套 servlet,這樣您就需要做幾處小小的修改。假定您的所有 servlet 都在同一個(gè)包內(nèi),您就可以將目標(biāo) servlet 的類名作為變量傳遞給 URL,例如 http://localhost/servlet.asp?class=HelloWorldServlet。然后您必須更改腳本的末尾來(lái)加載指定的類。下面是新的代碼:[TABLE][TR][TD][PRE]dim classNameset className = Request.QueryString( "class" )dim servletset servlet = getObject( "java:com.nutrio.servlet." & className )servlet.doGet requestAdapter, responseAdapter[/PRE][/TD][/TR][/TABLE]
這就行了!您已經(jīng)將 Microsoft 的 Internet Information Server 變成了 Java Servlet 引擎。正如您將在下面看到的那樣,它雖然不是一個(gè)完美的引擎,但已相當(dāng)接近完美。剩下要討論的全部?jī)?nèi)容就是適配器類的本質(zhì)了。
為簡(jiǎn)潔起見(jiàn),在每種適配器中,我將只討論如何實(shí)現(xiàn)那些較流行的方法。對(duì)流行程度的度量是以我的個(gè)人經(jīng)驗(yàn)和看法為依據(jù)的;沒(méi)有比這更科學(xué)的了(這是我引用的原話)。
[b]Microsoft 的 Java SDK[/b] 
從請(qǐng)求的封裝開(kāi)始,對(duì)象必須做的第一件事情就是,獲取其 ASP 對(duì)應(yīng)物的一個(gè)引用。這是通過(guò) com.ms.iis.asp 包中的 AspContext 對(duì)象完成的。您問(wèn)是[I]什么[/I]包嗎?對(duì)了,這里我正要解釋您為什么需要安裝 Microsoft 的 Java SDK。
Microsoft 的 Java SDK 可以免費(fèi)下載(請(qǐng)參閱[url href=http://www.cn.ibm.com/developerWorks/java/jw-iis/index.shtml#resources]參考資料[/url])。要確保您獲得的是最新版本,我寫這篇文章時(shí)為 4.0。按照簡(jiǎn)單的安裝說(shuō)明進(jìn)行操作,并在出現(xiàn)提示時(shí)重新啟動(dòng)(令人嘆息!)。安裝 SDK 之后,相應(yīng)調(diào)整您的 PATH 和 CLASSPATH 環(huán)境變量。采取點(diǎn)聰明的小技巧,在您的系統(tǒng)中搜索 jview.exe 的全部實(shí)例,然后確保最新版本在您的 PATH 中最先解析。 
不幸的是,Microsoft 的 Java SDK 附帶的文檔和樣例代碼中涉及 IIS/ASP 集成的內(nèi)容非常少。當(dāng)然有許多夸夸其談 -- 您得到了有關(guān)這一主題的整個(gè)已編譯的 HTML 文檔,但在大多數(shù)地方,它給人的感覺(jué)與其說(shuō)是說(shuō)明性的,不如說(shuō)是自相矛盾的和含混不清的。謝天謝地,SDK 的 Samples 目錄中有一個(gè) aspcomp 包,它實(shí)際上反映了 com.ms.iis.asp 包,并提供了源代碼。您在安裝 SDK 時(shí)確實(shí)安裝了這些樣例文件,對(duì)嗎?這個(gè) aspcomp 包幫助我反向設(shè)計(jì)出許多 API 邏輯。
[b]請(qǐng)求適配器[/b] 
既然您有了可隨意使用的 Microsoft 的 SDK,您就可以回頭繼續(xù)實(shí)現(xiàn)適配器類了。下面是請(qǐng)求適配器的最基本的版本。我已省略了包聲明和 import 語(yǔ)句,以便您可將注意力集中在代碼的實(shí)質(zhì)部分。[TABLE][TR][TD][PRE]public class RequestAdapter implements HttpServletRequest{    private Request request;    public RequestAdapter()    {        this.request = AspContext.getRequest();    }[/PRE][/TD][/TR][/TABLE]
請(qǐng)注意,該類引出了一個(gè)單一的 public 構(gòu)造函數(shù),它不帶任何參數(shù)。這是 ASP 腳本將該類實(shí)例化為一個(gè) moniker 所必需的(通過(guò) getObject 方法)。此構(gòu)造函數(shù)只須從 AspContext 對(duì)象取得 ASP 的請(qǐng)求對(duì)象的一個(gè)引用,并存儲(chǔ)指向它的一個(gè)指針。此適配器實(shí)現(xiàn) HttpServletRequest 接口,它允許您在一種真實(shí)的 servlet 環(huán)境的外觀之下,將其傳遞給您的 servlet。
請(qǐng)求對(duì)象的最常用方法是 getParameter。此方法用于檢索客戶機(jī)預(yù)計(jì)要提供的一段數(shù)據(jù)。例如,如果客戶機(jī)剛填好了一個(gè)表單并將其提交給服務(wù)器,則 servlet 將調(diào)用 getParameter 來(lái)檢索每個(gè)表單項(xiàng)的值。
在請(qǐng)求對(duì)象的 ASP 版本中,Microsoft 將區(qū)分通過(guò) GET 到達(dá)的參數(shù)和通過(guò) POST 到達(dá)的參數(shù),您必須分別調(diào)用 getQueryString 或 getForm。在 servlet 版本中,在請(qǐng)求級(jí)別上不存在這種差別,因?yàn)橛?GET 模式還是用 POST 模式,是在調(diào)用 doGet 或 doPost 時(shí)才規(guī)定的。因此,當(dāng)您改編 getParameter 方法時(shí),對(duì)于所需的值,您必須既查看查詢字符串,又查看表單集合。
還有一點(diǎn)需要注意,當(dāng)參數(shù)不存在時(shí),Microsoft 版本中將返回一個(gè)空字符串,而 Sun 版本中將返回 null。考慮到這一點(diǎn),您必須檢查空字符串并在相應(yīng)位置使返回值為 null。[TABLE][TR][TD][PRE]public String getParameter( String str ){    String result = request.getQueryString().getString( str );    if( ( result != null ) && result.trim().equals( "" ) )    {        result = request.getForm().getString( str );        if( ( result != null ) && result.trim().equals( "" ) )        {            return( null );        }    }    return( result );}[/PRE][/TD][/TR][/TABLE]
這樣做相當(dāng)簡(jiǎn)單,但期望值不要太高,因?yàn)槭虑榧磳⒆兊酶鼮閺?fù)雜。這是因?yàn)椋?servlet 中,請(qǐng)求對(duì)象也引出一個(gè)稱為 getParameterNames 的方法,對(duì)于客戶機(jī)提供的每段數(shù)據(jù),它都會(huì)返回關(guān)鍵字的一個(gè) Enumeration。如上所述,就 servlet 而論,它是一個(gè)單一入口點(diǎn),但是 ASP 則要區(qū)分 GET 提供的數(shù)據(jù)和 POST 提供的數(shù)據(jù)。為了向 servlet 返回單一的 Enumeration,必須將 ASP 請(qǐng)求對(duì)象的查詢字符串和表單集合這兩種 Enumeration 組合起來(lái)。下面是我為了解決這個(gè)問(wèn)題臨時(shí)編寫的一個(gè)方便的小工具。此工具稱為 EnumerationComposite(請(qǐng)不要將它與 Composite 設(shè)計(jì)模式相混淆),它使用一個(gè) RequestDictionary(ASP 版本的 Hashtable)數(shù)組,并將這兩種 Enumeration 連接起來(lái),形成一個(gè)大的 Enumeration。下面是完整的代碼:[TABLE][TR][TD][PRE]public class EnumerationComposite implements Enumeration{    private RequestDictionary[] array;    private int stackPointer = 0;     public EnumerationComposite( RequestDictionary[] array )    {        this.array = array;    }    public boolean hasMoreElements()    {        if( this.stackPointer >= this.array.length )         {            return( false );        }        else if( this.array[ this.stackPointer ].hasMoreItems() )        {            return( true );        }        else        {            this.stackPointer += 1;            return( this.hasMoreElements() );        }    }    public Object nextElement()    {        return( this.array[ this.stackPointer ].nextItem() );    }}[/PRE][/TD][/TR][/TABLE]
現(xiàn)在這個(gè)工具極大地簡(jiǎn)化了您的工作。而 getParameterNames 方法就具有了類似下面的形式:[TABLE][TR][TD][PRE]public Enumeration getParameterNames(){    return(        new EnumerationComposite(            new RequestDictionary[] {                request.getQueryString(),                request.getForm() } ) );}[/PRE][/TD][/TR][/TABLE]
響應(yīng)對(duì)象的下一個(gè)最常用的方法是 getSession。會(huì)話對(duì)象是另一個(gè)核心對(duì)象,它在 ASP 和 servlet 之間互為映像。因此,您提供的會(huì)話就必須擁有自己的適配器,稍后我會(huì)對(duì)此加以說(shuō)明。但在我說(shuō)明之前,請(qǐng)先看這個(gè)請(qǐng)求方法:[TABLE][TR][TD][PRE]public HttpSession getSession( boolean flag ){    return( new SessionAdapter() );}[/PRE][/TD][/TR][/TABLE]
在本文中,需要改寫的請(qǐng)求對(duì)象的最后一個(gè)方法是 getCookies。顧名思義,它返回客戶機(jī)所提供的 cookie 的集合。ASP 版本的 cookie 對(duì)象使我感到為難,它似乎用作自身的一個(gè)集合,但又引出了許多具有莫明其妙的功能的方法。但是我能夠?qū)δ_本進(jìn)行充分的剖析來(lái)改寫 servlet。由于 ASP 版本中返回 Enumeration,而 servlet 版本中則返回一個(gè)數(shù)組,這樣就可以使用 Vector 類中一個(gè)不常用的方法 copyInto,來(lái)實(shí)現(xiàn)這種轉(zhuǎn)換,這是唯一的小竅門。另外請(qǐng)注意,由于在 com.ms.iis.asp 包和 javax.servlet.http 包中,類名是完全相同的,因此我們不得不明確指明每個(gè) Cookie 對(duì)象的包名。代碼如下:[TABLE][TR][TD][PRE]public javax.servlet.http.Cookie[] getCookies(){    Vector tmpList = new Vector();    CookieDictionary aspCookies = this.request.getCookies();    IEnumerator e = aspCookies.keys();    while( e.hasMoreItems() )    {        String key = (String) e.nextItem();        String val = aspCookies.getCookie( key ).getValue();        tmpList.addElement( new javax.servlet.http.Cookie( key, val ) );    }    javax.servlet.http.Cookie[] cookies = new javax.servlet.http.Cookie         [ tmpList.size() ];    tmpList.copyInto( cookies );    return( cookies );}[/PRE][/TD][/TR][/TABLE]
 

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美一级二级在线观看| 91官网在线观看| 国产偷v国产偷v亚洲高清| 狠狠狠色丁香婷婷综合久久五月| 日韩视频永久免费| 九色porny丨国产精品| 久久综合中文字幕| 成人91在线观看| 亚洲一卡二卡三卡四卡五卡| 8v天堂国产在线一区二区| 免费高清视频精品| 国产欧美久久久精品影院| 972aa.com艺术欧美| 亚洲国产视频一区| 精品美女一区二区| av中文字幕亚洲| 石原莉奈在线亚洲二区| 欧美精品一区二区三区蜜桃视频| www.久久精品| 日本欧美在线观看| 国产视频一区在线观看| 色噜噜狠狠一区二区三区果冻| 日本在线不卡视频一二三区| 国产亚洲美州欧州综合国| 91视频免费看| 久久精品久久99精品久久| 国产精品卡一卡二卡三| 欧美日韩在线免费视频| 国产美女精品一区二区三区| 亚洲精品中文字幕在线观看| 欧美成人午夜电影| 97精品超碰一区二区三区| 奇米精品一区二区三区在线观看| 日本一区二区三级电影在线观看| 欧美日韩高清影院| 成人免费高清在线| 日韩va亚洲va欧美va久久| 国产精品国产三级国产| 日韩视频在线一区二区| 91老司机福利 在线| 国产在线视频不卡二| 亚洲国产精品一区二区久久恐怖片| 久久婷婷国产综合精品青草| 欧美日韩国产另类不卡| 成人91在线观看| 国产精品一级在线| 天堂成人国产精品一区| 亚洲天堂免费在线观看视频| 久久综合成人精品亚洲另类欧美| 欧美日韩美少妇| 97成人超碰视| 成人午夜在线视频| 久久99精品国产麻豆婷婷洗澡| 亚洲香肠在线观看| 综合久久给合久久狠狠狠97色| 久久久国产午夜精品| 日韩女优av电影| 在线综合亚洲欧美在线视频| 色噜噜久久综合| 91在线码无精品| 成人黄色国产精品网站大全在线免费观看| 蜜臂av日日欢夜夜爽一区| 亚洲午夜羞羞片| 亚洲女同一区二区| 国产精品久久久久影视| 国产欧美一区在线| 国产视频一区二区三区在线观看| 欧美不卡激情三级在线观看| 欧美一区二区国产| 欧美高清hd18日本| 欧美日韩不卡一区| 欧美久久久久久蜜桃| 欧美三级三级三级| 精品视频一区 二区 三区| 欧美无砖砖区免费| 欧美久久久久中文字幕| 91精品国产一区二区三区香蕉| 欧美一区二区成人6969| 欧美疯狂做受xxxx富婆| 这里只有精品视频在线观看| 91精品欧美久久久久久动漫| 欧美一区二区久久| 欧美xxxx在线观看| 久久久久成人黄色影片| 日本一区二区三区在线不卡| 中文字幕一区二区三区在线观看| 亚洲少妇30p| 亚洲午夜免费电影| 日韩高清不卡一区二区三区| 九九**精品视频免费播放| 国产精品综合av一区二区国产馆| 成人永久aaa| 色就色 综合激情| 欧美日韩国产在线播放网站| 日韩午夜电影在线观看| 久久久综合视频| 国产精品不卡在线| 亚洲图片有声小说| 麻豆国产欧美一区二区三区| 国产伦精品一区二区三区在线观看| 成人污污视频在线观看| 色综合久久久久久久久| 777欧美精品| 国产精品午夜久久| 亚洲在线一区二区三区| 蜜桃av一区二区三区| 不卡一区二区中文字幕| 欧美日韩一级片在线观看| 久久伊人中文字幕| 一区二区欧美在线观看| 视频一区视频二区中文字幕| 国产99久久久精品| 欧美性受极品xxxx喷水| 精品福利在线导航| 一区二区三区中文在线观看| 奇米影视7777精品一区二区| 大胆欧美人体老妇| 欧美另类videos死尸| 久久九九久久九九| 亚洲成va人在线观看| 福利一区福利二区| 欧美一级欧美三级在线观看| 亚洲人成影院在线观看| 男女视频一区二区| 色一区在线观看| 久久九九99视频| 日韩 欧美一区二区三区| 99在线精品免费| 久久综合一区二区| 视频一区二区国产| 91亚洲国产成人精品一区二三| 日韩精品中文字幕一区 | 天天射综合影视| 国产iv一区二区三区| 欧美肥妇bbw| 亚洲欧美偷拍三级| 国产91精品在线观看| 777奇米四色成人影色区| 亚洲色图清纯唯美| 国产成人在线免费观看| 日韩精品中文字幕在线一区| 五月天一区二区| 一本色道久久综合亚洲91| 国产亚洲精品中文字幕| 久久国产综合精品| 在线电影一区二区三区| 亚洲一区二区三区四区中文字幕| 成人综合婷婷国产精品久久蜜臀 | 久久久久久久久久久黄色| 午夜亚洲国产au精品一区二区| 91在线丨porny丨国产| 欧美精品一区二区三区四区| 秋霞午夜鲁丝一区二区老狼| 在线观看国产日韩| 亚洲免费av高清| 91丨porny丨国产入口| 国产精品美女久久久久久2018| 国产精品系列在线观看| 欧美大度的电影原声| 久久激五月天综合精品| 日韩视频一区二区| 麻豆一区二区三区| 欧美一级一区二区| 日本午夜一区二区| 欧美日韩精品一区二区| 亚洲第一福利一区| 欧美日韩一区二区在线观看视频| 亚洲一区国产视频| 欧美日韩久久一区二区| 亚洲一区电影777| 欧美美女一区二区| 美女网站色91| 2020日本不卡一区二区视频| 国产成人超碰人人澡人人澡| 中文字幕精品一区二区精品绿巨人| 粉嫩av一区二区三区粉嫩| 国产精品欧美一级免费| 91色视频在线| 亚洲成va人在线观看| 91精品在线麻豆| 久久不见久久见免费视频7| 欧美一级免费大片| 国产在线播放一区二区三区| 日本一区二区三区电影| 91美女片黄在线观看91美女| 亚洲国产精品一区二区www | 欧美午夜精品一区二区三区| 婷婷激情综合网| 日韩免费电影一区| 福利一区二区在线观看| 亚洲精品成人精品456| 91精品国产一区二区三区| 国产精品 日产精品 欧美精品| 中文字幕在线不卡视频| 欧美在线观看视频一区二区三区| 日本vs亚洲vs韩国一区三区二区| 国产日韩欧美在线一区| 色天使色偷偷av一区二区| 奇米影视7777精品一区二区| 国产精品丝袜久久久久久app|