⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 defaultactionmapper.java

📁 struts 2 核心包 的源码 有错误是难免的
💻 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 + -