|
What this is
Other links
The source code
/*
* Copyright 1999-2004 The Apache Sofware Foundation.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.tomcat.modules.generators;
import org.apache.tomcat.core.BaseInterceptor;
import org.apache.tomcat.core.Container;
import org.apache.tomcat.core.Context;
import org.apache.tomcat.core.Handler;
import org.apache.tomcat.core.Request;
import org.apache.tomcat.core.TomcatException;
/**
*
*
* @author James Duncan Davidson [duncan@eng.sun.com]
* @author Jason Hunter [jch@eng.sun.com]
* @author James Todd [gonzo@eng.sun.com]
* @author Costin Manolache
*/
public class InvokerInterceptor extends BaseInterceptor {
String prefix="/servlet/";
int prefixLen=prefix.length();
public void setPrefix(String prefix) {
if( prefix != null ) {
this.prefix = prefix;
prefixLen=this.prefix.length();
}
}
public int requestMap(Request req) {
// If we have an explicit mapper - return
Container ct=req.getContainer();
// log( "Ct: " + ct.getHandler() + " " +
// ct.getPath() + " " + ct.getMapType());
if( req.getHandler()!=null &&
ct!=null &&
ct.getMapType() != Container.DEFAULT_MAP )
return 0;
// default servlet / container
// if doesn't starts with /servlet - return
String pathInfo = req.pathInfo().toString();
String servletPath=req.servletPath().toString();
// Now we need to fix path info and servlet path
if( servletPath == null ||
! servletPath.startsWith( prefix ))
return 0;
Context ctx=req.getContext();
// Set the wrapper, and add a new mapping - next time
// we'll not have to do that ( the simple mapper is
// supposed to be faster )
String servletName = null;
String newPathInfo = null;
if( debug>0 )
log( "Original ServletPath=" +servletPath +
" PathInfo=" + pathInfo);
int secondSlash=servletPath.indexOf("/", prefixLen );
if ( secondSlash > -1) {
servletName = servletPath.substring(prefixLen, secondSlash );
newPathInfo = servletPath.substring( secondSlash );
} else {
servletName = servletPath.substring( prefixLen );
}
String newServletPath = prefix + servletName;
if( debug > 0)
log( "After pathfix SN=" + servletName +
" SP=" + newServletPath +
" PI=" + newPathInfo);
req.servletPath().setString(newServletPath);
req.pathInfo().setString(newPathInfo);
Handler wrapper = ctx.getServletByName(servletName);
if (wrapper != null) {
req.setHandler( wrapper );
return 0;
}
// Dynamic add for the wrapper
// even if the server doesn't supports dynamic mappings,
// we'll avoid the interceptor for include() and
// it's a much cleaner way to construct the servlet and
// make sure all interceptors are up to date.
try {
ctx.addServletMapping( newServletPath + "/*" ,
servletName );
// The facade should create the servlet name
Handler sw=ctx.getServletByName( servletName );
// sw.setContext(ctx);
// sw.setServletName(servletName);
// ctx.addServlet( sw );
// sw.setServletClass( servletName );
//sw.setOrigin( Handler.ORIGIN_INVOKER );
wrapper=sw;
if( debug > 0)
log( "Added mapping " + wrapper +
" path=" + newServletPath + "/*" );
} catch( TomcatException ex ) {
loghelper.log("dynamically adding wrapper for " + servletName, ex);
return 404;
}
req.setHandler( wrapper );
return 0;
}
}
|
| ... this post is sponsored by my books ... | |
#1 New Release! |
FP Best Seller |
Copyright 1998-2024 Alvin Alexander, alvinalexander.com
All Rights Reserved.
A percentage of advertising revenue from
pages under the /java/jwarehouse
URI on this website is
paid back to open source projects.