Author: julien(a)jboss.com
Date: 2006-12-14 17:14:30 -0500 (Thu, 14 Dec 2006)
New Revision: 5861
Modified:
trunk/server/src/main/org/jboss/portal/server/impl/ServerInvocationContextImpl.java
trunk/server/src/main/org/jboss/portal/server/servlet/PortalServlet.java
Log:
- move the Buffer class to a more appropriate location
- pre compute request prefix in constructor of ServerInvocationContextImpl
Modified:
trunk/server/src/main/org/jboss/portal/server/impl/ServerInvocationContextImpl.java
===================================================================
---
trunk/server/src/main/org/jboss/portal/server/impl/ServerInvocationContextImpl.java 2006-12-14
21:03:28 UTC (rev 5860)
+++
trunk/server/src/main/org/jboss/portal/server/impl/ServerInvocationContextImpl.java 2006-12-14
22:14:30 UTC (rev 5861)
@@ -23,17 +23,19 @@
package org.jboss.portal.server.impl;
import org.jboss.portal.common.invocation.AbstractInvocationContext;
+import org.jboss.portal.common.text.CharBuffer;
+import org.jboss.portal.common.text.FastURLEncoder;
import org.jboss.portal.server.PortalConstants;
import org.jboss.portal.server.ServerInvocation;
import org.jboss.portal.server.ServerInvocationContext;
import org.jboss.portal.server.ServerURL;
import org.jboss.portal.server.request.URLContext;
import org.jboss.portal.server.request.URLFormat;
-import org.jboss.portal.server.servlet.PortalServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.Map;
+import java.util.Iterator;
/**
* @author <a href="mailto:julien@jboss.org">Julien Viet</a>
@@ -42,6 +44,9 @@
public class ServerInvocationContextImpl extends AbstractInvocationContext implements
ServerInvocationContext
{
+ /** The fast url encoder. */
+ private static final FastURLEncoder urlEncoder =
FastURLEncoder.create("UTF8", 0, 1024);
+
/** The client request. */
private final HttpServletRequest req;
@@ -67,8 +72,14 @@
private URLContext urlContext;
/** . */
- private PortalServlet.Buffer[] buffers;
+ private Buffer[] buffers;
+ /** . */
+ private final String requestRelativePrefix;
+
+ /** . */
+ private final String requestPrefix;
+
public ServerInvocationContextImpl(
HttpServletRequest req,
HttpServletResponse resp,
@@ -97,9 +108,29 @@
this.bodyParameterMap = bodyParameterMap;
this.urlContext = urlContext;
this.mediaType = mediaType;
- this.buffers = new PortalServlet.Buffer[16];
+ this.buffers = new Buffer[16];
//
+ StringBuffer requestRelativePrefix = new StringBuffer();
+
requestRelativePrefix.append(req.getScheme()).append("://").append(req.getServerName());
+ if (req.isSecure())
+ {
+ if (req.getServerPort() != 443)
+ {
+
requestRelativePrefix.append(":").append(Integer.toString(req.getServerPort()));
+ }
+ }
+ else if (req.getServerPort() != 80)
+ {
+
requestRelativePrefix.append(":").append(Integer.toString(req.getServerPort()));
+ }
+ requestRelativePrefix.append(req.getContextPath());
+
+ //
+ this.requestRelativePrefix = requestRelativePrefix.toString();
+ this.requestPrefix = req.getContextPath();
+
+ //
addResolver(ServerInvocation.REQUEST_SCOPE, new RequestAttributeResolver(req));
addResolver(ServerInvocation.SESSION_SCOPE, new SessionAttributeResolver(req,
PortalConstants.PORTAL_SESSION_MAP_KEY));
addResolver(ServerInvocation.PRINCIPAL_SCOPE, new
PrincipalAttributeResolver(req));
@@ -151,9 +182,94 @@
int index = context.getMask() << 2 | format.getMask();
if (buffers[index] == null)
{
- buffers[index] = new PortalServlet.Buffer(req, resp, context, format);
+ buffers[index] = new Buffer(resp, context, format);
}
- PortalServlet.Buffer buffer = buffers[index];
+ Buffer buffer = buffers[index];
return buffer.toString(url);
}
+
+ public class Buffer extends CharBuffer
+ {
+
+ /** . */
+ private final HttpServletResponse resp;
+
+ /** . */
+ private final URLFormat format;
+
+ /** . */
+ private final int prefixLength;
+
+ public Buffer(HttpServletResponse resp, URLContext context, URLFormat format)
+ {
+ this.resp = resp;
+ this.format = format;
+
+ //
+ if (!format.isRelative())
+ {
+ append(requestRelativePrefix);
+ }
+ else
+ {
+ append(requestPrefix);
+ }
+
+ // Append the servlet path
+ switch(context.getMask())
+ {
+ case URLContext.AUTH_MASK + URLContext.SEC_MASK:
+ append("/authsec");
+ break;
+ case URLContext.AUTH_MASK:
+ append("/auth");
+ break;
+ case URLContext.SEC_MASK:
+ append("/sec");
+ break;
+ }
+
+ // Save the prefix length
+ this.prefixLength = length;
+ }
+
+ public String toString(ServerURL url)
+ {
+ // Reset the prefix length
+ this.length = prefixLength;
+
+ // julien : check UTF-8 is ok and should not be dependant on the response
charset
+ append(url.getPortalRequestPath());
+
+ //
+ boolean first = true;
+ for (Iterator i = url.getParameterMap().entrySet().iterator(); i.hasNext();)
+ {
+ Map.Entry parameter = (Map.Entry)i.next();
+ String name = (String)parameter.getKey();
+ String[] values = (String[])parameter.getValue();
+ for (int j = 0; j < values.length; j++)
+ {
+ String value = values[j];
+ append(first ? '?' : '&');
+ append(name, urlEncoder);
+ append('=');
+ append(value, urlEncoder);
+ first = false;
+ }
+ }
+
+ // Stringify
+ String s = asString();
+
+ // Let the servlet rewrite the URL if necessary
+ if (format.isServletEncoded())
+ {
+ s = resp.encodeURL(s);
+ }
+
+ //
+ return s;
+ }
+ }
}
Modified: trunk/server/src/main/org/jboss/portal/server/servlet/PortalServlet.java
===================================================================
--- trunk/server/src/main/org/jboss/portal/server/servlet/PortalServlet.java 2006-12-14
21:03:28 UTC (rev 5860)
+++ trunk/server/src/main/org/jboss/portal/server/servlet/PortalServlet.java 2006-12-14
22:14:30 UTC (rev 5861)
@@ -29,8 +29,6 @@
import org.jboss.portal.common.invocation.InvocationException;
import org.jboss.portal.common.util.Exceptions;
import org.jboss.portal.common.util.URLTools;
-import org.jboss.portal.common.text.FastURLEncoder;
-import org.jboss.portal.common.text.CharBuffer;
import org.jboss.portal.server.PortalConstants;
import org.jboss.portal.server.RequestController;
import org.jboss.portal.server.RequestControllerDispatcher;
@@ -40,10 +38,8 @@
import org.jboss.portal.server.ServerInvocationContext;
import org.jboss.portal.server.ServerRequest;
import org.jboss.portal.server.ServerResponse;
-import org.jboss.portal.server.ServerURL;
import org.jboss.portal.server.impl.ServerInvocationContextImpl;
import org.jboss.portal.server.request.URLContext;
-import org.jboss.portal.server.request.URLFormat;
import javax.management.MBeanServer;
import javax.management.ObjectName;
@@ -88,9 +84,6 @@
/** Describes a path mapping. */
private static final int PATH_MAPPING = 2;
- /** The fast url encoder. */
- private static final FastURLEncoder urlEncoder =
FastURLEncoder.create("UTF8", 0, 1024);
-
/** The logger. */
protected Logger log = Logger.getLogger(getClass());
@@ -436,117 +429,7 @@
}
}
- public static class Buffer extends CharBuffer
- {
- /** . */
- private final HttpServletRequest req;
-
- /** . */
- private final HttpServletResponse resp;
-
- /** . */
- private final URLContext context;
-
- /** . */
- private final URLFormat format;
-
- /** . */
- private final int prefixLength;
-
- public Buffer(HttpServletRequest req, HttpServletResponse resp, URLContext context,
URLFormat format)
- {
- this.req = req;
- this.resp = resp;
- this.context = context;
- this.format = format;
-
- //
- if (!format.isRelative())
- {
- append(req.getScheme());
- append("://");
- append(req.getServerName());
-
- //
- int port = req.getServerPort();
- if (req.isSecure())
- {
- if (port != 443)
- {
- append(":");
- append(Integer.toString(port));
- }
- }
- else if (port != 80)
- {
- append(":");
- append(Integer.toString(port));
- }
- }
-
- // Append the context path
- append(req.getContextPath());
-
- // Append the servlet path
- switch(context.getMask())
- {
- case URLContext.AUTH_MASK + URLContext.SEC_MASK:
- append("/authsec");
- break;
- case URLContext.AUTH_MASK:
- append("/auth");
- break;
- case URLContext.SEC_MASK:
- append("/sec");
- break;
- }
-
- // Save the prefix length
- this.prefixLength = length;
- }
-
-
- public String toString(ServerURL url)
- {
- // Reset the prefix length
- this.length = prefixLength;
-
- // julien : check UTF-8 is ok and should not be dependant on the response
charset
- append(url.getPortalRequestPath());
-
- //
- boolean first = true;
- for (Iterator i = url.getParameterMap().entrySet().iterator(); i.hasNext();)
- {
- Map.Entry parameter = (Map.Entry)i.next();
- String name = (String)parameter.getKey();
- String[] values = (String[])parameter.getValue();
- for (int j = 0; j < values.length; j++)
- {
- String value = values[j];
- append(first ? '?' : '&');
- append(name, urlEncoder);
- append('=');
- append(value, urlEncoder);
- first = false;
- }
- }
-
- // Stringify
- String s = asString();
-
- // Let the servlet rewrite the URL if necessary
- if (format.isServletEncoded())
- {
- s = resp.encodeURL(s);
- }
-
- //
- return s;
- }
- }
-
private URLContext parseURLContext(HttpServletRequest req)
{
return URLContext.newInstance(req.isSecure(), req.getRemoteUser() != null);
Show replies by date