【问题标题】:Anatomy of G-WAN URI servletsG-WAN URI servlet 剖析
【发布时间】:2012-11-15 11:23:11
【问题描述】:

gwan/csp/strangesubfolder/inc.c可以通过http://domainName.com/strangesubfolder/?inc访问

我觉得这个servlet 映射很奇怪,但这符合我的需要。我在 gwan 用户手册中找不到映射描述。

如果我错了,请纠正我并确认这是否是预期的行为。

【问题讨论】:

    标签: servlets uri restful-url g-wan


    【解决方案1】:

    是的,这是一项标准功能。

    “?”告诉 G-WAN 它是一个 servlet。如果没有'?它将在 WWW 文件夹中查找文件。

    更新:

    现在我明白你的困惑了。

    自 3.3.27 版本以来,这已被更改,因此用户可以轻松地制作安静的 URL

    G-WAN timeline

    阅读 2012 年 3 月 27 日的更新。

    现在您需要放置“?”在实际的 servlet 名称之前。通过这样做,G-WAN 可以有效地将 '/' 重写为 '&',因此您无需编写任何代码就可以使用此类静态 URL。

    //Old way
    http://domain/?user/profile&user1
    http://domain/?blog/archive&2012&march
    
    //New way (more restful no '&')
    http://domain/user/?profile/user1
    http://domain/blog/?archive/2012/march
    

    【讨论】:

    • 我觉得奇怪的不是“?”,而是“奇怪的子文件夹”。据我了解,inc.c 应该通过 http://domainName.com/**?strangesubfolder/inc** 访问。但现在,它是 ...**/strangesubfolder/?inc**
    • 原来,strangesubfolder在csp下。但是现在,看 url,csp 在奇怪的子文件夹下。
    • 据我所知,".../?strangesubfolder/inc" 有不同的含义,即运行一个名为strangesubfolder.c 的C 脚本,GET 方法的输入参数为inc(= &inc)。
    • 如果是标准功能,我可以在 /csp 下放置多层子文件夹,然后通过 http://donaminName.com/sub1/sub2/.../subN/? cscript/para1=1/para2=2/.../paramN=N
    • 我更新了我的答案。是的,使用 ".../?strangesubfolder/inc" 将使 "inc" 成为 url 参数。
    【解决方案2】:

    是的,正如 Richard 正确(并且及时,感谢 Richard!)解释的那样,这是预期的行为。

    目录/gwan/.../csp/script.c 用于存储必须运行的servlet,而/gwan/.../www/script.c 用于存储旨在用作HTTP 资源的文件。

    对应的网址是GET /?script.cGET /script.c

    /csp/www 文件夹中使用的任何子目录都会相应地反映在 HTTP 请求中:GET /folder/?script.c 用于动态内容,GET /folder/script.c 用于静态内容。

    选择将'?' 查询字符(可以被其他字符替换)从旧的GET /csp?/folder/script.c 形式移动到新的GET /folder/?script.c 形式是出于以下需要:

    • 区分 servlet 名称和 folder 名称(请求可能缺少已定义的“默认”编程语言的 servlet 扩展,如果未定义,则为 C)
    • 在 HTTP 请求中允许任意数量的 sub-directories
    • 在 HTTP 查询中允许任意数量的 query arguments
    • 在 HTTP 请求中区分 foldersquery arguments
    • 使RESTFUL 在上述所有情况下的请求成为可能。

    我们花了一些时间才找到合适的功能组合,并尽量减少冗长,但经验表明这很有效。

    下面是一个既有子文件夹又有查询参数的 RESTFUL 查询示例:

    GET /folder/?script/arg1/value1/arg2/value2/arg3/value3

    默认情况下,这是一个 C 脚本,除非另一种语言(可用于编写脚本的 15 种语言中)已被定义为“默认”语言。

    请注意,下载存档中提供的 50 多个脚本示例说明了此方案,developers 页面上也提供了该方案。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多