快精灵印艺坊 您身边的文印专家
广州名片 深圳名片 会员卡 贵宾卡 印刷 设计教程
产品展示 在线订购 会员中心 产品模板 设计指南 在线编辑
 首页 名片设计   CorelDRAW   Illustrator   AuotoCAD   Painter   其他软件   Photoshop   Fireworks   Flash  

 » 彩色名片
 » PVC卡
 » 彩色磁性卡
 » 彩页/画册
 » 个性印务
 » 彩色不干胶
 » 明信片
   » 明信片
   » 彩色书签
   » 门挂
 » 其他产品与服务
   » 创业锦囊
   » 办公用品
     » 信封、信纸
     » 便签纸、斜面纸砖
     » 无碳复印纸
   » 海报
   » 大篇幅印刷
     » KT板
     » 海报
     » 横幅

使用SERVER.TRANSFER对URL进行隐藏以及其他

我的初步想法是:在一个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的区别
    微笑服务 优质保证 索取样品