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

📄 url.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:   URL.java

package org.apache.struts2.components;

import com.opensymphony.xwork2.util.ValueStack;
import java.io.IOException;
import java.io.Writer;
import java.util.*;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.struts2.StrutsException;
import org.apache.struts2.dispatcher.Dispatcher;
import org.apache.struts2.portlet.context.PortletActionContext;
import org.apache.struts2.portlet.util.PortletUrlHelper;
import org.apache.struts2.views.util.UrlHelper;

// Referenced classes of package org.apache.struts2.components:
//			Component

public class URL extends Component
{
	public static interface ExtraParameterProvider
	{

		public abstract Map getExtraParameters();
	}


	private static final Log LOG = LogFactory.getLog(org/apache/struts2/components/URL);
	public static final String NONE = "none";
	public static final String GET = "get";
	public static final String ALL = "all";
	private HttpServletRequest req;
	private HttpServletResponse res;
	protected String includeParams;
	protected String scheme;
	protected String value;
	protected String action;
	protected String namespace;
	protected String method;
	protected boolean encode;
	protected boolean includeContext;
	protected boolean escapeAmp;
	protected String portletMode;
	protected String windowState;
	protected String portletUrlType;
	protected String anchor;
	protected boolean forceAddSchemeHostAndPort;
	protected String urlIncludeParams;
	protected ExtraParameterProvider extraParameterProvider;

	public URL(ValueStack stack, HttpServletRequest req, HttpServletResponse res)
	{
		super(stack);
		encode = true;
		includeContext = true;
		escapeAmp = true;
		this.req = req;
		this.res = res;
	}

	public void setUrlIncludeParams(String urlIncludeParams)
	{
		this.urlIncludeParams = urlIncludeParams;
	}

	public void setExtraParameterProvider(ExtraParameterProvider provider)
	{
		extraParameterProvider = provider;
	}

	public boolean start(Writer writer)
	{
		boolean result = super.start(writer);
		if (value != null)
			value = findString(value);
		try
		{
			String includeParams = urlIncludeParams == null ? "get" : urlIncludeParams.toLowerCase();
			if (this.includeParams != null)
				includeParams = findString(this.includeParams);
			if ("none".equalsIgnoreCase(includeParams))
				mergeRequestParameters(value, parameters, Collections.EMPTY_MAP);
			else
			if ("all".equalsIgnoreCase(includeParams))
			{
				mergeRequestParameters(value, parameters, req.getParameterMap());
				includeGetParameters();
				includeExtraParameters();
			} else
			if ("get".equalsIgnoreCase(includeParams) || includeParams == null && value == null && action == null)
			{
				includeGetParameters();
				includeExtraParameters();
			} else
			if (includeParams != null)
				LOG.warn((new StringBuilder()).append("Unknown value for includeParams parameter to URL tag: ").append(includeParams).toString());
		}
		catch (Exception e)
		{
			LOG.warn((new StringBuilder()).append("Unable to put request parameters (").append(req.getQueryString()).append(") into parameter map.").toString(), e);
		}
		return result;
	}

	private void includeExtraParameters()
	{
		if (extraParameterProvider != null)
			mergeRequestParameters(value, parameters, extraParameterProvider.getExtraParameters());
	}

	private void includeGetParameters()
	{
		if (!Dispatcher.getInstance().isPortletSupportActive() || !PortletActionContext.isPortletRequest())
		{
			String query = extractQueryString();
			mergeRequestParameters(value, parameters, UrlHelper.parseQueryString(query));
		}
	}

	private String extractQueryString()
	{
		String query = req.getQueryString();
		if (query == null)
			query = (String)req.getAttribute("javax.servlet.forward.query_string");
		if (query != null)
		{
			int idx = query.lastIndexOf('#');
			if (idx != -1)
				query = query.substring(0, idx);
		}
		return query;
	}

	public boolean end(Writer writer, String body)
	{
		String scheme = req.getScheme();
		if (this.scheme != null)
			scheme = this.scheme;
		String result;
		if (value == null && action != null)
		{
			if (Dispatcher.getInstance().isPortletSupportActive() && PortletActionContext.isPortletRequest())
				result = PortletUrlHelper.buildUrl(action, namespace, method, parameters, portletUrlType, portletMode, windowState);
			else
				result = determineActionURL(action, namespace, method, req, res, parameters, scheme, includeContext, encode, forceAddSchemeHostAndPort, escapeAmp);
		} else
		if (Dispatcher.getInstance().isPortletSupportActive() && PortletActionContext.isPortletRequest())
		{
			result = PortletUrlHelper.buildResourceUrl(value, parameters);
		} else
		{
			String _value = value;
			if (_value != null && _value.indexOf("?") > 0)
				_value = _value.substring(0, _value.indexOf("?"));
			result = UrlHelper.buildUrl(_value, req, res, parameters, scheme, includeContext, encode, forceAddSchemeHostAndPort, escapeAmp);
		}
		if (anchor != null && anchor.length() > 0)
			result = (new StringBuilder()).append(result).append('#').append(anchor).toString();
		String id = getId();
		if (id != null)
		{
			getStack().getContext().put(id, result);
			req.setAttribute(id, result);
		} else
		{
			try
			{
				writer.write(result);
			}
			catch (IOException e)
			{
				throw new StrutsException((new StringBuilder()).append("IOError: ").append(e.getMessage()).toString(), e);
			}
		}
		return super.end(writer, body);
	}

	public void setIncludeParams(String includeParams)
	{
		this.includeParams = includeParams;
	}

	public void setScheme(String scheme)
	{
		this.scheme = scheme;
	}

	public void setValue(String value)
	{
		this.value = value;
	}

	public void setAction(String action)
	{
		this.action = action;
	}

	public void setNamespace(String namespace)
	{
		this.namespace = namespace;
	}

	public void setMethod(String method)
	{
		this.method = method;
	}

	public void setEncode(boolean encode)
	{
		this.encode = encode;
	}

	public void setIncludeContext(boolean includeContext)
	{
		this.includeContext = includeContext;
	}

	public void setPortletMode(String portletMode)
	{
		this.portletMode = portletMode;
	}

	public void setWindowState(String windowState)
	{
		this.windowState = windowState;
	}

	public void setPortletUrlType(String portletUrlType)
	{
		this.portletUrlType = portletUrlType;
	}

	public void setAnchor(String anchor)
	{
		this.anchor = anchor;
	}

	public void setEscapeAmp(boolean escapeAmp)
	{
		this.escapeAmp = escapeAmp;
	}

	public void setForceAddSchemeHostAndPort(boolean forceAddSchemeHostAndPort)
	{
		this.forceAddSchemeHostAndPort = forceAddSchemeHostAndPort;
	}

	protected void mergeRequestParameters(String value, Map parameters, Map contextParameters)
	{
		Map mergedParams = new LinkedHashMap(contextParameters);
		if (value != null && value.trim().length() > 0 && value.indexOf("?") > 0)
		{
			mergedParams = new LinkedHashMap();
			String queryString = value.substring(value.indexOf("?") + 1);
			mergedParams = UrlHelper.parseQueryString(queryString);
			Iterator iterator = contextParameters.entrySet().iterator();
			do
			{
				if (!iterator.hasNext())
					break;
				java.util.Map.Entry entry = (java.util.Map.Entry)iterator.next();
				Object key = entry.getKey();
				if (!mergedParams.containsKey(key))
					mergedParams.put(key, entry.getValue());
			} while (true);
		}
		Iterator iterator = mergedParams.entrySet().iterator();
		do
		{
			if (!iterator.hasNext())
				break;
			java.util.Map.Entry entry = (java.util.Map.Entry)iterator.next();
			Object key = entry.getKey();
			if (!parameters.containsKey(key))
				parameters.put(key, entry.getValue());
		} while (true);
	}

}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -