国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

如何在ASP.NET環境中建立基于WML的站點

2019-11-17 04:07:38
字體:
來源:轉載
供稿:網友
<!-- /* Font Definitions */ @font-face {font-family:Wingdings; panose-1:5 0 0 0 0 0 0 0 0 0; mso-font-charset:2; mso-generic-font-family:auto; mso-font-pitch:variable; mso-font-signature:0 268435456 0 0 -2147483648 0;} @font-face {font-family:宋體; panose-1:2 1 6 0 3 1 1 1 1 1; mso-font-alt:SimSun; mso-font-charset:134; mso-generic-font-family:auto; mso-font-pitch:variable; mso-font-signature:3 135135232 16 0 262145 0;} @font-face {font-family:"/@宋體"; panose-1:2 1 6 0 3 1 1 1 1 1; mso-font-charset:134; mso-generic-font-family:auto; mso-font-pitch:variable; mso-font-signature:3 135135232 16 0 262145 0;} /* Style Definitions */ p.MsoNormal, li.MsoNormal, div.MsoNormal {mso-style-parent:""; margin:0cm; margin-bottom:.0001pt; text-align:justify; text-justify:inter-ideograph; mso-pagination:none; font-size:10.5pt; mso-bidi-font-size:12.0pt; font-family:"Times New Roman"; mso-fareast-font-family:宋體; mso-font-kerning:1.0pt;} h1 {mso-style-next:正文; margin-top:17.0pt; margin-right:0cm; margin-bottom:16.5pt; margin-left:0cm; text-align:justify; text-justify:inter-ideograph; line-height:240%; mso-pagination:lines-together; page-break-after:avoid; mso-outline-level:1; font-size:22.0pt; font-family:"Times New Roman"; mso-font-kerning:22.0pt;} PRe {margin:0cm; margin-bottom:.0001pt; mso-pagination:widow-orphan; font-size:12.0pt; font-family:宋體; mso-bidi-font-family:宋體;} /* Page Definitions */ @page {mso-page-border-surround-header:no; mso-page-border-surround-footer:no;} @page Section1 {size:612.0pt 792.0pt; margin:72.0pt 90.0pt 72.0pt 90.0pt; mso-header-margin:36.0pt; mso-footer-margin:36.0pt; mso-paper-source:0;} div.Section1 {page:Section1;} -->

一、 asp.net 環境下實現手機瀏覽頁面的幾種方法
    
ASP.NET
本身就提供了對Mob
ile
頁面的支持,只要頁面繼承這個對象就可以了:“System.Web.UI.MobileControls.MobilePage
”。但是由于其目標宏大,為了在各種設備的請求下有相應的回應,需要作出各種不同的回應,因此需要很復雜的配置。而且為了應對不支持Cookie
的設備,需要在有Cookie
和無Cookie
的會話管理方式中切換,此時涉及到相對URL
時就會出現很大的問題。當前許多站點的手機頁面和Internet
頁面是放在同一個web
服務器下的,這無疑將影響Internet
頁面的會話管理方式。

  

    現在還有很多工具和嵌入式平臺(如 QuickWAP )可以用來很便利地實現 WAP 頁面,這些平臺一般都因為能夠提供一定的便利性(如控件、狀態管理等)而流行,筆者不是不建議大家使用,而是希望我們做軟件的,能夠知其然亦知其所以然,還是要花些時間在 wml 和 xhtml 上(就和普通 aspx 網頁,也不要滿足于在設計模式下拖拽控件,而是要習慣于直接編寫 html 和 CSS 代碼一樣)。

  

我們自己生成 WML 文檔并 Response 回去,其原理相當于在普通 aspx 頁面中,我們不拖拽控件,而是直接 Response.Write(“<html><head><title>hello</title></head><body>Hello world</body></html>”); 一樣,而且不需要任何其他配置。

二、服務器端生成 xml 文檔的方式來生成頁面
為了支持絕大多數的手機用戶,我們只能使用最基本的 wml1.1 語法來生成文檔。一個 wml 文檔,就是一個合法的 xml 文檔,要了解 wml 語法, “ OReilly Learning WML & WMLScript.pdf ”這本書給出了比較詳盡的講述。這里僅就基本結構、常用的鏈接、圖片、段落等給出一些事例,能看懂 html 代碼的人應該也能看懂是什么意思。

<?xml version="1.0"?>

  <!DOCTYPE wml PUBLIC      "-//WAPFORUM//DTD WML 1.1//EN"

     "http://www.wapforum.org/DTD/wml_1.1.xml">

  <wml>

     <card title=" 標題 ">

         <p> 段落 1</p>

<!— 圖片的 width 和 height 屬性一般僅用來提示瀏覽器在圖片裝載之前保留適當位置,如果這與圖片實際大小不符,將可能被忽略 . -->

<p><img src="img/pic.wbmp" alt=" 圖片示例 "/></p>

<!— 和 html 里一樣,注釋 . -->

<setvar name="variable1" value=" 變量 variable1 的值 "/>

<setvar name="v2" value="v2"/>

<!— 下面這個是輸入框,和上面的變量 v2 都用來作為 QueryString 的一部分 -->

<input name="input1" size="18" emptyok="true"/>

<!— 下面這個 anchor 內有個 go ,除了自身的 arg1 外,還有來自 v2 的 arg2 和來自 input1 的 arg3 ,假設用戶點擊“搜索”時輸入框內的文字為 abcd ,則頁面跳轉到 test.aspx?arg1=1&arg2=v2&arg3=abcd ,這樣就實現了基本的百度搜索功能了 à

<anchor>

<go href="test.aspx?arg1=1" method="get">

<postfield name="arg2" value="$(v2)"/>

<postfield name="arg3" value="$(input1)"/>

</go> 搜索

</anchor>

<input name=”passWordInput1” type=”password”/>

  

<!— 本段落演示登錄頁 . -->

<p>

<p>Username: <input name="user" format="*x"/></p>

<p>Password: <input name="pass" type="password"/></p>

    <do type="accept" title="Log In">

       <go href="login.aspx?u=$(user:e)&amp;p=$(pass:e)"/>

    </do>

</p>

  

<!— 本段落演示下拉框 . -->

<select name="airport">

     <option value="LHR">London Heathrow</option>

     <option value="LGW">London Gatwick</option>

     <option value="STN">London Stansted</option>

      <option value="LCY">London City</option>

     <option value="LTN">London Luton</option>

  </select>

  

<!— 普通的鏈接 . -->

<a title=" 鏈接 1" href="testPage2.aspx"> 點擊我來跳轉頁面 </a>

  

<!— 和 html 一樣功能的換行 . -->

<br/>

  

<!— 下劃線、粗體和斜體 . -->

<p align="left">

  Some text with bits in <b> 粗體 </b> and <i> 斜體 </i> and <u> 下劃線 </u>.

  </p>

     </card>

  </wml>

  

看懂了上面的示例,我們就有能力創建一些普通功能的頁面了。由于絕大部分應用的頁面都是動態的,我們需要動態地生成 wml 文檔。生成 xml 文檔有多種方式,可以用 System.Xml.XmlDocument 、可以用字符串拼接( StringBuilder )、 System.Xml.XmlTextWriter 以及使用 System.Xml.Linq.Xdocument 。基于性能和便利性結合考慮,推薦使用 XmlTextWriter 來生成頁面 xml 文檔。

protected void Page_Load(object sender, EventArgs e)

    {

        Response.ContentType = "text/vnd.wap.wml";

MemoryStream ms = new MemoryStream();

        Encoding ec = new System.Text.UTF8Encoding(false);

        StreamWriter sw = new StreamWriter(ms, ec);

        XmlTextWriter xtw = new XmlTextWriter(sw);

  

        //xtw.Formatting = Formatting.Indented;

        xtw.WriteStartDocument();

  

        xtw.WriteDocType("wml", wmlUsage.s_wmlPubId, wmlUsage.s_wmlSysId, null);

         xtw.WriteStartElement("wml");

  

        wmlUsage.WriteWmlHead(xtw);

  

        xtw.WriteStartElement("card");

        xtw.WriteAttributeString("id", "home");

        xtw.WriteAttributeString("title", " 標題 ");

        xtw.WriteStartElement("p");

        xtw.WriteStartElement("img");

        xtw.WriteAttributeString("src", "images/logo.jpg");

        xtw.WriteAttributeString("alt", " 網站 logo");

        xtw.WriteEndElement();

        xtw.WriteElementString("br", null);

  

// 在這里生成頁面其他信息,最后要讓每個 WriteStartElement 都有一個 WriteEndElement

// 與之對應

  

xtw.WriteEndElement();

        xtw.WriteEndElement();

  

        xtw.WriteEndDocument();

  

        xtw.Flush();

        sw.Flush();

  

        string str = Usage.GetStreamString(ms, ec);

        Response.Write(str);

        sw.Close();

try

        {

            Response.End();

        }

        catch

        {

        }

}

  

  

三、如何解決圖片顯示問題
    手機客戶端對圖片的支持良莠不齊,且很多 wap 瀏覽器都不支持圖片的大小設置,這樣就要求我們對過大的圖片進行設置。 .net Framwork 提供的 System.Drawing 命名空間內有很多對圖像處理的類,使用 System.Drawing.Bitmap 就可以輕松實現生成新大小的圖片。具體請查看 msdn 。

  

四、如何解決用戶狀態相關問題
很多應用都要求手機用戶也能支持用戶登陸、購物車等會話相關的功能。在 Internet 網頁中,一般都是使用 session 或 Profile 來實現的。手機頁面,為了保證最大程度的通用性,不應該再依賴于 Session 和 Profile 。本文提供一種基于 URL 的方法。

該方法原理很簡單,為每個需要存儲相關登陸狀態的用戶生成全局唯一的 ID ,并將此 ID 以明文或加密的方式存放在返回給用戶的每個 URL 中,作為 QueryString 的一部分。這樣用戶進行任何操作后,再次與服務器通信時,服務器都可以通過這個 ID 來識別該用戶。

<a href=”test.aspx?uid=11223344”> 點擊進入測試頁面 </a>

在服務器端,提供一個通用的用于識別用戶的對象 IdentitiVerification ,頁面把當前的 Request 對象傳入,就能夠得到相關請求用戶的相關信息( UserInfo ) :

  

public class UserInfo

    {

        public string ID { get; set; }

        public string Name { get; set; }

        public bool IsAnnonymous { get; set; }

        public ShppingCart Sc { get; set; }

        public string IdentityID { get; set; }

    }

  

  

大部分頁面的處理模式:

protected void Page_Load(object sender, EventArgs e)

    {

        UserInfo ui = IdentitiVerification.GetUserInfo(Request);

        if (ui.IsAnnonymous)

        {

            // 未登錄用戶的頁面生成

        }

        else

        {

            // 已登錄用戶

        }

        // 在可能與服務器通信處的鏈接,都加上 String.Format("xxx.aspx?uid={0}", ui.IdentityID) 字樣。

        ...

  

}

  

  

注 1 :   如果網頁頁面程序使用 Profile 來存儲用戶信息,那么這個 UserInfo 基本上可以與之通用。

注 2 :   用戶信息與 ID 對照表可使用 ASP.NET 全局緩存來保存。

注 3 :   為了安全性考慮,生成的 ID 應該復雜且不可被猜測、沒有上下文相關信息、最好也沒有用戶相關信息。建議使用 GUID 之類無上下文信息生成技術。同時 ID 不能太短,以免被人手工改動試出。 IdentitiVerification 對象還應該具有一些基本的智能識別攻擊的技術(比如某段時間頻繁調用 GetUserInfo 方法時,傳入的 id 都是不存在的,這時基本可以判定有人在惡意攻擊,應對 Request 對象進行日志記錄并通知管理員等)。

注 4 :   為了性能考慮, IdentitiVerification 應具有對長時間無動作的存儲 ID 進行清除操作。 
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 千阳县| 建昌县| 新营市| 西林县| 正定县| 介休市| 大渡口区| 东山县| 嘉义县| 望江县| 平遥县| 内乡县| 北碚区| 凤山县| 通州市| 金乡县| 余庆县| 博乐市| 黄龙县| 临桂县| 昌乐县| 肇东市| 电白县| 东乡| 双城市| 岳西县| 宣武区| 乐清市| 扶绥县| 谷城县| 泰宁县| 肥西县| 临武县| 扶沟县| 蒙城县| 东乌珠穆沁旗| 莱阳市| 东乌| 泸溪县| 沐川县| 林西县|