📄 defaultactionmapper.java
字号:
// Decompiled by Jad v1.5.8e2. Copyright 2001 Pavel Kouznetsov.
// Jad home page: http://kpdus.tripod.com/jad.html
// Decompiler options: packimports(3) fieldsfirst ansi space
// Source File Name: DefaultActionMapper.java
package org.apache.struts2.dispatcher.mapper;
import com.opensymphony.xwork2.config.Configuration;
import com.opensymphony.xwork2.config.ConfigurationManager;
import com.opensymphony.xwork2.config.entities.PackageConfig;
import com.opensymphony.xwork2.inject.Container;
import java.util.*;
import javax.servlet.http.HttpServletRequest;
import org.apache.struts2.RequestUtils;
import org.apache.struts2.dispatcher.ServletRedirectResult;
import org.apache.struts2.util.PrefixTrie;
// Referenced classes of package org.apache.struts2.dispatcher.mapper:
// ActionMapping, ActionMapper
public class DefaultActionMapper
implements ActionMapper
{
static interface ParameterAction
{
public abstract void execute(String s, ActionMapping actionmapping);
}
static final String METHOD_PREFIX = "method:";
static final String ACTION_PREFIX = "action:";
static final String REDIRECT_PREFIX = "redirect:";
static final String REDIRECT_ACTION_PREFIX = "redirect-action:";
private boolean allowDynamicMethodCalls;
private boolean allowSlashesInActionNames;
private boolean alwaysSelectFullNamespace;
private PrefixTrie prefixTrie;
List extensions;
private Container container;
public DefaultActionMapper()
{
allowDynamicMethodCalls = true;
allowSlashesInActionNames = false;
alwaysSelectFullNamespace = false;
prefixTrie = null;
extensions = new ArrayList() {
final DefaultActionMapper this$0;
{
this$0 = DefaultActionMapper.this;
super();
add("action");
}
};
prefixTrie = new 2();
}
public void setAllowDynamicMethodCalls(String allow)
{
allowDynamicMethodCalls = "true".equals(allow);
}
public void setSlashesInActionNames(String allow)
{
allowSlashesInActionNames = "true".equals(allow);
}
public void setAlwaysSelectFullNamespace(String val)
{
alwaysSelectFullNamespace = "true".equals(val);
}
public void setContainer(Container container)
{
this.container = container;
}
public ActionMapping getMapping(HttpServletRequest request, ConfigurationManager configManager)
{
ActionMapping mapping = new ActionMapping();
String uri = getUri(request);
uri = dropExtension(uri);
if (uri == null)
return null;
parseNameAndNamespace(uri, mapping, configManager);
handleSpecialParameters(request, mapping);
if (mapping.getName() == null)
return null;
if (allowDynamicMethodCalls)
{
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;
}
public void handleSpecialParameters(HttpServletRequest request, ActionMapping mapping)
{
Set uniqueParameters = new HashSet();
Map parameterMap = request.getParameterMap();
Iterator iterator = parameterMap.keySet().iterator();
do
{
if (!iterator.hasNext())
break;
String key = (String)iterator.next();
if (key.endsWith(".x") || key.endsWith(".y"))
key = key.substring(0, key.length() - 2);
if (uniqueParameters.contains(key))
continue;
ParameterAction parameterAction = (ParameterAction)prefixTrie.get(key);
if (parameterAction == null)
continue;
parameterAction.execute(key, mapping);
uniqueParameters.add(key);
break;
} while (true);
}
void parseNameAndNamespace(String uri, ActionMapping mapping, ConfigurationManager configManager)
{
int lastSlash = uri.lastIndexOf("/");
String namespace;
String name;
if (lastSlash == -1)
{
namespace = "";
name = uri;
} else
if (lastSlash == 0)
{
namespace = "/";
name = uri.substring(lastSlash + 1);
} else
if (alwaysSelectFullNamespace)
{
namespace = uri.substring(0, lastSlash);
name = uri.substring(lastSlash + 1);
} else
{
Configuration config = configManager.getConfiguration();
String prefix = uri.substring(0, lastSlash);
namespace = "";
Iterator i = config.getPackageConfigs().values().iterator();
do
{
if (!i.hasNext())
break;
String ns = ((PackageConfig)i.next()).getNamespace();
if (ns != null && prefix.startsWith(ns) && (prefix.length() == ns.length() || prefix.charAt(ns.length()) == '/') && ns.length() > namespace.length())
namespace = ns;
} while (true);
name = uri.substring(namespace.length() + 1);
}
if (!allowSlashesInActionNames && name != null)
{
int pos = name.lastIndexOf('/');
if (pos > -1 && pos < name.length() - 1)
name = name.substring(pos + 1);
}
mapping.setNamespace(namespace);
mapping.setName(name);
}
String dropExtension(String name)
{
if (extensions == null)
return name;
for (Iterator it = extensions.iterator(); it.hasNext();)
{
String extension = (new StringBuilder()).append(".").append((String)it.next()).toString();
if (name.endsWith(extension))
{
name = name.substring(0, name.length() - extension.length());
return name;
}
}
return null;
}
String getDefaultExtension()
{
if (extensions == null)
return null;
else
return (String)extensions.get(0);
}
public void setExtensions(String extensions)
{
if (!"".equals(extensions))
this.extensions = Arrays.asList(extensions.split(","));
else
this.extensions = null;
}
String getUri(HttpServletRequest request)
{
String uri = (String)request.getAttribute("javax.servlet.include.servlet_path");
if (uri != null)
return uri;
uri = RequestUtils.getServletPath(request);
if (uri != null && !"".equals(uri))
{
return uri;
} else
{
uri = request.getRequestURI();
return uri.substring(request.getContextPath().length());
}
}
public String getUriFromActionMapping(ActionMapping mapping)
{
StringBuffer uri = new StringBuffer();
uri.append(mapping.getNamespace());
if (!"/".equals(mapping.getNamespace()))
uri.append("/");
String name = mapping.getName();
String params = "";
if (name.indexOf('?') != -1)
{
params = name.substring(name.indexOf('?'));
name = name.substring(0, name.indexOf('?'));
}
uri.append(name);
if (null != mapping.getMethod() && !"".equals(mapping.getMethod()))
uri.append("!").append(mapping.getMethod());
String extension = getDefaultExtension();
if (extension != null && uri.indexOf((new StringBuilder()).append('.').append(extension).toString()) == -1)
{
uri.append(".").append(extension);
if (params.length() > 0)
uri.append(params);
}
return uri.toString();
}
public boolean isSlashesInActionNames()
{
return allowSlashesInActionNames;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -