servlets - Tomcat 8 webapp, dynamically add PostResources -


i have webapp uses listener dynamically add servlet instances. each servlet instance defined user-defined configuration files, , encapsulates distinct dataset. each of these datasets may include user-defined static web files (html, jpg, css etc). static resources each servlet instance stored outside webapp folder (to avoid deletion on redeployment), , each servlet instance has separate folder hierarchy.

in listener contextinitialized method, using javax.servlet.servletcontext.addservlet add each of servlet instances, , javax.servlet.servletregistration.dynamic.addmapping add url mapping servlet.

i add other mappings static content in external folders. in tomcat 7, extended org.apache.catalina.servlets.defaultservlet change relativepath new document root, class not work in tomcat 8 0 - classnotfoundexception (org.apache.naming.resources.filedircontext).

tomcat 8 has new 'resources' framework should make more straightforward.

my question - how can add postresources element context dynamically (at web app startup, inside listener), without editing web.xml?

in listener, should able this:

webresourceroot root = new standardroot(context); root.createwebresourceset(webresourceroot.resourcesettype.post,      "/my/url", "my/filesystem/path", null, "/"); 

but cannot figure out how required context (org.apache.catalina.context), different type named javax.servlet.servletcontext provided servletcontextevent in listener contextinitialized method.

any suggestions? thanks.

i think have figured out using mbeanserver. seems bit of roundabout method though - there no way of getting standardroot or standardcontext object servletcontext?

import javax.management.mbeanserver; import javax.management.mbeanserverfactory; import javax.management.objectname; import javax.servlet.servletcontext; import org.apache.catalina.core.standardcontext; import org.apache.catalina.core.standardengine; import org.apache.catalina.container; import org.apache.catalina.server; import org.apache.catalina.service; import org.apache.catalina.webresourceroot;  ...  private void addpostresources(servletcontext servletcontext)     throws exception /* debugging */ {      mbeanserver mbs = mbeanserverfactory.findmbeanserver(null).get(0);     objectname name = new objectname("catalina","type","server");     server server = (server)mbs.getattribute(name, "managedresource");     service service = server.findservice("catalina");     standardengine engine = service.getcontainer();     container hostcontainer = engine.findchild(engine.getdefaulthost());      standardcontext standardcontext = (standardcontext)hostcontainer.findchild(servletcontext.getcontextpath());      webresourceroot root = standardcontext.getresources();     root.createwebresourceset(webresourceroot.resourcesettype.post,          "/my/url", "my/filesystem/path", null, "/"); } 

Comments

Popular posts from this blog

ruby - Trying to change last to "x"s to 23 -

jquery - Clone last and append item to closest class -

c - Unrecognised emulation mode: elf_i386 on MinGW32 -