SoulSkip 2014-09-02 13:15 采纳率: 0%
浏览 2160

我在读取Struts2源码的时候,不了解ActionMapper怎样读取通配符的?

在读取Struts2源码的时候~
public ActionMapping getMapping(HttpServletRequest request, ConfigurationManager configManager) {
ActionMapping mapping = new ActionMapping();
String uri = RequestUtils.getUri(request);

    int indexOfSemicolon = uri.indexOf(";");
    uri = (indexOfSemicolon > -1) ? uri.substring(0, indexOfSemicolon) : uri;
    //去掉后缀
    uri = dropExtension(uri, mapping);
    if (uri == null) {
        return null;
    }
     //解析出方法名和命名空间
    parseNameAndNamespace(uri, mapping, configManager);
    //处理特殊的传递的参数,清除最后以。x或者。y作为后缀的属性,这个是为什么。难道是敏感词么?
    handleSpecialParameters(request, mapping);
    //最后返回过滤好的action的一些信息~这样的话,就能获取到Action的名称方法
    return parseActionName(mapping);
}

protected ActionMapping parseActionName(ActionMapping mapping) {
if (mapping.getName() == null) {
return null;
}
//这个的意思是获取index!getindex.action的时候获取Action 的名称与方法
//现在我想问一下如果是通配符的时候怎样处理呢?
//难道是需要通过读取struts.xml文件然后需找规律
if (allowDynamicMethodCalls) {
// handle "name!method" convention.
String name = mapping.getName();
int exclamation = name.lastIndexOf("!");
if (exclamation != -1) {
mapping.setName(name.substring(0, exclamation));

            mapping.setMethod(name.substring(exclamation + 1));
        }
    }
    return mapping;
}

****这个方法是解决 index!getindex.action的时候获取Action 的名称与方法的方法
但是如果配置文件中如果是
action name="user_*" class="com.test.action.UserAction" method="{1}">
/user_{1}.jsp

这样的情况下呢?怎样获取action 与MethodName呢?****

  • 写回答

2条回答

  • SoulSkip 2014-09-03 07:24
    关注

    我自己找到了答案了~自己回复~

    评论

报告相同问题?

悬赏问题

  • ¥15 电力市场出清matlab yalmip kkt 双层优化问题
  • ¥30 ros小车路径规划实现不了,如何解决?(操作系统-ubuntu)
  • ¥20 matlab yalmip kkt 双层优化问题
  • ¥15 如何在3D高斯飞溅的渲染的场景中获得一个可控的旋转物体
  • ¥88 实在没有想法,需要个思路
  • ¥15 MATLAB报错输入参数太多
  • ¥15 python中合并修改日期相同的CSV文件并按照修改日期的名字命名文件
  • ¥15 有赏,i卡绘世画不出
  • ¥15 如何用stata画出文献中常见的安慰剂检验图
  • ¥15 c语言链表结构体数据插入