|
![]() |
名片设计 CorelDRAW Illustrator AuotoCAD Painter 其他软件 Photoshop Fireworks Flash |
|
我的初步想法是:在一个xml文件中记录所有的名称-地址对照集合,然后在default.asp中读取这个集合,在查询字符串的pg中读取page name, 然后Server.Transfer到相应的页面中。要害代码如下: default.asp: <!--#include file="Functions.asp"--> <% On Error Resume Next Response.CharSet = "gb2312" Dim opageName, opageURL opageName = Request.QueryString("pg") If opageName <> "" Then opageURL = GetPage(opageName) Else Response.Write "OKOK, You didn\\\'t pass a pg parameter." Response.End End If If opageURL = "" Then Response.Write "找不到映射文件for: " & opageName Else Server.Transfer(opageURL) End If If Err.Number <> 0 Then Response.Write Err.Description End If %> Functions.asp: <% Option Explicit Dim configPath, Page_URL_Dict configPath = Server.MapPath("./conf/app-conf.xml") Set Page_URL_Dict = Server.CreateObject("Scripting.Dictionary") ‘根据pageName取得页面地址 Function GetPage(pageName) If Page_URL_Dict.Count = 0 Then ReadPageURLToDict End If GetPage = Page_URL_Dict(pageName) End Function ‘初始化pageName-pageURL对照字典 Function ReadPageURLToDict() On Error Resume Next Page_URL_Dict.RemoveAll Dim logNode, xmlDom, root Set xmlDom = Server.CreateObject("Microsoft.XMLDOM") xmlDom.async = False xmlDom.load(configPath) Set root = xmldom.selectSingleNode("//url-mappings") For Each logNode In root.childNodes Page_URL_Dict.Add logNode.childNodes(0).text, logNode.childNodes(1).text Next Set xmlDom = Nothing If Err.Number <> 0 Then Response.Write Err.Source & "<br>" Response.Write Err.Description & "<br>" End If End Function %> app-conf.xml <?xml version="1.0"?> <app-conf> <url-mappings> <url-mapping> <page-name>pgHome</page-name> <page-url>Page2.asp</page-url> </url-mapping> <url-mapping> <page-name>pgShowNews</page-name> <page-url>shownews-1_0.asp</page-url> </url-mapping> <url-mapping> <page-name>pgHtml</page-name> <page-url>1.html</page-url> </url-mapping> </url-mappings> </app-conf> 3 实践与问题 在浏览器中输入http://localhost:12345/default.asp?pg=pgHome http://localhost:12345/default.asp?pg=pgShowNews 看出各个较大不同的页面之间地址都一样,没有明显转向的感觉。我在一个页面作了遍历Request.Form, Request.QueryString的测试,都能够取得相应的值。 问题: 要转向的页面假如处在其他目录下,并且假如在该页面中有对../上级目录或其他目录的引用(如样式表,图片等),则显示不出来。我想这可能是Server.Transfer实际是将整个文件包含到当前路径来执行。这样图片、样式等的显示就会有问题了。也就是说,假如想应用这种方式在整个系统中,则需要将所有的页面文件(asp, html)置于与default.asp(或者其他控制转向的文件)同一文件夹下。这或多或少是个限制。 4 长处: 利用这种方法最直接的长处就是将链接与文件名隔开。你不需要费尽心思的想该怎么取一个文件名,也不需要花气力去检查链接地址的准确性。只要在xml文件中将pageName与pageURL进行映射就行了。 第二个长处是安全,用户无法知道你真正的URL地址。你也可以在default.asp中加入一些控制,使得直接访问xxx.asp的用户被转入到一个出错页面。 第三个长处是易于治理。通过将文件名―文件路径进行映射,你能够更加清晰整个项目的流程。假如你愿意,你可以将页面所带的参数也进行标准化。这样,对于ASP项目也能够规范化了,例如,一个典型的页面地址: http://etoow.com/default.asp?pg=pgNewsList&command=List&sp=1&sp=abc 通过将页面名称、参数的规范化,使得程序员可以更加清晰的编写整个页面。项目治理者可以通过把握整个xml的配置文件(当然,参数信息、页面描述等也应当记录在这个文件中)可以快速掌握整个项目的脉络。这也在一定程度上控制了随意添加文件的问题。 返回类别: 教程 上一教程: LEN(),LIFT(),RIGHT()不能正常识别中文的用户请进 下一教程: 无组件图文混合上传示例 您可以阅读与"使用SERVER.TRANSFER对URL进行隐藏以及其他"相关的教程: · 如何使用MICROSOFT ACCESS和ACTIVE SERVER PAGES加密你的页面 · 使用ASP+JMAIL进行邮件群发 · 使用ASP和WORD进行服务器端拼写检查 · 使用命名管道访问SQL SERVER · SERVER.TRANSFER,RESPONSE.REDIRECT的区别 |
![]() ![]() |
快精灵印艺坊 版权所有 |
首页![]() ![]() ![]() ![]() ![]() ![]() ![]() |