com.bastengao.struts2.freeroute
类 DefaultRouteMappingHandler

java.lang.Object
  继承者 com.bastengao.struts2.freeroute.DefaultRouteMappingHandler
所有已实现的接口:
RouteMappingHandler

public class DefaultRouteMappingHandler
extends Object
implements RouteMappingHandler

处理所有的路由信息

可将 mapping 分成两种,一种是静态的 直接通过 Map 就可以快速找到路由; 另一种是有 pathVariable 的,需要通过正则匹配查找路由

从以下版本开始:
1.0
作者:
bastengao

字段摘要
private  Map<String,RouteMapping> actionConfig2RouteMapping
          action 信息映射到对应的路由

"{packageName}{actionName}" => RouteMapping

private  com.google.common.collect.ArrayListMultimap<String,RouteMapping> dynamicRoutes
          routePath 中包括 pathVariable 中的路由映射
private  List<Pattern> dynamicRoutesPatterns
           
private static org.slf4j.Logger log
           
private  com.google.common.collect.ArrayListMultimap<String,RouteMapping> staticRoutes
          静态路由
 
构造方法摘要
DefaultRouteMappingHandler()
           
 
方法摘要
private  RouteMapping findDynamicMaxWeight(javax.servlet.http.HttpServletRequest request, List<RouteMapping> routeMappings)
          找出路径变量最少的,然后再比较权重
private  RouteMapping findMaxWeight(javax.servlet.http.HttpServletRequest request, List<RouteMapping> routeMappings)
          根据已经匹配 servletPath 的路由集合找出最匹配的路由, 如果没有返回 null

指定 method 的要比不指定 method 的权重高 -> 1001 > 1000 params 多的要比 params 少的权重高 -> 8 > 2 params 匹配但没有指定 method 要比 指定 method 但没有 params 的权重高 -> 1002 > 10001

未指定 method 权重 1000 指定 method 权重 1001 params 权重一个 2

private static Set<String> paramNames(javax.servlet.http.HttpServletRequest request)
          返回请求中有的参数名称
 void put(RouteMapping routeMapping, com.opensymphony.xwork2.config.entities.ActionConfig actionCfg)
          按照静态路由和动态路由分别放到两个集合中
 RouteMapping route(com.opensymphony.xwork2.config.entities.ActionConfig actionConfig)
          根据 action 信息返回对应的路由
 RouteMapping route(javax.servlet.http.HttpServletRequest request)
          根据请求返回对应的路由映射, 如果没有返回 null
private static int weightOfMethod(javax.servlet.http.HttpServletRequest request, RouteMapping routeMapping)
          返回 method 的权重,如果不匹配返回 -1 如果没有指定则为 1000, 其他为 1001
private static int weightOfParams(javax.servlet.http.HttpServletRequest request, RouteMapping routeMapping)
          返回 params 的权重.
private static int weightOfRoute(javax.servlet.http.HttpServletRequest request, RouteMapping routeMapping)
          返回请求与匹配的路由的权重.
 
从类 java.lang.Object 继承的方法
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

字段详细信息

log

private static final org.slf4j.Logger log

staticRoutes

private com.google.common.collect.ArrayListMultimap<String,RouteMapping> staticRoutes
静态路由


dynamicRoutes

private com.google.common.collect.ArrayListMultimap<String,RouteMapping> dynamicRoutes
routePath 中包括 pathVariable 中的路由映射


dynamicRoutesPatterns

private List<Pattern> dynamicRoutesPatterns

actionConfig2RouteMapping

private Map<String,RouteMapping> actionConfig2RouteMapping
action 信息映射到对应的路由

"{packageName}{actionName}" => RouteMapping

构造方法详细信息

DefaultRouteMappingHandler

public DefaultRouteMappingHandler()
方法详细信息

put

public void put(RouteMapping routeMapping,
                com.opensymphony.xwork2.config.entities.ActionConfig actionCfg)
按照静态路由和动态路由分别放到两个集合中

指定者:
接口 RouteMappingHandler 中的 put
参数:
routeMapping -
actionCfg -

route

public RouteMapping route(com.opensymphony.xwork2.config.entities.ActionConfig actionConfig)
从接口 RouteMappingHandler 复制的描述
根据 action 信息返回对应的路由

指定者:
接口 RouteMappingHandler 中的 route
返回:

route

public RouteMapping route(javax.servlet.http.HttpServletRequest request)
从接口 RouteMappingHandler 复制的描述
根据请求返回对应的路由映射, 如果没有返回 null

指定者:
接口 RouteMappingHandler 中的 route
返回:

findDynamicMaxWeight

private RouteMapping findDynamicMaxWeight(javax.servlet.http.HttpServletRequest request,
                                          List<RouteMapping> routeMappings)
找出路径变量最少的,然后再比较权重

参数:
request -
routeMappings -
返回:

findMaxWeight

private RouteMapping findMaxWeight(javax.servlet.http.HttpServletRequest request,
                                   List<RouteMapping> routeMappings)
根据已经匹配 servletPath 的路由集合找出最匹配的路由, 如果没有返回 null

指定 method 的要比不指定 method 的权重高 -> 1001 > 1000 params 多的要比 params 少的权重高 -> 8 > 2 params 匹配但没有指定 method 要比 指定 method 但没有 params 的权重高 -> 1002 > 10001

未指定 method 权重 1000 指定 method 权重 1001 params 权重一个 2

参数:
request -
routeMappings -
返回:

weightOfRoute

private static int weightOfRoute(javax.servlet.http.HttpServletRequest request,
                                 RouteMapping routeMapping)
返回请求与匹配的路由的权重. 如果不匹配返回小于 0 的值,如果匹配返回权重值。 其中 method 的权重比 param 权重高 weight = method(GET, POST, PUT, DELETE) * 1001 + param * 2 weight = method( NONE ) * 1000 + param * 2

参数:
request -
routeMapping -
返回:

weightOfMethod

private static int weightOfMethod(javax.servlet.http.HttpServletRequest request,
                                  RouteMapping routeMapping)
返回 method 的权重,如果不匹配返回 -1 如果没有指定则为 1000, 其他为 1001

参数:
request -
routeMapping -
返回:

weightOfParams

private static int weightOfParams(javax.servlet.http.HttpServletRequest request,
                                  RouteMapping routeMapping)
返回 params 的权重. 如果不匹配返回 -1 params 权重一个2, 如果完成匹配返回 params.length * 2

参数:
request -
routeMapping -
返回:

paramNames

private static Set<String> paramNames(javax.servlet.http.HttpServletRequest request)
返回请求中有的参数名称

参数:
request -
返回:


Copyright © 2013 bastengao. All Rights Reserved.