从外部文件Tomcat7动态添加servlet

时间:2013-07-14 09:16:39

标签: java servlets tomcat7 classnotfoundexception

我正在尝试从运行tomcat7服务器的外部文件(已编译的.class文件)动态添加servlet

这是我的代码

import javax.servlet.ServletContext;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import javax.servlet.ServletRegistration;

import com.sun.org.apache.bcel.internal.util.ClassLoaderRepository;



public class ConListenerImlp implements ServletContextListener{


    @Override
    public void contextDestroyed(ServletContextEvent arg0) {

    }

    @Override
    public void contextInitialized(ServletContextEvent arg0) {
        ServletContext context =  arg0.getServletContext();
        final ServletRegistration.Dynamic dn=context.addServlet("test","C:\\Users\\Learning\\workspace\\Server\\build\\classes\\Test.class");
        dn.setAsyncSupported(true);
        dn.addMapping("/test");



    }


}

当我调用servlet“test”时,我得到一个ClassNotFoundException

java.lang.ClassNotFoundException: C:\Users\Learning\workspace\Server\build\classes\Test.class

任何帮助都将非常感激

1 个答案:

答案 0 :(得分:0)

来自the javadoc

  

将具有给定名称和类名的servlet添加到此servlet上下文。

     

可以通过返回的ServletRegistration对象进一步配置注册的servlet。

     

将使用与此ServletContext 表示的应用程序关联的类加载器加载指定的className

(强调我的)

此方法需要类名(类似com.yourcompany.yourapp.TestServlet),而不是文件路径。该类必须存在于webapp的类路径中,即WEB-INF/classes或其中一个WEB-INF/lib的jar。

附注:你绝不应该把类放在默认包中。