直接插入我的代码:
public class ServletProcessor1 {
public void process(Request request, Response response) {
// TODO Auto-generated method stub
String uri = request.getUri();
System.out.println(uri);
String servletName = uri.substring(uri.lastIndexOf("/")+1);
URLClassLoader loader = null;
try{
URL[] urls = new URL[1];
URLStreamHandler streamHandler = null;
File classPath = new File(Constants.WEB_ROOT);
String repository = (new URL("file",null,classPath.getCanonicalPath()+File.separator)).toString();
urls[0] = new URL(null,repository,streamHandler);
loader = new URLClassLoader(urls);
}catch(IOException e){
e.printStackTrace();
}
Class myClass = null;
try{
myClass = loader.loadClass(servletName);
}catch(ClassNotFoundException e){
System.out.println(e.toString());
}
Servlet servlet = null;
try{
servlet = (Servlet)myClass.newInstance();
servlet.service((ServletRequest)request, (ServletResponse)response);
}catch(Exception e){
System.out.println(e.toString());
}
}
}
运行时,总发现 myClass = loader.loadClass(servletName); 报错,
"servletName" 是有WebRoot/WEb-INF/CLASS文件下是有的,
不过在com/servlet_/test/包下面.
请高手赐教,急呀!
分享到:
相关推荐
需要注意的是,`URLClassLoader`默认只加载指定的URLs,如果需要加载父类加载器的类,可以使用`ClassLoader.getSystemClassLoader()`或者`Thread.currentThread().getContextClassLoader()`。此外,为了安全考虑,...
`loadClass`方法用于加载指定全限定名的类。一旦类被加载,我们就可以根据需要实例化它,调用其方法。 需要注意的是,运行这段代码时,你需要确保C盘下存在test.jar文件,并且这个JAR文件中包含你想要加载的类。...
- JAR文件内部的类加载同样遵循包结构,`URLClassLoader`会解析JAR的`META-INF/MANIFEST.MF`文件,如果存在`Class-Path`属性,还会加载指定的其他JAR。 5. **动态添加URL**: - 由于`URLClassLoader`的`addURL`...
`URLClassLoader`还提供了`loadClass()`方法,这个方法是`ClassLoader`的抽象方法实现,用于根据类名加载指定的类。当你调用`loadClass()`时,它会遍历提供的URLs,查找对应的.class文件,并将其转换为Class对象。 ...
此示例展示了如何使用`java.net.URLClassLoader`自定义类加载器来加载特定路径下的`TestClassA`类,并调用其中的方法。 #### 六、总结 通过对Java中JVM加载`.class`文件的过程及其类加载器的具体工作原理的介绍,...
`URLClassLoader`是Java中的一个类加载器,它可以从指定的URL列表中加载类。在描述中提到的执行链,实际上是一个精心构造的Java反射调用序列,用于创建`URLClassLoader`实例,然后通过这个类加载器加载并执行自定义...
例如,使用服务发现框架(如OSGi)来管理类加载和依赖,或者使用更高级的插件系统(如Spring Boot的起步依赖)来实现更加复杂的插件架构。 总之,Java自动加载JAR文件并运行其中的类方法是一项实用的技术,它增强了...
1. 启动(Bootstrap)类加载器:这是最基础的类加载器,由本地代码实现,负责加载`<Java_Runtime_Home>/lib`目录下的核心类库。由于涉及虚拟机内部实现,开发者无法直接访问。 2. 扩展(Extension)类加载器:由`...
自定义类加载器(Custom ClassLoader)允许开发人员扩展加载类的行为,例如使用`URLClassLoader`从指定的URL加载类。类加载的层次结构(hierarchy)从引导类加载器开始,然后是扩展类加载器(ExtClassLoader),最后...
- `Class.forName(String className)` 是动态加载类的常见方式,它会尝试加载指定名称的类,并返回`Class`对象。如果类尚未加载到JVM中,该方法会调用相应的类加载器进行加载。 4. URLClassLoader: - 当类位于非...
Spring bean 一般通过配置文件和注解进行加载,如果要实现jar或class...测试示例中是spring boot 的部分代码,动态加载的内容为接口实现类,且初始化时加载本地的实现类,动态加载后改为非程序加载目录中的jar实现类。
3. **URLClassLoader**: 这是Java标准库中的一个类加载器,它可以从指定的URL加载类。通过创建`URLClassLoader`实例并传入包含源码或编译后类的目录或JAR文件的URL,可以在运行时加载新编译的类。 4. **反射...
- 负责加载Java核心库,如rt.jar、resources.jar以及sun.boot.class.path路径下的类。 - 不继承自java.lang.ClassLoader,没有父加载器。 - 它仅加载以java、javax、sun等开头的基础包类。 2. 扩展类加载器...
- 网络加载:使用`java.net.URLClassLoader`从网络指定的URL加载类。 - 压缩文件加载:从`.jar`、`.zip`等压缩文件中查找并加载类,自动解析`.jar`文件中的`.class`文件。 - 动态编译:从`.java`源代码文件编译成...
- 使用`findClass()`方法加载指定的类,并通过`newInstance()`方法创建实例。 4. **动态加载和执行类**: - 在`MyClassLoader`中,`test()`方法演示了如何加载和执行外部类的方法。它接受类路径字符串和类名,...
在`ClassLoaderTest`中,我们可能创建了一个自定义的URLClassLoader,用于加载指定路径下的类或jar文件。URLClassLoader通过URL集合来定位类的资源,它通常用于加载不在应用类路径(ClassPath)内的额外类库。创建...
3. **URLClassLoader**: 这是Java提供的一个可以加载指定URL位置上的类的类加载器。通过扩展URLClassLoader,我们可以加载不在标准类路径中的类,这对于动态加载非常有用。 4. **反射(Reflection)**: 反射API允许...
2. URLClassLoader:Java提供了一个内置的URLClassLoader,可以直接从指定的URL加载类,方便构建分布式系统。 四、类加载的优化 1. 懒加载:只在真正使用到某个类时才加载,减少启动时的内存占用。 2. 分类加载:...
7. **SpringDemo**:这可能是项目中的一个示例或演示,展示了如何加载和使用类路径下的Spring配置文件,以及如何集成其他库,如MyBatis。 综上所述,"加载jar包中的spring配置文件"是一个关键的Java开发实践,它...