tomcat-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Philip Weaver <phi...@philmaker.com>
Subject Re: Need Help Programmatically Loading Servlets in StandardContext subclass
Date Tue, 23 Aug 2005 17:39:49 GMT

I give up. MVC baby!

On Aug 21, 2005, at 7:24 PM, Philip Weaver wrote:

>
> How can I programmatically load servlets and servlet mappings in 
> Tomcat? I'm using Tomcat 5.0.28.
>
> I'm trying to extend StandardContext to automatically map/assign a 
> batch of servlets from a specified jar at startup. I'm having trouble. 
> As I try to add these servlets programmatically as the StandardContext 
> is starting up, I can't get them to register/load. The servlets loaded 
> from the web.xml work fine, but the ones I'm trying to add 
> programmatically return null ObjectNames when I query 
> context.getServlets(). They are also ignored or not found when I get 
> the URL.
>
> Here's the code I'm trying... The most relevant code is in 
> addServlet() below - which I'm calling after super.start().
>
> package com.luminera.www;
>
> import java.io.*;
> import java.util.*;
> import javax.management.*;
> import javax.naming.*;
> import javax.servlet.*;
> import org.apache.catalina.*;
> import org.apache.catalina.deploy.*;
> import org.apache.catalina.loader.*;
> import org.apache.catalina.mbeans.*;
> import org.apache.catalina.startup.*;
> import org.apache.catalina.util.*;
> import org.apache.commons.logging.*;
> import org.apache.commons.modeler.*;
> import org.apache.naming.*;
> import org.apache.naming.resources.*;
> import org.apache.tomcat.util.compat.*;
>
> public class StandardContext extends 
> org.apache.catalina.core.StandardContext {
> 	
> 	public StandardContext() {
> 		
> 		super();
> 	}
> 	
> 	public synchronized void start() throws LifecycleException {
> 		
> 		super.start();
> 		
> 		this.loadServlets();
> 		
> 		String[] asServlets = this.getServlets();
> 		for (int i = 0; i < asServlets.length; i++) {
> 			System.out.println("known servlet: " + asServlets[i]);
> 		}
> 	}
> 	
> 	private void loadServlets() {
> 		
> 		String sParameter = this.findParameter("servlets-jar");
> 		String sBasePath = this.getBasePath();
> 		System.out.println("sParameter: " + sParameter);
> 		System.out.println("sBasePath: " + sBasePath);
> 		if ((sParameter != null) && (sBasePath != null)) {
> 			String sJarPath = sBasePath + sParameter;
> 			System.out.println("servlet jar path: " + sJarPath);
> 			ClassLoader classLoader = this.getLoader().getClassLoader();
> 			//HashMap hashMap = ServletUtility.buildServletMap(sJarPath, 
> classLoader); // external lib
> 			HashMap hashMap = new HashMap();
> 			for (Iterator iterator = hashMap.keySet().iterator(); 
> iterator.hasNext();) {
> 				String sPattern = (String)iterator.next();
> 				String sClass = (String)hashMap.get(sPattern);
> 				this.addServlet(sPattern, sClass);
> 			}
> 		}
> 	}
> 	
> 	private void addServlet(String sPattern, String sClass) {
> 		
> 		System.out.println("Trying to load servlet for url pattern: " + 
> sPattern);
> 		
> 		Wrapper wrapper = null;
> 		try {
> 			String sName = sClass;
> 			wrapper = this.createWrapper();
> 			wrapper.setName(sName);
> 			wrapper.setServletClass(sClass);
> 			this.addChild(wrapper);
> 			this.addServletMapping(sPattern, sName);
> 			if (wrapper instanceof Lifecycle) {
> 				((Lifecycle)wrapper).start();
> 			}
> 			System.out.println("succeeded");
> 			System.out.println("sPattern: " + sPattern);
> 			System.out.println("sName: " + sName);
> 		} catch (Throwable throwable) {
> 			System.out.println("failed");
> 			Log log = LogFactory.getLog(StandardContext.class);
> 			log.error("Failed to load servlet: " + sClass, throwable);
> 			this.removeServletMapping(sPattern);
> 			this.removeChild(wrapper);
> 		}
> 	}
> 	
> 	private String getBasePath() {
> 		
> 		String docBase = null;
> 		Container container = this;
> 		while (container != null) {
> 			if (container instanceof Host) {
> 				break;
> 			}
> 			container = container.getParent();
> 		}
> 		File file = new File(getDocBase());
> 		if (!file.isAbsolute()) {
> 			if (container == null) {
> 				docBase = (new File(engineBase(), getDocBase())).getPath();
> 			} else {
> 				String appBase = ((Host)container).getAppBase();
> 				file = new File(appBase);
> 				if (!file.isAbsolute()) {
> 					file = new File(engineBase(), appBase);
> 				}
> 				docBase = (new File(file, getDocBase())).getPath();
> 			}
> 		} else {
> 			docBase = file.getPath();
> 		}
> 		return docBase;
> 	}
> 	
> }
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: tomcat-user-unsubscribe@jakarta.apache.org
> For additional commands, e-mail: tomcat-user-help@jakarta.apache.org
>


---------------------------------------------------------------------
To unsubscribe, e-mail: tomcat-user-unsubscribe@jakarta.apache.org
For additional commands, e-mail: tomcat-user-help@jakarta.apache.org


Mime
View raw message