我正在尝试从运行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
任何帮助都将非常感激
答案 0 :(得分:0)
来自the javadoc:
将具有给定名称和类名的servlet添加到此servlet上下文。
可以通过返回的ServletRegistration对象进一步配置注册的servlet。
将使用与此ServletContext 表示的应用程序关联的类加载器加载指定的className 。
(强调我的)
此方法需要类名(类似com.yourcompany.yourapp.TestServlet
),而不是文件路径。该类必须存在于webapp的类路径中,即WEB-INF/classes
或其中一个WEB-INF/lib
的jar。
附注:你绝不应该把类放在默认包中。