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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

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

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

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
成人黄页在线观看| 亚洲精品日日夜夜| 亚洲综合激情另类小说区| 久热成人在线视频| 色网综合在线观看| 久久久精品天堂| 日韩不卡一区二区| 一道本成人在线| 中文字幕不卡一区| 极品少妇xxxx精品少妇偷拍| 欧美色精品在线视频| 中文字幕日韩欧美一区二区三区| 首页亚洲欧美制服丝腿| 色综合久久中文字幕| 国产精品久久久久婷婷二区次| 久久成人av少妇免费| 777色狠狠一区二区三区| 亚洲一二三四在线观看| 99久久久久久| 中文字幕亚洲区| 成人免费毛片aaaaa**| 久久免费午夜影院| 精品一区二区三区影院在线午夜 | 国产乱人伦偷精品视频免下载| 欧美日韩一区二区三区不卡| 一区二区三区小说| av一本久道久久综合久久鬼色| 久久久五月婷婷| 日本午夜一区二区| 91精品欧美一区二区三区综合在| 午夜久久电影网| 欧美日韩一卡二卡三卡| 亚洲成人先锋电影| 欧美美女视频在线观看| 日韩经典中文字幕一区| 日韩一区二区三区四区五区六区 | 亚洲欧美日韩系列| 99国产精品久久久久| 亚洲视频免费在线| 欧美天天综合网| 五月天亚洲精品| 日韩亚洲欧美成人一区| 久久av资源网| 国产日韩三级在线| 91原创在线视频| 亚洲一区免费视频| 制服.丝袜.亚洲.另类.中文| 蜜桃av一区二区| 久久美女艺术照精彩视频福利播放| 国产中文字幕一区| 亚洲天堂av老司机| 欧美日韩免费视频| 美国三级日本三级久久99| 国产午夜精品一区二区三区四区| 风间由美一区二区三区在线观看| 亚洲丝袜另类动漫二区| 欧美日韩中文字幕精品| 极品尤物av久久免费看| 国产精品久久久一本精品| 欧美午夜精品久久久| 精品一区二区三区免费视频| 国产精品福利av| 欧美巨大另类极品videosbest | 26uuu久久综合| av成人老司机| 视频在线观看一区| 国产区在线观看成人精品| 色吊一区二区三区| 免费高清成人在线| 国产精品美女久久久久久久网站| 欧美日韩精品一区二区在线播放| 国产在线精品一区二区不卡了| 国产精品高潮久久久久无| 91麻豆精品国产91久久久使用方法| 国产精品99久久久久| 亚洲福利电影网| 国产精品色哟哟网站| 91精品久久久久久久久99蜜臂| 国产成人精品免费看| 午夜久久福利影院| 国产精品黄色在线观看| 精品国产乱子伦一区| 欧美中文字幕一区二区三区亚洲| 国产一区二区调教| 日韩精品欧美精品| 亚洲日本电影在线| 久久久久久久久久久黄色| 欧美日韩精品欧美日韩精品一| 成人中文字幕合集| 久久精品国产精品亚洲精品| 亚洲第一综合色| 国产精品卡一卡二| 国产欧美视频一区二区| 日韩一区二区在线看片| 欧美色国产精品| 色伊人久久综合中文字幕| 成人国产视频在线观看| 国产麻豆午夜三级精品| 欧美aaaaaa午夜精品| 丝袜美腿亚洲一区| 亚洲国产精品视频| 樱花草国产18久久久久| 国产精品久久久久久久久免费丝袜| 精品国产免费视频| 精品国产污污免费网站入口 | 欧美放荡的少妇| av在线播放不卡| 国产精品99久| 国产精品91xxx| 国产精品中文字幕欧美| 国模大尺度一区二区三区| 久久www免费人成看片高清| 免费精品视频在线| 日韩黄色免费电影| 午夜国产精品影院在线观看| 亚洲国产日韩在线一区模特| 亚洲h在线观看| 视频一区二区国产| 奇米精品一区二区三区在线观看 | 欧美手机在线视频| 在线精品视频免费播放| 欧美日韩免费电影| 日韩一区二区在线观看视频播放| 日韩欧美国产1| 精品乱人伦小说| 久久精品欧美一区二区三区麻豆| 久久久99精品久久| 亚洲成人免费电影| 综合精品久久久| 亚洲最大成人综合| 日韩在线一区二区三区| 另类专区欧美蜜桃臀第一页| 国产在线精品免费| 成人avav影音| 欧美日韩一区高清| 日韩欧美一区二区视频| 精品播放一区二区| 中文一区在线播放| 一区二区免费在线| 日本美女视频一区二区| 激情av综合网| 91女人视频在线观看| 欧美日本一道本| 久久嫩草精品久久久久| 亚洲视频小说图片| 九九九久久久精品| 成人免费视频一区| 欧美日韩精品免费| 国产欧美日韩激情| 亚洲午夜在线视频| 国产在线视频不卡二| 91色九色蝌蚪| 日韩精品中文字幕一区| 亚洲免费伊人电影| 久草精品在线观看| 在线免费亚洲电影| 国产午夜精品美女毛片视频| 一片黄亚洲嫩模| 国产91色综合久久免费分享| 欧美精品日韩一区| 国产精品伦理在线| 蜜臀av一区二区| 欧美亚洲国产一区二区三区va| 欧美电影精品一区二区| 亚洲一区二区三区中文字幕| 国内成人精品2018免费看| 色综合久久精品| 国产欧美精品一区二区三区四区 | 欧美在线一区二区三区| 欧美精品一区二区高清在线观看| 亚洲激情图片一区| 国产丶欧美丶日本不卡视频| 欧美一区二区三区在线电影| 亚洲私人黄色宅男| 国产精品18久久久久久vr| 欧美色图12p| 自拍视频在线观看一区二区| 国产麻豆91精品| 日韩欧美激情一区| 五月天亚洲婷婷| 欧美唯美清纯偷拍| 亚洲精品日产精品乱码不卡| proumb性欧美在线观看| 精品国产亚洲在线| 久草在线在线精品观看| 欧美一区二区大片| 天堂影院一区二区| 欧美日韩一级视频| 亚洲国产日韩综合久久精品| 色婷婷av一区二区| 亚洲欧美日韩人成在线播放| 成人av网址在线观看| 国产午夜精品理论片a级大结局| 国内久久精品视频| 久久久久久久久久久久电影 | 性久久久久久久久久久久 | 99精品热视频| 国产精品国模大尺度视频| 成人午夜碰碰视频| 国产精品丝袜一区|