public ActionMapping getMapping(HttpServletRequest request, ConfigurationManager configManager)
{
ActionMapping mapping = new ActionMapping();
String uri = getUri(request);//得到请求路径的URI,如:testAction.action或testAction!method
uri= dropExtension(uri);//删除扩展名,默认扩展名为action,在代码中的定义是List extensions = new ArrayList(){{add("action");}};
if(uri== null){
return null;
}
parseNameAndNamespace(uri,mapping,configManager);//从uri变量中解析出Action的name和namespace
handleSpecialParameters(request,mapping);//将请求参数中的重复项去掉
//如果Action的name没有解析出来,直接返回
if(mapping.getName() == null){
return null;
}
//下面处理形如testAction!method格式的请求路径
if(allowDynamicMethoCalls)
//handle "name!method" convention
String name = mapping .getName();
int exclamation - name.lastIndexOf("!");//!是Action名称和方法名的分隔符
if(exclamation!=-1)
{
mapping.setName(name.substring(0,exclamation));//提取左边为name
mapping.setMethod(name.substring(exclamation+1));
}
return mapping;
}