📄 requestutils.java
字号:
newValues[oldValues.length] = paramString;
results.put(paramId, newValues);
}
}
}
// Add our transaction control token (if requested)
if (transaction) {
HttpSession session = pageContext.getSession();
String token = null;
if (session != null) {
token = (String) session.getAttribute(Globals.TRANSACTION_TOKEN_KEY);
}
if (token != null) {
results.put(Constants.TOKEN_KEY, token);
}
}
// Return the completed Map
return (results);
}
/**
* Compute a hyperlink URL based on the <code>forward</code>,
* <code>href</code> or <code>page</code> parameter
* that is not null.
*
* @deprecated To be removed in Version 1.3.
* Use {@link RequestUtils#computeURL(PageContext, String, String, String, String, Map, String, boolean)} instead.
*
* @param pageContext PageContext for the tag making this call
*
* @param forward Logical forward name for which to look up
* the context-relative URI (if specified)
* @param href URL to be utilized unmodified (if specified)
* @param page Module-relative page for which a URL should
* be created (if specified)
*
* @param params Map of parameters to be dynamically included (if any)
* @param anchor Anchor to be dynamically included (if any)
*
* @param redirect Is this URL for a <code>response.sendRedirect()</code>?
* @return URL with session identifier
* @exception MalformedURLException if a URL cannot be created
* for the specified parameters
*/
public static String computeURL(
PageContext pageContext,
String forward,
String href,
String page,
Map params,
String anchor,
boolean redirect)
throws MalformedURLException {
return computeURL(pageContext, forward, href, page, null, params,
anchor, redirect);
}
/**
* Compute a hyperlink URL based on the <code>forward</code>,
* <code>href</code>, <code>action</code> or <code>page</code> parameter
* that is not null.
* The returned URL will have already been passed to
* <code>response.encodeURL()</code> for adding a session identifier.
*
* @param pageContext PageContext for the tag making this call
*
* @param forward Logical forward name for which to look up
* the context-relative URI (if specified)
* @param href URL to be utilized unmodified (if specified)
* @param page Module-relative page for which a URL should
* be created (if specified)
* @param action Logical action name for which to look up
* the context-relative URI (if specified)
*
* @param params Map of parameters to be dynamically included (if any)
* @param anchor Anchor to be dynamically included (if any)
*
* @param redirect Is this URL for a <code>response.sendRedirect()</code>?
* @return URL with session identifier
* @exception MalformedURLException if a URL cannot be created
* for the specified parameters
*/
public static String computeURL(
PageContext pageContext,
String forward,
String href,
String page,
String action,
Map params,
String anchor,
boolean redirect)
throws MalformedURLException {
return computeURL(
pageContext,
forward,
href,
page,
action,
params,
anchor,
redirect,
true);
}
/**
* Compute a hyperlink URL based on the <code>forward</code>,
* <code>href</code>, <code>action</code> or <code>page</code> parameter
* that is not null.
* The returned URL will have already been passed to
* <code>response.encodeURL()</code> for adding a session identifier.
*
* @param pageContext PageContext for the tag making this call
*
* @param forward Logical forward name for which to look up
* the context-relative URI (if specified)
* @param href URL to be utilized unmodified (if specified)
* @param page Module-relative page for which a URL should
* be created (if specified)
* @param action Logical action name for which to look up
* the context-relative URI (if specified)
*
* @param params Map of parameters to be dynamically included (if any)
* @param anchor Anchor to be dynamically included (if any)
*
* @param redirect Is this URL for a <code>response.sendRedirect()</code>?
* @param encodeSeparator This is only checked if redirect is set to false (never
* encoded for a redirect). If true, query string parameter separators are encoded
* as >amp;, else & is used.
* @return URL with session identifier
* @exception MalformedURLException if a URL cannot be created
* for the specified parameters
*/
public static String computeURL(
PageContext pageContext,
String forward,
String href,
String page,
String action,
Map params,
String anchor,
boolean redirect,
boolean encodeSeparator)
throws MalformedURLException {
// TODO All the computeURL() methods need refactoring!
// Validate that exactly one specifier was included
int n = 0;
if (forward != null) {
n++;
}
if (href != null) {
n++;
}
if (page != null) {
n++;
}
if (action != null) {
n++;
}
if (n != 1) {
throw new MalformedURLException(messages.getMessage("computeURL.specifier"));
}
// Look up the module configuration for this request
ModuleConfig config =
(ModuleConfig) pageContext.getRequest().getAttribute(Globals.MODULE_KEY);
if (config == null) { // Backwards compatibility hack
config =
(ModuleConfig) pageContext.getServletContext().getAttribute(Globals.MODULE_KEY);
pageContext.getRequest().setAttribute(Globals.MODULE_KEY, config);
}
// Calculate the appropriate URL
StringBuffer url = new StringBuffer();
HttpServletRequest request = (HttpServletRequest) pageContext.getRequest();
if (forward != null) {
ForwardConfig fc = config.findForwardConfig(forward);
if (fc == null) {
throw new MalformedURLException(messages.getMessage("computeURL.forward", forward));
}
if (fc.getRedirect()) {
redirect = true;
}
if (fc.getPath().startsWith("/")) {
url.append(request.getContextPath());
url.append(forwardURL(request, fc));
} else {
url.append(fc.getPath());
}
} else if (href != null) {
url.append(href);
} else if (action != null) {
url.append(getActionMappingURL(action, pageContext));
} else /* if (page != null) */ {
url.append(request.getContextPath());
url.append(pageURL(request, page));
}
// Add anchor if requested (replacing any existing anchor)
if (anchor != null) {
String temp = url.toString();
int hash = temp.indexOf('#');
if (hash >= 0) {
url.setLength(hash);
}
url.append('#');
url.append(encodeURL(anchor));
}
// Add dynamic parameters if requested
if ((params != null) && (params.size() > 0)) {
// Save any existing anchor
String temp = url.toString();
int hash = temp.indexOf('#');
if (hash >= 0) {
anchor = temp.substring(hash + 1);
url.setLength(hash);
temp = url.toString();
} else {
anchor = null;
}
// Define the parameter separator
String separator = null;
if (redirect) {
separator = "&";
} else if (encodeSeparator) {
separator = "&";
} else {
separator = "&";
}
// Add the required request parameters
boolean question = temp.indexOf('?') >= 0;
Iterator keys = params.keySet().iterator();
while (keys.hasNext()) {
String key = (String) keys.next();
Object value = params.get(key);
if (value == null) {
if (!question) {
url.append('?');
question = true;
} else {
url.append(separator);
}
url.append(encodeURL(key));
url.append('='); // Interpret null as "no value"
} else if (value instanceof String) {
if (!question) {
url.append('?');
question = true;
} else {
url.append(separator);
}
url.append(encodeURL(key));
url.append('=');
url.append(encodeURL((String) value));
} else if (value instanceof String[]) {
String values[] = (String[]) value;
for (int i = 0; i < values.length; i++) {
if (!question) {
url.append('?');
question = true;
} else {
url.append(separator);
}
url.append(encodeURL(key));
url.append('=');
url.append(encodeURL(values[i]));
}
} else /* Convert other objects to a string */ {
if (!question) {
url.append('?');
question = true;
} else {
url.append(separator);
}
url.append(encodeURL(key));
url.append('=');
url.append(encodeURL(value.toString()));
}
}
// Re-add the saved anchor (if any)
if (anchor != null) {
url.append('#');
url.append(encodeURL(anchor));
}
}
// Perform URL rewriting to include our session ID (if any)
if (pageContext.getSession() != null) {
HttpServletResponse response = (HttpServletResponse) pageContext.getResponse();
if (redirect) {
return (response.encodeRedirectURL(url.toString()));
} else {
return (response.encodeURL(url.toString()));
}
} else {
return (url.toString());
}
}
/**
* Return the form action converted into an action mapping path. The
* value of the <code>action</code> property is manipulated as follows in
* computing the name of the requested mapping:
* <ul>
* <li>Any filename extension is removed (on the theory that extension
* mapping is being used to select the controller servlet).</li>
* <li>If the resulting value does not start with a slash, then a
* slash is prepended.</li>
* </ul>
*/
public static String getActionMappingName(String action) {
String value = action;
int question = action.indexOf("?");
if (question >= 0) {
value = value.substring(0, question);
}
int slash = value.lastIndexOf("/");
int period = value.lastIndexOf(".");
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -