`
zgzlwm
  • 浏览: 20229 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

tomcat context.xml文件配置<Loader delegate="true" />

 
阅读更多
tomcat context.xml文件配置<Loader delegate="true" />


默认不写  参数  是  <Loader delegate="false" />


tomcat context.xml文件配置<Loader delegate="true" />作用?
网上很多人说: Loader对象可出现在Context中以控制Java类的加载。属性:delegate、含义:True代表使用正式的Java代理模式(先询问父类的加载器);false代表先在Web应用程序中寻找。默认值:FALSE


首先,你需要了解一下JVM的Classloader机制(详细请自行google之)。
简而言之,JVM的classloader加载继承关系分为BootstarpClassLoader --> ExtClassLoader --> SystemClassLoader,应用的WebAppClassLoader继承自SystemClassLoader,在加载具体某个类时,一般会先委托给父类ClassLoader,当父类ClassLoader无法加载成功时,才会再由子类ClassLoader尝试加载,这就是所谓的delegate机制。

其次,Tomcat在jvm的ClassLoader机制上增加了几个继承层次。
SystemClassLoader --> CommonClassLoader -->(ServerClassLoader | SharedClassLoader --> WebAppClassLoader)。
CommonClassLoader用来加载${CATALINA_HOME}/conf/catalina.properties中common.loader配置目录下的类文件,一般是用来加载${CATALINA_HOME}/lib下的文件。该loader加载的类为tomcat服务器和tomcat下面的所有webApp所共享。
ServerClassLoader用来加载${CATALINA_HOME}/conf/catalina.properties中server.loader配置目录下的类文件,一般是用来加载${CATALINA_HOME}/server下的文件。该loader加载的类为tomcat服务器所独有核心类,tomcat下面的WebApp无法访问。
SharedClassLoader用来加载${CATALINA_HOME}/conf/catalina.properties中shared.loader配置目录下的类文件,一般是用来加载${CATALINA_HOME}/shared下的文件。该loader加载的类为tomcat下面的所有webApp所共享。
WebAppClassLoader用来加载${CATALINA_HOME}/webapps/目录下每个WebApp应用的/WEB-INF/class,/WEB-INF/lib的类文件,每个WebApp对应一个WebAppClassLoader,用来加载其所需要的类文件。

最后,说一下delegate配置的意义。
True,表示tomcat将遵循JVM的delegate机制,即一个WebAppClassLoader在加载类文件时,会先递交给SharedClassLoader加载,SharedClassLoader无法加载成功,会继续向自己的父类委托,一直到BootstarpClassLoader,如果都没有加载成功,则最后由WebAppClassLoader自己进行加载。
False,表示将不遵循这个delegate机制,即WebAppClassLoader在加载类文件时,会优先自己尝试加载,如果加载失败,才会沿着继承链,依次委托父类加载。

在此说一下配置为False需要注意的问题:一旦配置为False,如果你在WebApp中自己定义了一个java.lang.String,则这个String类会有可能覆盖掉jdk中的String类,这也许不是你想要的结果。另外对于多个WebApp公用jar包,你可能会放到${CATALINA_HOME}/shared目录中共享,但是一不小心在应用的/WEB-INF/lib中也包含了一个同名的但版本不一致的jar的话,这就有可能会导致很多奇怪的问题。
分享到:
评论

相关推荐

    iOS可控抽奖系统代码

    # KZH-Lottery ###功能实现: * 随机抽奖闪动效果 * 引入数字指定中奖位置 ###技术要点: ...* 每次调用定时器递增当前时间,通过减结束时间控制递减...NSLog(@"delegate====&gt;抽到了第%ld个",count); } &lt;/code&gt;&lt;/pre&gt;

    海康视频卡动态库

    /// &lt;summary&gt; /// 板卡类型 /// &lt;/summary&gt; public enum BOARD_TYPE_DS : uint { DS400XM = 0, //M卡 DS400XH = 1, //H卡 DS4004HC = 2, //4004HC DS4008HC = 3, //4008HC DS4016HC = 4, //4016HC DS...

    仿飞秋,局域网聊天工具

    /// &lt;param name="text"&gt;&lt;/param&gt; private void AppString(sendData sendDatas) { int i = forms(sendDatas.fromIP); if (arryFrom[i].Forms.InvokeRequired == true) { arryFrom[i].Forms.Invoke...

    http长轮询技术comet的实现

    通过comet实现了一个聊天功能。 1.需要在tomcat的server.xml里面配置 &lt;Connector port="8081" protocol="org.apache.coyote.http11.Http11NioProtocol" connectionTimeout="20000" ...&lt;Loader delegate="true"/&gt;

    jQuery详细教程

    &lt;p&gt;&lt;a href="#" id="start"&gt;Start Animation&lt;/a&gt;&lt;/p&gt; &lt;div id="box" style="background:#98bf21;height:100px;width:100px;position:relative"&gt; &lt;/div&gt; &lt;/body&gt; &lt;/html&gt; jQuery 隐藏和显示 通过 hide() 和 show...

    c# http post get

    ///&lt;param name="postData"&gt;向服务器发送的文本数据&lt;/param&gt; ///&lt;returns&gt;服务器响应文本&lt;/returns&gt; public string OpenRead(string URL, string postData) { byte[] sendBytes = encoding.GetBytes(postData);...

    springmybatis

    查询出列表,也就是返回list, 在我们这个例子中也就是 List&lt;User&gt; , 这种方式返回数据,需要在User.xml 里面配置返回的类型 resultMap, 注意不是 resultType, 而这个resultMap 所对应的应该是我们自己配置的 ...

    eclipse java注释模板

    */&lt;/template&gt;&lt;template autoinsert="true" context="typecomment_context" deleted="false" description="创建的类型的注释" enabled="true" id="org.eclipse.jdt.ui.text.codetemplates.typecomment" name=...

    C#基础全接触

    //执行回调函数&lt;br&gt; }&lt;br&gt; }&lt;br&gt;}&lt;br&gt;&lt;br&gt;//调用&lt;br&gt;class DelegateApp&lt;br&gt;{&lt;br&gt; public static void ActiveConncetionCallback(DBConnection connection) //处理函数&lt;br&gt; {&lt;br&gt; ...&lt;br&gt; }&lt;br&gt;&lt;br&gt; public void ...

    使用 HTML5 webSocket API实现即时通讯的功能

    解决方法:Tomcat安装文件context.xml里的Context标签中添加&lt;Loader delegate="true" /&gt;即可解决该问题。 java.lang.NoSuchMethodError: org.apache.catalina.connector.RequestFacade.doUpgrade(Lorg/apache/...

    C#事件使用Demo(类内和类间)

    /// &lt;summary&gt; /// 定义委托类型 /// &lt;/summary&gt; public delegate void DelegateMainUI(); /// &lt;summary&gt; /// 定义委托事件 /// &lt;/summary&gt; private event DelegateMainUI FreshMainUI; /// &lt;summary&gt; /// 添加...

    自定义的类实现状态栏时间和网络状态的变化

    /// &lt;param name="strip"&gt;&lt;/param&gt; public MyStatusStrip(StatusStrip strip,MyClient client) { MastClient = client; InitCtrl(); } ~MyStatusStrip() { myTimer.Enabled = false; } ///网络...

    Agile.Project.Management.with.Scrum

    The more complex the project, the more necessary it becomes to delegate decision making to independent agents who are close to the work.&lt;br/&gt;&lt;br/&gt;Another reason that Scrum works is that it ...

    C#在RichTextBox中显示不同颜色文字的方法

    本文实例讲述了C#在RichTextBox中显示不同颜色文字的方法。分享给大家供大家参考。.../// &lt;param name=color&gt;文本颜色&lt;/param&gt; /// &lt;param name=text&gt;显示文本&lt;/param&gt; public void LogAppend(Color color, string t

    STQRCodeController:一个简易的二维码识别控制器

    STQRCodeController 一个简单使用的二维码识别控制器,代码量不到...&lt;key&gt;NSCameraUsageDescription&lt;/key&gt; &lt;string&gt;开启相机&lt;/string&gt; &lt;key&gt;NSPhotoLibraryUsageDescription&lt;/key&gt; &lt;string&gt;开启相册&lt;/string&gt; 效果图

    docker.rar

    ## docker.services配置文件内容 &gt; 创建docker启动文件(docker.services)放入/usr/lib/systemd/system/目录 ``` [Unit] Description=Docker Application Container Engine Documentation=http://docs.docker.com ...

    浅谈jquery中delegate()与live()

    &lt;div id=showspan&gt;&lt;span&gt;showspan**showspan&lt;/span&gt;&lt;/div&gt; &lt;span&gt;outspan&lt;/span&gt; [removed] &lt;!-- //效果就是点击一个段落&lt;div id=showspan&gt;中span标签将在span标签后面添加一个span标签,对于新增的span标签同样...

    C#实现Dev Grid拖拽移动行的方法

    本文实例讲述了C#实现Dev Grid拖拽移动行的方法。分享给大家供大家参考。具体如下: ...   拖拽时带行截图效果 ... /// &lt;param name=gvMain&gt;&lt;/param&gt; public static void DragGridRow&lt;T&gt;(this BandedGr

    C#贪吃蛇游戏的编制

    /// &lt;summary&gt; /// Form1 的摘要说明。 /// &lt;/summary&gt; public class mainForm : System.Windows.Forms.Form { //移动速度控制 private int speed = 500; //食物坐标 private Point foodPoint ; //...

    Visual C++ 编程资源大全(英文源码 COM)

    1,01.zip&lt;br&gt;Leveraging C++ Applications Using COM&lt;br&gt;使用COM提高C++应用程序的性能(8KB)&lt;END&gt;&lt;br&gt;2,02.zip&lt;br&gt;HOWTO Configure DCOM Timeouts&lt;br&gt;如何配置DCOM的超时设定(13KB)&lt;END&gt;&lt;br&gt;3,03.zip&lt;br&gt;...

Global site tag (gtag.js) - Google Analytics