利用URLClassLoader加载两个位置的Class

内容:分别位于\myApp\WEB-INF\classes下的类和\webroot下的类,利用URL数组指定多个仓库位置加载。

MyClassLoader:

public class MyClassLoader {
	public static final String WEB_ROOT = System.getProperty("user.dir") +
			File.separator + "webroot";
	public static final String WEB_APP = System.getProperty("user.dir") +
			File.separator + "myApp" + File.separator + "WEB-INF"
			+ File.separator + "classes";

	public static void main(String[] args) {
		URLClassLoader loader = null;

		try {
			URL[] urls = new URL[2];
			URLStreamHandler streamHandler = null;
			File classPath = new File(WEB_ROOT);
			File appPath = new File(WEB_APP);
			String repository1 = (new URL("file", null, classPath.getCanonicalPath() + File.separator)).toString() ;
			String repository2 = (new URL("file", null, appPath.getCanonicalPath() + File.separator)).toString() ;

			urls[0] = new URL(null, repository1, streamHandler);
			urls[1] = new URL(null, repository2, streamHandler);
			loader = new URLClassLoader(urls);

		} catch (MalformedURLException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}

		Class myClass = null;
		Class appClass = null;

		try {
			myClass = loader.loadClass("ModernServlet");
			appClass = loader.loadClass("PrimitiveServlet");
		} catch (Exception e) {
			System.out.println("error");
		}

		Servlet servlet = null;

		try {
			servlet = (Servlet) myClass.newInstance();
			servlet.init(null);
			servlet = (Servlet) appClass.newInstance();
			servlet.init(null);
		} catch (Exception e) {
			System.out.println("error");
		}

	}
}
时间: 2024-12-29 06:41:05

利用URLClassLoader加载两个位置的Class的相关文章

利用LruCache加载网络图片实现图片瀑布流效果(改进版)

MainActivity如下: package cc.patience4; import cc.patience4.R; import android.os.Bundle; import android.app.Activity; /** * Demo描述: * 采用瀑布流的形式加载大量网络图片 * 详细分析参见WaterfallScrollView * * 更新说明: * 该示例在基础版的基础上加入了图片查看功能. * 点击瀑布流中一张图片后可欣赏图片并能对图片进行单指拖动和两指缩放. * 对

Tomcat启动后加载两次servlet的问题

前提: 1.存在某个应用:hello 2.该应用存放路径:D:\apache-tomcat-5.5.17\webapps\hello 3.Tomcat的server.xml部分配置信息如下: Java代码 ...  <Context path="" reloadable="true" docBase="hello"/>  ...  ...  <Context path="" reloadable="

关于EasyUI使用tree方法生成树形结构加载两次的问题

html代码中利用class声明了easyui-tree,导致easyUI解析class代码的时候先解析class声明中的easyui-tree这样组件就请求了一次url:然后又调用js初始化代码请求一次url.这样导致了重复加载,解决的方法就是只用一种初始化方法来声明easyUI组件以避免重复的提交请求,即删除html中的class声明(class="easyui-tree"): 加载两次的写法: <div class="easyui-panel" styl

利用LruCache加载网络图片实现图片瀑布流效果(基础版)

MainActivity如下: package cc.patience3; import android.os.Bundle; import android.app.Activity; /** * Demo描述: * 采用瀑布流的形式加载大量网络图片 * 详细分析参见WaterfallScrollView * * 参考资料: * 1 http://blog.csdn.net/guolin_blog/article/details/10470797 * 2 http://blog.csdn.net

Tomcat加载两次问题

前提介绍: 1.某个应用Dragon放置路径:/opt/apache-tomcat-7.0.47/webapps/Dragon 2.Tomcat的server.xml部分配置信息如下: <Context path="" reloadable="false" docBase="Dragon"/> 问题:此时tomcat启动时发现控制台打印两次信息. 问题原因: 因为Dragon应用本来就放在Tomat的默认webapp目录下(tomca

利用maven-assembly-plugin加载不同环境所需的配置文件

背景: 如何加载不同环境的配置文件已经成了实在必行的,我们通常利用profile进行,详情参见我上篇博客 http://www.cnblogs.com/lianshan/p/7347890.html,但是单单的profile实在无法满足我们的需求,我们将它与maven-assembly-plugin,结合起来,来实现配置分离的问题. profile不同环境参数设置 此参数的配置与上篇几乎相同,不过是在properties的属性声明将其与assembly结合起来,具体示例如下. <profiles

解决jeecg3.5中由于easyui的原因会加载两次数据的问题

在解决完jeecgt3.5中的这个问题:jeecg3.5中实现从一个页面跳转到另一个页面 后,发现数据会被加载两次,在网上找了半天也没找到原因,最后发现是由于调用datagrid方法太快引起的,解决方法为使用setTimeout延迟执行datagrid方法,具体如下: $(function() { //延迟200毫秒执行,否则easyui会加载两次数据 setTimeout(init, 200); }); function init() { //alert($('#jeecgDemoList')

android studio创建assets目录并且利用webView加载其html

1.在Android Studio中添加assets目录,首先调整成project模式 在main的目录下新建一文件夹叫:assets .  WebView\src\main\assets 在项目的WebView.iml中加入: <option name="ASSETS_FOLDER_RELATIVE_PATH" value="/src/main/assets" /> 2.在利用webView加载html文件 <span style="w

tomcat加载两次项目,事务初始化多次

1.  项目重复启动    appBase设置和docBase设为一样,不写appBase默认也是webapps 2.  事务 通常会这样配置 代码这样写 但jeesite中,在启动时基本上会扫描所有的service   这会有个冲突在配置文件中开启事务时初始化了一次定时任务,在扫描service时又初始化了一次,在执行定时任务时就会同时执行两个task 如果人品不好(比如我),项目加载两次,事务初始化两次,那么每次执行就会有4个task Jeesite中定义事务只需要写一个task类,配置文件