zoukankan      html  css  js  c++  java
  • MapGuide 浏览器可接受参数分析

     
    摘要:
    这篇文章我们主要讲述如何通过阅读分析MapGuide的源代码对MapGuide浏览器所接受参数的分析。
    如果你也正在困惑于MapGuide Ajax Viewer或者Fusion Viewer究竟可以使用那些参数,那么请你继续阅读。
     

    我们首先把Ajax Viewer和Fusion Viewer可用的参数列表列出来:

    Ajax Viewer中可用的参数为:

    WEBLAYOUT
    LOCALE
    SESSION
    USERNAME
    PASSWORD

    Fusion Viewer可用的参数为:

    Session
    ApplicationDefinition

    当然了,首先我们还是先简单介绍一下我们在基于MapGuide开发WebGIS应用程序时是怎样调用MapGuide 浏览器的。

    在使用Ajax Viewer时:

    <%@ Page Language="C#" %>
    <%
    @ Import Namespace = "OSGeo.MapGuide"%>
    <%
    UtilityClass utility = new UtilityClass();
    String webLayout = "Library://Exercise/Layouts/SheboyganAsp_4_Solution.WebLayout";
    //string webLayout = "Library://Samples/Sheboygan/Layouts/SheboyganAspTiled.WebLayout";

    String sessionId = "";
    try
    {
    utility.InitializeWebTier(Request);
    MgUserInformation userInfo = new MgUserInformation("Anonymous", "");
    MgSite site= new MgSite();

    site.Open(userInfo);
    sessionId = site.CreateSession();
    }
    catch(MgException ex)
    {
    Response.Write(ex.GetMessage());
    Response.Write(ex.GetDetails());
    }
    finally
    {
    }

    %>
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

    <
    html xmlns="http://www.w3.org/1999/xhtml" >
    <
    head>
    <
    title>Exercise 4</title>
    </
    head>
    <
    frameset rows="100,*" border="0" framespacing="0">
    <
    frame src = "title.htm" />
    <
    frame src="/mapguide2010/mapviewernet/ajaxviewer.aspx?SESSION=<%= sessionId %>&WEBLAYOUT=<%= webLayout %>" name="ViewerFrame" />
    </
    frameset>
    </
    html>

    这里我们着重看下面<frame>部分,注意到我们使用到了SESSION 和 WEBLAYOUT两个参数。那么在Ajax View中,除了这两个常用参数外,还有没有别的参数可用呢?

    关于Ajax Viewer所接受的参数目前还没有文档说明哪些可用怎么用,不过MapGuide的一个特点就是开源,我们可用通过他的源代码来窥探它内部的秘密。打开C:\Program Files\Autodesk\MapGuideEnterprise2010\WebServerExtensions\www\mapviewernet\mainframe.aspx 转达594行,在函数GetParameters中掐头去尾我们看下面的代码:

        webLayoutDefinition = parameters["WEBLAYOUT"];
    String localeParam = parameters["LOCALE"];
    if (localeParam != null && localeParam.Length > 0)
    {
    locale = localeParam;
    }
    else
    {
    locale = GetDefaultLocale();
    }
    sessionId = parameters[
    "SESSION"];
    if (sessionId != null && sessionId.Length > 0)
    {
    sessionId = parameters[
    "SESSION"];
    orgSessionId = sessionId;
    }
    else
    {
    username = parameters[
    "USERNAME"];
    if (null != username && username.Length > 0)
    {
    password = parameters[
    "PASSWORD"];
    if (null == password)
    {
    password =
    "";
    }
    return;
    }


    分析上面的代码,我们可以知道 Ajax Viewer中可收的参数除了我们常用的Session和Weblayout外,还有几个,他们是:
    LOCALE
    USERNAME
    PASSWORD

    那么同样的道理,那Fusion中的情况呢? 我们还是先看看Fusion Viewer的一般用法。新建一个普通的aspx页面,在Page_Load中写如下代码:

    public partial class _Default : System.Web.UI.Page
    {
    protected void Page_Load(object sender, EventArgs e)
    {
    string webLayout = "Library://Samples/Sheboygan/Layouts/TestFlex.ApplicationDefinition";
    string defaultUser = "Administrator";
    string defaultPassword = "admin";
    try
    {
    MapGuideApi.MgInitializeWebTier(@"C:\Program Files\Autodesk\MapGuideEnterprise2010\WebServerExtensions\www\webconfig.ini");

    MgUserInformation userInfo = new MgUserInformation(defaultUser, defaultPassword);
    MgSite site = new MgSite();
    site.Open(userInfo);
    string sessionId = site.CreateSession();
    Response.Write(
    "<script>alert('" + sessionId + "');</script>");

    Response.Redirect(
    "http://localhost/mapguide2010/fusion/templates/mapguide/slate/index.html?ApplicationDefinition=" + webLayout + "&Session=" + sessionId);
    }
    catch (Exception ex)
    {
    Response.Write(ex.Message);
    }
    }
    }

    这里注意到我们的Fusion Viewer可接受的参数为ApplicationDefinition和Session, 那么除此以外还有没有别的呢?如果没有为什么是这两个而不是其他的呢?我们还是要在代码里看看一下就明白了。

    打开C:\Program Files\Autodesk\MapGuideEnterprise2010\WebServerExtensions\www\fusion\lib\fusion.js,第227行左右

    initialize : function(options) {
    options = options || {};
    var sessionIdParam = this.getQueryParam('Session');
    this.sessionId = sessionIdParam || (options.sessionId || null);

    if (options.applicationDefinitionURL) {
    this.applicationDefinitionURL = options.applicationDefinitionURL;
    }
    else {
    var queryAppDef = this.getQueryParam('ApplicationDefinition'); if (queryAppDef) {
    this.applicationDefinitionURL = queryAppDef.split('+').join(' ');
    this.appDefJson = null; //wipe out any preloaded AppDef in a single file build
    } else {
    this.applicationDefinitionURL = 'ApplicationDefinition.xml';
    }
    }

    注意看上面的黑体代码,可以得知,我们所需要的两个参数正是在这里被接受的。

    好了,MapGuide OpenSource 代码很多,还有很多很多更好玩的东西需要你去发现,以前来研究吧。

    作者:峻祁连
    邮箱:junqilian@163.com
    出处:http://junqilian.cnblogs.com
    转载请保留此信息。
  • 相关阅读:
    windows下python3.6环境搭建
    接口自动化(2)----如何编写接口自动化用例
    关于接口自动化测试的规则说明
    linux 常用命令 补充
    linux 常用命令
    linux 初识
    java高级教程 JDK代理和CGLIB代理两种方式 账户类
    java高级教程 实例化和非实例化 bean 学生信息
    java高级教程 俩数之和
    C++使用printf输出string类
  • 原文地址:https://www.cnblogs.com/junqilian/p/1591182.html
Copyright © 2011-2022 走看看