Server.MapPath和Request.MapPath()的用法

本文详细解释了ASP.NET中Server.MapPath与Request.MapPath的区别及用法。Server.MapPath用于获取相对于当前文件的物理路径,而Request.MapPath则用于获取相对于Web根目录的物理路径。文章通过实例演示了不同路径符号(如'./'、'/'、'..')的使用效果。

Server.MapPath和Request.MapPath()的用法

./当前目录 
/根目录 
../上层目录(相对当前来说) 
如果当前的网站目录为D:\wwwroot    浏览的页面路径为D:\wwwroot\company\news\show.asp 
在show.asp页面中使用
Server.MapPath("./")   返回路径为:D:\wwwroot\company\news 
Server.MapPath("/")    返回路径为:D:\wwwroot 
Server.MapPath("../")   返回路径为:D:\wwwroot\company 
server.MapPath(request.ServerVariables("Path_Info")) 
Request.ServerVariables("Path_Translated")   
上面两种方式返回路径为 D:\wwwroot\company\news\show.asp 


ASP.NET中Server.MapPath() 和 Request.MapPath()区别: 
Server.MapPath(string)   :是将相对于当前调用文件的文件(或目录)映射为物理路径; 
Request.MapPath(string) :是将string虚拟路径映射为物理路径(asp中Request无此方法) 
Server.MapPath(string) 中string 可以用“../”方式引用父目录,甚至可以将此目录跳到整个WEB目录外,如:C:\WWWROOT 
目录为WEB根目录,在根目录文件中调用此Server.MapPath("../xyz.gif"),则可以调用WEB目录外的脚本、资源等。 
Request.MapPath(string) 中的string为虚拟目录,只能相对WEB虚拟目录形式的,也不允许"../"方式调用,只能是"/","/xx"等字符串 
有时候直接用Server.MapPath(string) 调用一个文件比较麻烦,因为不同的目录中调用同一个Server.MapPath(string) 函数就会得到不同的值, 
特殊的话,就需要通过判断本身目录层次才能获取正确的地址,使用的Request.MapPath(string)就可以调用同一个目录文件。不用做目录判断
### Microsoft VBScript 编译器错误 '800a0401' 语句未结束 的解决方案 Microsoft VBScript 编译器错误 '800a0401' 表示语句未结束,通常是因为脚本中缺少必要的语法元素,例如括号、引号或关键字。此错误可能出现在使用 `Adodb.Connection` 对象或其他代码逻辑时[^1]。 以下是解决此问题的详细分析方法: #### 1. 检查字符串是否正确闭合 确保所有字符串都用双引号(`" "`) 或单引号(`' '`)正确闭合。如果字符串未闭合,VBScript 将无法识别语句的结束位置。例如: ```vbscript Dim connectionString connectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\mydatabase.mdb" ' 正确 ``` 如果忘记闭合引号,则会导致错误: ```vbscript Dim connectionString connectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\mydatabase.mdb ' 错误 ``` #### 2. 确保括号匹配 检查所有括号是否成对出现。例如,在调用 `Adodb.Connection` 的 `Open` 方法时,必须确保括号正确闭合: ```vbscript Dim conn Set conn = CreateObject("ADODB.Connection") conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\mydatabase.mdb" ' 正确 ``` 如果缺少闭合括号或引号,将引发 '800a0401' 错误。 #### 3. 避免遗漏关键字 在编写 VBScript 代码时,确保没有遗漏重要的关键字。例如,`If...Then` 语句必须以 `End If` 结束: ```vbscript If True Then ' 执行某些操作 End If ' 正确 ``` 如果省略了 `End If`,则可能导致 '800a0401' 错误。 #### 4. 检查多行语句 如果语句跨越多行,请使用下划线(`_`)作为续行符。例如: ```vbscript Dim sqlQuery sqlQuery = "SELECT * FROM Users WHERE Active = 1 AND " & _ "LastLogin > #2023-01-01#" ``` 如果没有使用续行符 `_`,或者续行符后有多余的字符,也可能导致 '800a0401' 错误。 #### 5. 调试 Adodb.Connection 代码 当使用 `Adodb.Connection` 时,确保连接字符串方法调用正确无误。以下是一个完整的示例: ```vbscript Dim conn Set conn = CreateObject("ADODB.Connection") conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\mydatabase.mdb;" ' 正确 ``` 如果连接字符串中缺少分号或引号,或者 `Open` 方法调用不完整,都会触发 '800a0401' 错误。 #### 6. 使用调试工具 可以启用脚本调试功能,帮助定位错误的具体位置。在 IIS 中运行 VBScript 时,可以通过修改配置文件启用详细的错误信息。 --- ### 示例代码 以下是一个完整的 VBScript 示例,展示如何正确使用 `Adodb.Connection`: ```vbscript Dim conn, rs, sqlQuery Set conn = CreateObject("ADODB.Connection") Set rs = CreateObject("ADODB.Recordset") conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\mydatabase.mdb;" ' 正确的连接字符串 sqlQuery = "SELECT * FROM Users WHERE Active = 1" rs.Open sqlQuery, conn If Not rs.EOF Then Do While Not rs.EOF WScript.Echo rs.Fields("UserName").Value rs.MoveNext Loop End If rs.Close conn.Close Set rs = Nothing Set conn = Nothing ``` ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值