📄 urlhelper.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 + -