注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

和申的个人主页

专注于java开发,1985wanggang

 
 
 

日志

 
 

Webx框架之服务简介(2)----URL生成篇  

2012-01-03 21:18:36|  分类: WebX |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

4.URIBroker的种类和配置

4.1.URIBroker

URIBroker定义了一个标准的URL中的所有部件:
http    ://    user    :    pass    @    myserver.com    :    8080    /view    ?    id=1    #    top    
│        │        │        │        │    │        │        └─    reference、引用标记
│        │        │        │        │    │        └─────    queryData、参数
│        │        │        │        │    └─────────    path、路径
│        │        │        │        └────────────    serverPort、服务器端口
│        │        │        └─────────────────────    serverName、服务器名
│        │        └──────────────────────────    loginPassword、用户密码
│        └───────────────────────────────    loginUser、用户名
└────────────────────────────────────    scheme、协议
在配置文件中,<uri>定义了一个URIBroker对象:
<uri name="myURL" expose="true">
    <scheme>http</scheme>
    <serverName>localhost</serverName>
    <serverPort>8080</serverPort>
    <path>/xxx/yyy</path>
</uri>
为了简单起见,上面这段配置可以简写成:
<uri name="myURL" expose="true">
    <serverURI>http://localhost:8080/xxx/yyy</serverURI>
</uri>
你可以在程序里使用它,例如:
URIBroker broker = getURIBrokerService().getURIBroker("myURL", rundata);
broker.addQueryData("id", "baobao");
你也可以在模板中使用它,例如:
$myURL.addQueryData("id", $user.id)
4.2.ServletURIBroker
ServletURIBroker是从URIBroker派生的,因此前述URIBroker的使用方法同样适用于ServletURIBroker。但是ServletURIBroker针对Java Web应用扩展了标准URL的path部分:
http://user:pass@myserver.com:8080
/myapp    /myservlet    /xxx/yyy    ?id=1#top    
│    │    │    │    └───    同URIBroker
│    │    │    └────────    path、path的剩余部分
│    │    └──────────────    servletPath、代表servlet映射
│    └──────────────────    contextPath、代表WEB应用
└───────────────────────────────────    同URIBroker
在配置文件中,<servlet-uri>定义了一个ServletURIBroker对象。
<servlet-uri name="myURL">
    <contextPath>/myapp</contextPath>
    <servletPath>/myservlet</servletPath>
    <path>/xxx/yyy</path>
</servlet-uri>
你可以在程序里使用它,例如:
ServletURIBroker broker = (ServletURIBroker) getURIBrokerService().getURIBroker("myURL", rundata);
broker.setContextPath("/myapp");
你也可以在模板中使用它,例如:
$myURL.setContextPath("/myapp")
4.3.TurbineURIBroker
TurbineURIBroker又在ServletURIBroker的基础上,扩展了其path部分:
http://user:pass@myserver.com:8080/myapp/myservlet
/mycar    /target    /xxx/yyy    ?id=1#top    
│    │    │    │    └───    同URIBroker
│    │    │    └────────    path、path的剩余部分
│    │    └────────────    target,代表执行目标
│    └────────────────    componentPath、代表car
└────────────────────────────────────────    同ServletURIBroker
在配置文件中,<turbine-uri>定义了一个TurbineURIBroker对象。
<turbine-uri name="myURL">
    <contextPath>/myapp</contextPath>
    <componentPath>/mycar</componentPath>
    <target>viewUser.vm</target>
</turbine-uri>
你可以在程序里使用它,例如:
TurbineURIBroker broker = (TurbineURIBroker) getURIBrokerService().getURIBroker("myURL", rundata);
broker.setContextPath("/myapp");
broker.setComponentPath("/mycar");
broker.setTarget("viewUser.vm");
你也可以在模板中使用它,例如:
$myURL.setTarget("viewUser.vm")
4.4.其它URIBroker
其实,所有的URIBroker的用法都差不多。它们的类层次结构如下,右边是其在配置文件中对应的标签。
类层次    配置文件中,对应的标签
URIBroker    <uri>
├── ContentURIBroker    <content-uri>
└── ServletURIBroker    <servlet-uri>
        ├── ServletContentURIBroker    <servlet-content-uri>
        ├── TurbineClassicURIBroker    <turbine-classic-uri>
        └── WebxURIBroker    
               ├── TurbineURIBroker    <turbine-uri>
               └── TurbineContentURIBroker    <turbine-content-uri>
你可以通过某个URIBroker及其子类的文档,以及API接口,了解这种URIBroker的用法。
另外,你也可以参考URIBrokerService的文档,来更深入和详细地了解URIBrokerService以及URIBroker。
5.URL的解析

和生成URL相反的过程,就是URL的解析。如前所述,URL的解析是通过Java Servet容器(即应用服务器)和AnalyseURLValve配合,共同完成的。

URL的解析过程中,我们还做了一些特殊的转换。

5.1.Target后缀转换

假如我们的URL为:http://localhost:8080/workshop/hello.htm,那么我们将得到值为hello.vmtarget。当你使用URIBroker输出hello.vm这个target时,它又会被转换成hello.htm。这种双向的转换确保了:

5.1.1.        URL的后缀可随意更换。这种定制不会影响到应用程序或模板。

5.1.2.        应用程序或模板中,永远使用target后缀(这里是.vm),而不需要了解URL的后缀。

事实上,这个映射是由MappingService来完成的。除了htm óvm的转换,我们还预定义了好几种后缀。

URL后缀

 

Target后缀

说明

php(正式)

?

jhtml

php

通常代表JSP模板

ó

jsp(正式)

jhtml

jsp

?

htm(正式)

?

vhtml

htm

通常代表Velocity模板

ó

vm(正式)

vhtml

vm

?

其它后缀或无后缀

ó

不改变

例如:*.do ó*.do

5.2.大小写转换

为了提高兼容性,我们对URLQuery参数按照一定的规则进行大小写转换。

下面是URL的转换规则:

URL
  
lower case with underscore

 

Target
  
camel case

模板名
  
camel case

类名
  
pascal case

/view_user.*

ó

/viewUser.*

/viewUser.*

ViewUser

/viewUser.*

/ViewUser.*

/VIEW_USER.*

/viewUSER.*

?

下面是query参数的转换规则:

Query参数
  
lower case with underscore

 

Request.getParameter
  
camel case

user_id=123(正式)

userId=123

UserId=123

USER_ID=123

userID=123

?

request.getParameter("user_id") == "123"

request.getParameter("userId") == "123"(正式)

request.getParameter("UserId") == "123"

request.getParameter("USER_ID") == "123"

request.getParameter("userID") == "123"

注意,在Webx中,rundata.getParameters().getString()等同于request.getParameter()

5.3.定制URL

有时,因为种种原因,需要对URL进行定制。例如:

5.3.1.        为了兼容老系统。

5.3.2.        为了让URL对搜索引擎更友好。

Webx支持对URL进行定制。定制URL分为两方面:定制URIBroker、定制URL的解析。这两方面必须是统一的。

在本文示例中,我们不打算详细讲解这方面的内容。我们将在另外的文章中详细解释URL的定制。

摘自:http://hi.baidu.com/274084093/blog/item/0d3bf3ed1640f05b78f0559d.html

  评论这张
 
阅读(2160)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2016