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

📄 urlhelper.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:   UrlHelper.java

package org.apache.struts2.views.util;

import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.util.TextParseUtil;
import java.io.UnsupportedEncodingException;
import java.net.URLDecoder;
import java.net.URLEncoder;
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.ServletActionContext;

public class UrlHelper
{

	private static final Log LOG = LogFactory.getLog(org/apache/struts2/views/util/UrlHelper);
	private static final int DEFAULT_HTTP_PORT = 80;
	private static final int DEFAULT_HTTPS_PORT = 443;
	private static final String AMP = "&";
	private static int httpPort = 80;
	private static int httpsPort = 443;
	private static String customEncoding;

	public UrlHelper()
	{
	}

	public static void setHttpPort(String val)
	{
		httpPort = Integer.parseInt(val);
	}

	public static void setHttpsPort(String val)
	{
		httpsPort = Integer.parseInt(val);
	}

	public static void setCustomEncoding(String val)
	{
		customEncoding = val;
	}

	public static String buildUrl(String action, HttpServletRequest request, HttpServletResponse response, Map params)
	{
		return buildUrl(action, request, response, params, null, true, true);
	}

	public static String buildUrl(String action, HttpServletRequest request, HttpServletResponse response, Map params, String scheme, boolean includeContext, boolean encodeResult)
	{
		return buildUrl(action, request, response, params, scheme, includeContext, encodeResult, false);
	}

	public static String buildUrl(String action, HttpServletRequest request, HttpServletResponse response, Map params, String scheme, boolean includeContext, boolean encodeResult, boolean forceAddSchemeHostAndPort)
	{
		return buildUrl(action, request, response, params, scheme, includeContext, encodeResult, forceAddSchemeHostAndPort, true);
	}

	public static String buildUrl(String action, HttpServletRequest request, HttpServletResponse response, Map params, String scheme, boolean includeContext, boolean encodeResult, boolean forceAddSchemeHostAndPort, 
			boolean escapeAmp)
	{
		StringBuffer link = new StringBuffer();
		boolean changedScheme = false;
		if (forceAddSchemeHostAndPort)
		{
			String reqScheme = request.getScheme();
			changedScheme = true;
			link.append(scheme == null ? reqScheme : scheme);
			link.append("://");
			link.append(request.getServerName());
			if (scheme != null)
				if (!scheme.equals(reqScheme))
				{
					if (scheme.equals("http") && httpPort != 80 || scheme.equals("https") && httpsPort != 443)
					{
						link.append(":");
						link.append(scheme.equals("http") ? httpPort : httpsPort);
					}
				} else
				{
					int reqPort = request.getServerPort();
					if (scheme.equals("http") && reqPort != 80 || scheme.equals("https") && reqPort != 443)
					{
						link.append(":");
						link.append(reqPort);
					}
				}
		} else
		if (scheme != null && !scheme.equals(request.getScheme()))
		{
			changedScheme = true;
			link.append(scheme);
			link.append("://");
			link.append(request.getServerName());
			if (scheme.equals("http") && httpPort != 80 || scheme.equals("https") && httpsPort != 443)
			{
				link.append(":");
				link.append(scheme.equals("http") ? httpPort : httpsPort);
			}
		}
		if (action != null)
		{
			if (action.startsWith("/") && includeContext)
			{
				String contextPath = request.getContextPath();
				if (!contextPath.equals("/"))
					link.append(contextPath);
			} else
			if (changedScheme)
			{
				String uri = (String)request.getAttribute("javax.servlet.forward.request_uri");
				if (uri == null)
					uri = request.getRequestURI();
				link.append(uri.substring(0, uri.lastIndexOf('/') + 1));
			}
			link.append(action);
		} else
		{
			String requestURI = (String)request.getAttribute("struts.request_uri");
			if (requestURI == null)
				requestURI = (String)request.getAttribute("javax.servlet.forward.request_uri");
			if (requestURI == null)
				requestURI = request.getRequestURI();
			link.append(requestURI);
		}
		if (escapeAmp)
			buildParametersString(params, link);
		else
			buildParametersString(params, link, "&");
		String result;
		try
		{
			result = encodeResult ? response.encodeURL(link.toString()) : link.toString();
		}
		catch (Exception ex)
		{
			result = link.toString();
		}
		return result;
	}

	public static void buildParametersString(Map params, StringBuffer link)
	{
		buildParametersString(params, link, "&");
	}

	public static void buildParametersString(Map params, StringBuffer link, String paramSeparator)
	{
		if (params != null && params.size() > 0)
		{
			if (link.toString().indexOf("?") == -1)
				link.append("?");
			else
				link.append(paramSeparator);
			Iterator iter = params.entrySet().iterator();
			String valueHolder[] = new String[1];
			do
			{
				if (!iter.hasNext())
					break;
				java.util.Map.Entry entry = (java.util.Map.Entry)iter.next();
				String name = (String)entry.getKey();
				Object value = entry.getValue();
				String values[];
				if (value instanceof String[])
				{
					values = (String[])(String[])value;
				} else
				{
					valueHolder[0] = value.toString();
					values = valueHolder;
				}
				for (int i = 0; i < values.length; i++)
				{
					if (values[i] != null)
					{
						link.append(name);
						link.append('=');
						link.append(translateAndEncode(values[i]));
					}
					if (i < values.length - 1)
						link.append(paramSeparator);
				}

				if (iter.hasNext())
					link.append(paramSeparator);
			} while (true);
		}
	}

	public static String translateAndEncode(String input)
	{
		String translatedInput;
		String encoding;
		translatedInput = translateVariable(input);
		encoding = getEncodingFromConfiguration();
		return URLEncoder.encode(translatedInput, encoding);
		UnsupportedEncodingException e;
		e;
		LOG.warn((new StringBuilder()).append("Could not encode URL parameter '").append(input).append("', returning value un-encoded").toString());
		return translatedInput;
	}

	public static String translateAndDecode(String input)
	{
		String translatedInput;
		String encoding;
		translatedInput = translateVariable(input);
		encoding = getEncodingFromConfiguration();
		return URLDecoder.decode(translatedInput, encoding);
		UnsupportedEncodingException e;
		e;
		LOG.warn((new StringBuilder()).append("Could not encode URL parameter '").append(input).append("', returning value un-encoded").toString());
		return translatedInput;
	}

	private static String translateVariable(String input)
	{
		com.opensymphony.xwork2.util.ValueStack valueStack = ServletActionContext.getContext().getValueStack();
		String output = TextParseUtil.translateVariables(input, valueStack);
		return output;
	}

	private static String getEncodingFromConfiguration()
	{
		String encoding;
		if (customEncoding != null)
			encoding = customEncoding;
		else
			encoding = "UTF-8";
		return encoding;
	}

	public static Map parseQueryString(String queryString)
	{
		Map queryParams = new LinkedHashMap();
		if (queryString != null)
		{
			String params[] = queryString.split("&");
			for (int a = 0; a < params.length; a++)
			{
				if (params[a].trim().length() <= 0)
					continue;
				String tmpParams[] = params[a].split("=");
				String paramName = null;
				String paramValue = "";
				if (tmpParams.length > 0)
					paramName = tmpParams[0];
				if (tmpParams.length > 1)
					paramValue = tmpParams[1];
				if (paramName == null)
					continue;
				String translatedParamValue = translateAndDecode(paramValue);
				if (queryParams.containsKey(paramName))
				{
					Object currentParam = queryParams.get(paramName);
					if (currentParam instanceof String)
					{
						queryParams.put(paramName, new String[] {
							(String)currentParam, translatedParamValue
						});
					} else
					{
						String currentParamValues[] = (String[])(String[])currentParam;
						List paramList = new ArrayList(Arrays.asList(currentParamValues));
						paramList.add(translatedParamValue);
						String newParamValues[] = new String[paramList.size()];
						queryParams.put(paramName, ((Object) (paramList.toArray(newParamValues))));
					}
				} else
				{
					queryParams.put(paramName, translatedParamValue);
				}
			}

		}
		return queryParams;
	}

}

⌨️ 快捷键说明

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