2.5 罗马不是一夜建成的——从简单URL请求到整张地图

2.5       罗马不是一夜建成的——从简单 URL 请求到整张地图

从前面 2.3 节的例子中我们可以看到,如果您使用的是用 asp.net 实现的 web 层组件,并采用的是 AJAX 阅读器,那么,一般来说,您的 MapGuide 的页面都是从如下面所示的这样一个 URL 请求开始的:

http://localhost/mapguide/mapviewerajax/ajaxviewer.aspx?WEBLAYOUT=< 网页布局的资源标识 >

对于其他语言实现的 web 层组件,除了 ajaxviewer 页面的后缀不同,其余部分是一样的。

由于安装包会把 ajaxviewer 页面作为这个路径下的默认文件,所以这个 URL 也可以写做 http://localhost/mapguide/mapviewerajax/?WEBLAYOUT=< 网页布局的资源标识 > 。如果您使用的是服务器版,请用“ mapguide+ 版本号”(如 mapguide2010 )来替代路径中的 mapguide

下面,我们就看看服务器端会如何去响应这个 URL 。下面的讲解,是以 asp.net 实现的 web 层组件作为例子的。其他语言实现的 web 层控件,虽然内容稍有不同,但原理是一样的。

2.5.1          把敌人挡在门外—— MapGuide 的认证机制

如果您仔细观察过 AJAX 阅读器的默认页面 ajaxviewer DWF 阅读器的默认页面 dwfviewer 的话,您会发现这两个页面的作用仅仅是设置一个名为 forDwf 的变量(这个变量将来会在代码中用于区分是 AJAX 阅读器还是 DWF 阅读器),然后就把控制权交给了 mainframe 页面。

Mainframe 第一次接到请求时,这个请求是没有登录信息的,会在 67 行调用 RequestAuthentication 函数,这个函数会给浏览器返回一个状态为 401 HTTP 响应,表示需要用户进一步输入认证信息。这里要注意的是, HTTP 协议虽然规定了状态 401 表示需要进一步输入认证信息,却没有规定浏览器用什么样的方式来让用户输入,因此,不同浏览器对此的反应并不是完全一致的。下图 2-4 显示了部分浏览器用来输入认证信息的界面。


2-4(1) Windows 7 Internet Explorer 8 的认证界面


2-4(2)FireFox 3.5 的认证界面

用户输入用户名和密码之后, mainframe 会第二次接收到请求,由于这个请求包含有登录信息, mainframe 会利用登录信息打开一个 MgSiteConnection ,并借由这个连接创建一个会话。创建会话的函数会返回标识该会话的一个字符串,以后的页面都依靠这个字符串来表示自己是运行在哪个会话中的。

如果您想像 2.3 节中那样有自己的登录页面,或者您想让用户都以您指定的用户名密码登录(一个最典型的例子是,所有来自网页访问都利用 guest 账户登录),您可以在访问 mainframe ,也就是 ajaxviewer 时候,在 URL 中加上 username password 两个参数,即采用如下格式:

http://localhost/mapguide/mapviewerajax/?WEBLAYOUT=< 网页布局文件的资源标识 >&USERNAME=< 用户名 >&PASSWORD=< 密码 >

如:

http://localhost/mapguide/mapviewerajax/?weblayout=Library://HelloViewer/HelloViewer.WebLayout&username=guest&password=guest

要注意的是,这种方法由于密码是直接放置在 URL 中,所以仅用于对保密性要求不高的场合,比如用于 guest 账户的登录。如果想要密码不出现在 URL 中,可以像 2.3 节中的例子那样,用一个表单将这两个参数用 POST 的方式提交到 ajaxviewer 页面中。

还有一种特殊的情况,就是您已经通过其他途径创建了一个会话,而想让 mainframe 直接使用这个会话,这也是可以的。您只要在 URL 中加上 session 这个参数,并用会话标识字符串作为它的值,即采用如下格式:

http://localhost/mapguide/?WEBLAYOUT=< 网页布局文件的资源标识 >&SESSION=< 会话标识 >

http://localhost/mapguide/mapviewerajax/?weblayout=Library://HelloViewer/HelloViewer.WebLayout&session=290058d2-cc7b-102c-8000-0013a93ebc6b_en_7F0000010AFC0AFB0AFA

同样,为了安全起见,您也可以通过表单来将这个参数用 POST 的方式提交到 ajaxviewer 页面中,来避免在页面 URL 中直接出现会话的标识。

现在我们的网页已经成功登录到 MapGuide 服务器上了,那么,下面我们来看看各个框架都是怎样初始化的。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值