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