You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by re...@apache.org on 2003/05/17 22:55:37 UTC
cvs commit: jakarta-tomcat-connectors/util/java/org/apache/tomcat/util/http/mapper Mapper.java
remm 2003/05/17 13:55:37
Modified: util/java/org/apache/tomcat/util/http/mapper Mapper.java
Log:
- Refactor very slightly the mapping algorithm and the mapper so that
it can do context level mapping.
Revision Changes Path
1.18 +98 -38 jakarta-tomcat-connectors/util/java/org/apache/tomcat/util/http/mapper/Mapper.java
Index: Mapper.java
===================================================================
RCS file: /home/cvs/jakarta-tomcat-connectors/util/java/org/apache/tomcat/util/http/mapper/Mapper.java,v
retrieving revision 1.17
retrieving revision 1.18
diff -u -r1.17 -r1.18
--- Mapper.java 24 Apr 2003 14:40:11 -0000 1.17
+++ Mapper.java 17 May 2003 20:55:37 -0000 1.18
@@ -99,6 +99,7 @@
*/
protected boolean processWelcomeResources = true;
+
/**
* Flag indicating that we should redirect to a directory when the URL
* doesn't end in a '/'. It overrided the Authenticator, so the redirect
@@ -106,6 +107,13 @@
*/
protected boolean redirectDirectories = false;
+
+ /**
+ * Context associated with this wrapper, used for wrapper mapping.
+ */
+ protected Context context = null;
+
+
// --------------------------------------------------------- Public Methods
@@ -206,6 +214,24 @@
/**
+ * Set context, used for wrapper mapping (request dispatcher).
+ *
+ * @param path Context path
+ * @param context Context object
+ * @param welcomeResources Welcome files defined for this context
+ * @param resources Static resources of the context
+ */
+ public void setContext(String path, String[] welcomeResources,
+ javax.naming.Context resources) {
+ context = new Context();
+ context.name = path;
+ //context.object = context; // Likely useless
+ context.welcomeResources = welcomeResources;
+ context.resources = resources;
+ }
+
+
+ /**
* Add a new Context to an existing Host.
*
* @param hostName Virtual host name this context belongs to
@@ -274,7 +300,9 @@
}
}
- /** Return all contexts, in //HOST/PATH form
+
+ /**
+ * Return all contexts, in //HOST/PATH form
*
* @return
*/
@@ -287,12 +315,11 @@
(cname.startsWith("/") ? cname : "/"));
}
}
- String res[]=new String[list.size()];
+ String res[] = new String[list.size()];
return (String[])list.toArray(res);
}
-
/**
* Add a new Wrapper to an existing Context.
*
@@ -318,41 +345,54 @@
}
Context context = contexts[pos2];
if (context.name.equals(contextPath)) {
- synchronized (context) {
- Wrapper newWrapper = new Wrapper();
- newWrapper.object = wrapper;
- if (path.endsWith("/*")) {
- // Wildcard wrapper
- newWrapper.name = path.substring(0, path.length() - 2);
- Wrapper[] oldWrappers = context.wildcardWrappers;
- Wrapper[] newWrappers =
- new Wrapper[oldWrappers.length + 1];
- if (insertMap(oldWrappers, newWrappers, newWrapper)) {
- context.wildcardWrappers = newWrappers;
- }
- } else if (path.startsWith("*.")) {
- // Extension wrapper
- newWrapper.name = path.substring(2);
- Wrapper[] oldWrappers = context.extensionWrappers;
- Wrapper[] newWrappers =
- new Wrapper[oldWrappers.length + 1];
- if (insertMap(oldWrappers, newWrappers, newWrapper)) {
- context.extensionWrappers = newWrappers;
- }
- } else if (path.equals("/")) {
- // Default wrapper
- newWrapper.name = "";
- context.defaultWrapper = newWrapper;
- } else {
- // Exact wrapper
- newWrapper.name = path;
- Wrapper[] oldWrappers = context.exactWrappers;
- Wrapper[] newWrappers =
- new Wrapper[oldWrappers.length + 1];
- if (insertMap(oldWrappers, newWrappers, newWrapper)) {
- context.exactWrappers = newWrappers;
- }
- }
+ addWrapper(context, path, wrapper);
+ }
+ }
+ }
+
+
+ /**
+ * Add a wrapper to the context associated with this wrapper.
+ */
+ public void addWrapper(String path, Object wrapper) {
+ addWrapper(context, path, wrapper);
+ }
+
+
+ protected void addWrapper(Context context, String path, Object wrapper) {
+ synchronized (context) {
+ Wrapper newWrapper = new Wrapper();
+ newWrapper.object = wrapper;
+ if (path.endsWith("/*")) {
+ // Wildcard wrapper
+ newWrapper.name = path.substring(0, path.length() - 2);
+ Wrapper[] oldWrappers = context.wildcardWrappers;
+ Wrapper[] newWrappers =
+ new Wrapper[oldWrappers.length + 1];
+ if (insertMap(oldWrappers, newWrappers, newWrapper)) {
+ context.wildcardWrappers = newWrappers;
+ }
+ } else if (path.startsWith("*.")) {
+ // Extension wrapper
+ newWrapper.name = path.substring(2);
+ Wrapper[] oldWrappers = context.extensionWrappers;
+ Wrapper[] newWrappers =
+ new Wrapper[oldWrappers.length + 1];
+ if (insertMap(oldWrappers, newWrappers, newWrapper)) {
+ context.extensionWrappers = newWrappers;
+ }
+ } else if (path.equals("/")) {
+ // Default wrapper
+ newWrapper.name = "";
+ context.defaultWrapper = newWrapper;
+ } else {
+ // Exact wrapper
+ newWrapper.name = path;
+ Wrapper[] oldWrappers = context.exactWrappers;
+ Wrapper[] newWrappers =
+ new Wrapper[oldWrappers.length + 1];
+ if (insertMap(oldWrappers, newWrappers, newWrapper)) {
+ context.exactWrappers = newWrappers;
}
}
}
@@ -475,6 +515,26 @@
}
uri.toChars();
internalMap(host.getCharChunk(), uri.getCharChunk(), mappingData);
+
+ }
+
+
+ /**
+ * Map the specified URI relative to the context,
+ * mutating the given mapping data.
+ *
+ * @param uri URI
+ * @param mappingData This structure will contain the result of the mapping
+ * operation
+ */
+ public void map(MessageBytes uri, MappingData mappingData)
+ throws Exception {
+
+ uri.toChars();
+ CharChunk uricc = uri.getCharChunk();
+ uricc.setLimit(-1);
+ mappingData.contextPath.setString(context.path);
+ internalMapWrapper(context, uricc, mappingData);
}
---------------------------------------------------------------------
To unsubscribe, e-mail: tomcat-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: tomcat-dev-help@jakarta.apache.org