tapestry url 解析

本文介绍了Engineservice对象如何通过实现IEngineService接口来处理应用URL,详细解析了DirectServiceEncoder如何从URL中提取关键信息如PAGE、COMPONENT及SERVICE,并通过IRequestCycle进行请求周期管理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Engine service是实现了IEngineService接口的对象,他包含很多创建和服务应用URL的方法;其主要方法public void service(WebRequest request, WebResponse response)
cycle = _infrastructure.getRequestCycleFactory().newRequestCycle(this); 获得RequestCycle
service = cycle.getService();
// Let the service handle the rest of the request.
service.service(cycle);


其中newRequestCycle(this) 就是对url 路径的解析处理

public IRequestCycle newRequestCycle(IEngine engine)
{
WebRequest request = _infrastructure.getRequest();

QueryParameterMap parameters = extractParameters(request);//常规处理request参数

decodeParameters(request.getActivationPath(), request.getPathInfo(), parameters);//调用encoders 来解析路径,例如DirectServiceEncoder,就解析出PAGE,extension,COMPONENT等信息
//对于DirectServiceEncoder encoding.setParameterValue(ServiceConstants.SERVICE,
Tapestry.DIRECT_SERVICE); DIRECT_SERVICE名称在此类是固定值
String serviceName = findService(parameters);

IRequestCycle cycle = new RequestCycle(engine, parameters, serviceName, _environment);

_requestGlobals.store(cycle);

try {

_requestGlobals.store(_responseDelegateFactory.getResponseBuilder(cycle));

cycle.setResponseBuilder(_requestGlobals.getResponseBuilder());

} catch (IOException e) {
throw new ApplicationRuntimeException("Error creating response builder.", e);
}

return cycle;
}


从而得出Direct路径格式 /PageName,componetIdPath.ext?otherParam
PageServiceEncoder: /PageName.ext
AssetEncoder: String fullPath = _path + ((digest != null) ? "/" + digest : "/" + DIGEST_STATIC) + path; 即 /static/path

ServiceExtensionEncoder: encoding.setServletPath("/" + service + "." + _extension);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值