关于tomcat的classloader的一点想法】的更多相关文章

关于tomcat的classloader相关的帖子网上非常多,我觉得比较好的有: https://www.jianshu.com/p/d90e4430b0b9 https://blog.csdn.net/qq_38182963/article/details/78660779 但是看了很多文章都说tomcat违反了双亲委派模型,可以是通过源码以及一些概念包括tomcat的delegate的设置描述并没有觉得tomcat是因为违反了双亲委派模型才实现多个应用的classpath隔离. 个人觉得:…
实际上,在Java应用中所有程序都运行在线程里,如果在程序中没有手工设置过ClassLoader,对于一般的java类如下两种方法获得的ClassLoader通常都是同一个 this.getClass.getClassLoader(): Thread.currentThread().getContextClassLoader(): 方法一得到的Classloader是静态的,表明类的载入者是谁: 方法二得到的Classloader是动态的,谁执行(某个线程),就是那个执行者的Classloade…
本系列博客打算分析一下tomcat7.x的源码,其中可能会穿插一些java基础知识的介绍  读tomcat的源码的时候,我建议和官方的User Guide一起阅读,明白tomcat做某件事情的目的之后,看源码会容易一点.另外,debug当然是一个非常重要的工具.源码上了规模之后,如果单纯静态地看,基本是看不出什么来的,但是跟着数据流走一走,很多问题就清楚了  debug环境的搭建方法,请看另外一篇博客:http://zhh2009.iteye.com/blog/1557891.这篇文章写得很清楚…
关于tomcat和classloader的文章,网上多如牛毛,且互相转载,所以大多数搜到的基本上是讲到了tomcat中classloader的几个层次,对于初接触classloader,看了之后还是只知其然不知其所以然. 一直比较好奇,为什么tomcat需要实现自己的classloader,jvm提供的classloader有什么不符合需要? 事实上,tomcat之所以造了一堆自己的classloader,大致是出于下面三类目的: 对于各个webapp中的class和lib,需要相互隔离,不能出…
原文:Installshield关于.NET安装时需要重启动的处理办法,以及延伸出的重启后继续安装的安装包的一点想法 很多朋友做安装包的时候,所打包的软件需要.NET Framework之类的环境,他们会检测系统是否已经安装了.NET,如果没有,则调用.NET安装包来安装.但是.NET安装完是需要重启动的,一般来说,我们都推荐使用/q/norestart的静默安装函数来使重启动推迟到安装结束时,使用如下:LaunchAppAndWait(SUPPORTDIR^"dotNetFx40_Full_x…
公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[MM系列]SAP S/4 HANA BP创建客户/供应商的一点想法   前言部分 大家可以关注我的公众号,公众号里的排版更好,阅读更舒适. 正文部分 在通过MDS_LOAD_COCKPIT从客户/供应商转换为业务合作伙伴的S/4 HANA期间,由于这些强制性业务合作伙伴字段组检查,不会创建BP.更多内容请关注公众号:SAP Technical…
定义 同其他服务器应用一样,tomcat安装了各种classloader(classes that implement java.lang.ClassLoader) Bootstrap | System | Common / \ Catalina Shared / \ Webapp1 Webapp2 ... / / Jasper1 Jasper2 Bootstrap: contains the basic runtime classes provided by the Java Virtual…
本文非技术文 十点半游戏的代码大概完成了1/3,想到今晚提早验收完汇编实验,还是副院长亲自验的,似乎很看好我的样子,然后问我的方向,导师和参加的项目.聊了几句后结束了对话,不禁又引发了我的一些思考. 关于方向我当初选择了软件方向.我自知自己对硬件的兴趣较小,当初选方向很快划掉了嵌入式方向:可能我更对网络方向感兴趣,但是这个方向并不可选,pass:数字媒体和软件的抉择也没多做考虑,果断选了软件,比起花花绿绿的东西我更喜欢朴素的吧,尽管底层都是朴素繁琐的东西. 然后是方向导师.惭愧.当初满腔热血选了…
2017 qcon 上海专门设立了“直击黑产,业务安全的攻与防”专题,通过这次专题的了解和学习,让我对黑产的攻防有了更深入认识. 1. 安全防护趋势 2017 qcon 上海专门设立了“直击黑产,业务安全的攻与防”专题,通过这次专题的了解和学习,让我对黑产的攻防有了更深入认识.有一张图可以充分说明黑产防护这一发展过程: 从最初的黑白名单,后来是规则引擎,再到现在各公司都开始采用机器学习进行风控.在安全防护升级的道路上,我觉得就是从静到动,再到自主学习的一个过程. 比如黑白名单.设备指纹,这一类安…
class很好反编译,所以需要对class文件先进行加密,然后使用自己的classloader进行解密并加载. [步骤] 大概分两步: 1.对class文件进行加密 2.写解密class文件并加载的classloader 3.将这个classloader加入到tomcat中,也就是使tomcat可以调用到这个classloader [加密] 1.思路 字节流读取class文件,进行简单的移位 2.实现 做了一个小程序,实现了对某文件夹下所有class文件字节流读取,并+2位的加密方式 3.说明…
有点失落.迷茫,差点在上班的时候发了火.原因是之前离职的一位同事,在代码里不加注释,而且百般偷懒,致使很多应该的验证没有验证,很多应该考虑到的情况没有考虑.因为是老员工,我相比他来说是新员工.气势上总是差那么一点点的,不敢去质疑前辈们的代码.但是这样下去,项目的质量一直提升不上去,讲他还不能讲,对于整个项目管理来说这样的员工就是一颗定时炸弹.虽然是写了代码,恭喜还能跑,但是这是在浪费公司的资源,也是在浪费同事的时间.这样的代码以后维护起来,是要花费很大的代价的,是非常大的代价.然而现在已经是这种…
最近研究servlet,看书时候书里讲到了c/s架构到b/s架构的演变,讲servlet的书都很老了,现在的b/s架构已经不是几年前的b/s架构,其实b/s架构就是web应用开发,对于这样的架构我们现在应该考虑的是前端和后端的分离(注意:这里的后端是指服务端). Web前端现在是一个独立的技术工种,这个工种的产生主要是针对互联网行业的需求,我在以前的文章里曾经讲到过,一个大型互联网网站,例如想淘宝网,它绝对不是一个Web项目,而是一群web项目的集合,那么如果不在前端进行整合,这么多web项目前…
今天在看某框架的源码的时候,遇到一个使用URLClassLoader加载Servlet类的问题,当自己在eclipse里面做试验的时候,始终无法把Class加载成功.比如: ClassLoader cl = new URLClassLoader(new URL[] {new URL("file:E:/xxx/src/main/java/primitive/servlet/")}); Class<?> c = cl.loadClass("xxxServlet&quo…
项目开发中,用到了缓存,其中的一个列表项,可能要多线程处理,就有了下面的想法,具体的问题在代码中有详细说明,见下文. static void Main(string[] args) { 测试缓存的想法(); Console.WriteLine("测试结束!"); Console.ReadKey(); } /// <summary> /// 静态的缓存,测试缓存是否存放的指针 /// </summary> private static MemoryCache me…
这几天在项目组只做了很少的事情,主要还是自己不认真地说.我的部分是要负责用itext导出word文档这一块,之前看到大佬们做出了EXCEL部分觉得很是惊奇,就像刚刚接触HTML一样的感觉.但是毕竟自己的任务就要好好的去完成,所以经过努力还是取得了一点的成果.的. 先上一个效果图 接下来就是代码了,码字不易,还有事情要做~~ 从前台利用Ajax传入到后台部分后,利用itext方法导出word,需要注意的是document.close和out.close这两个部分,没有close很容易出错. pub…
打包方式 eclipse  右键项目Export  选择WAR file 在选择将打包好的war 包存放的位置 放到tomcat中运行   : 首先将war包fang放到解压的tomcat中的webapps下 启动tomcat 会自动解压war包 启动方式 在bin目录下找到 startup (注意不是文件) 关闭是 shutdown 解压后的文件会在该目录下 同时在work文件夹中会生成编译后的文件 如果要删除 记得将work文件夹中的一起删除掉(一直点下去在localhost文件中) 之后就…
[吐槽] 嗯一开始接触到这个东西其实是因为某道凸包的题目好像可以用这个奇妙的方法来算 但其实了解也不是很深,只是觉得这个东西十分有意思, 所以先稍微写一下自己的想法,了解更多之后慢慢完善 [正题] 首先这个公式是长这样的: 取一个二次函数上(嗯..貌似是这样的)的一段区间,左端点为$(l, hl)$,右端点为$(r, hr)$,中间的那个点为$(\frac{r-l}{2}, hmid)$ 那么,这段的积分可以表示为: $\frac{(r-l)*(hl+4*hmid+hr)}{6}$ 但是这样往往…
闲着有点无聊想写点东西. 问题:生活中工作中,会有人问我javaNIO框架里面 Netty Mina  xSocket Grizzly 等等哪个比较好? 在这里写一下自己的感受,也算是总结一下吧 在我的印象中.不管是什么NIO框架.本身其实都是对Java底层的一种在封装.封装一套更简便,更易于扩展的一套东西以方便开发者使用.所以性能上也许会有所差异,但是绝对没有java和C++之间这么多.(代码写的太烂的除外,不过想要使用java写出很烂的代码也比较困难.)这些框架在性能方面差别不会超过1%.…
目前项目内部署了docker,于是涉及到关于监控的事情,参考一些经典实例以及一些自己的想法,总结一下思路. 1.关于监控的内容 监控宿主机本身 监控宿主机本身还是比较简单的,同其他服务器监控类似,对cpu.network.io.disk等做通用的检查,这里不再细说. 额外的,因为是docker的宿主机,还应该监控 容器本身的一些指标,如 : 拥有的全部的容器数量: 正在运行的容器的数量: dead容器的数量(如果此数量变化应该报警): docker 本身的信息,如Storage Driver.D…
目前项目内部署了docker,于是涉及到关于监控的事情,参考一些经典实例以及一些自己的想法,总结一下思路. 1.关于监控的内容 监控宿主机本身 监控宿主机本身还是比较简单的,同其他服务器监控类似,对cpu.network.io.disk等做通用的检查,这里不再细说. 额外的,因为是docker的宿主机,还应该监控 容器本身的一些指标,如 : 拥有的全部的容器数量: 正在运行的容器的数量: dead容器的数量(如果此数量变化应该报警): docker 本身的信息,如Storage Driver.D…
说起程序猿,总绕不开的一个话题就是bug,估计每个程序猿听到某某测试跑过来一脸淫笑的告诉你这个功能有个bug的时候,总有种恨不得掐死他的想法.其实程序猿跟bug的关系,感觉有点像父亲和儿子的关系,自己制造的bug,哭着也要自己解决,就像自己生的儿子,哪天又犯了错,就算气得恨铁不成钢,也要教育他帮他改正一样.好了,扯远了,按照一般程序猿的心理,bug再正常不过了,解决就是了.可是你想过,解决bug的时间和人力成本吗? 1.bug从修复到解决的流程 通常情况下,一个bug从发现到解决的流程应该是这几…
著名的王牌间谍 007 需要执行一次任务,获取敌方的机密情报.已知情报藏在一个地下迷宫里,迷宫只有一个入口,里面有很多条通路,每条路通向一扇门.每一扇门背后或者是一个房间,或者又有很多条路,同样是每条路通向一扇门…… 他的手里有一张表格,是其他间谍帮他收集到的情报,他们记下了每扇门的编号,以及这扇门背后的每一条通路所到达的门的编号.007 发现不存在两条路通向同一扇门. 内线告诉他,情报就藏在迷宫的最深处.但是这个迷宫太大了,他需要你的帮助 —— 请编程帮他找出距离入口最远的那扇门. 输入格式:…
JavaScript借鉴了许多语言的特点:例如语法类Java.函数借鉴Scheme.原型继承借鉴自Self.正则表达式借鉴于Perl.(DC Javascript:语言精粹).      首先,每个JS是一门基于原型继承的面向对象的语言.里面数组是对象.函数是对象.“对象”当然还是对象.而且每个对象都有一个internal slot[[prototype]],这才是原型链连接起来的关键.诚然,我们可以为一个对象设置prototype property,但这又怎么样呢,这只是表象:后面暗藏杀机.…
在好久之后终于搞完了miller-rabbin素性测试,谈谈自己的理解 要判断的数设为 a, 主要思想就是运用费马小定理来搞,随机几个数x(x<=a-1),判断x^(a-1)=1(mod a)是否成立,如果有不成立,a肯定不是素数 这是有一定错误几率的,随机n个数的错误几率为4^(-n) 这么看来,肯定是多来几组随机数比较保险,10比较稳 期间加入了二次探测定理,以提高miller-rabbin的效率 二次探测定理:若p是奇素数  x^2=1 (mod p) x的解一定为 1或p-1 如果不满足…
面向对象设计(OOD)有助于我们开发出高性能.易扩展以及易复用的程序.其中,OOD有一个重要的思想那就是依赖倒置原则(DIP). 依赖倒置原则(DIP):一种软件架构设计的原则(抽象概念) 控制反转(IoC):一种反转流.依赖和接口的方式(DIP的具体实现方式) 依赖注入(DI):IoC的一种实现方式,用来反转依赖(IoC的具体实现方式) IoC容器:依赖注入的框架,用来映射依赖,管理对象创建和生存周期(DI框架). Unity:是微软推出的IOC框架 TDD:测试驱动开发,是敏捷开发中的一项核…
维基百科中对于Knowledge Transfer(知识转移)的定义是: 知识转移是指分享或传播知识并为解决问题提供投入.在组织理论中,知识转移是将知识从组织的一个部分转移到另一个部分的实践问题. 与知识管理一样,知识转移旨在组织,创建,捕获或分发知识,并确保其可供未来用户使用. 它不仅仅是一个沟通问题. 如果只是沟通,那么只通过备忘录,电子邮件或会议就可以实现. 知识转移更复杂,因为: 知识存在于组织成员,工具,任务及其子网中. 组织中的许多知识都是依赖于默契或难以表达的. 笔者也经历过一些相…
在2年前写的博客,写的那么幼稚,工作了,工作经验多重要啊,有3年的开发经验,工资8000-12000 没接触Java框架之前,以为这些东西多神秘,多了不起,多高大上,其实也就那样 最重要的搞懂交互的流程,如何交互的看明白 1.阿贾克斯和后台程序的交互流程 2.实习看的第一个项目就是SpringMVC中的@Contorller和@RequestMapping 3.还有IOC中的, xml中的bean工厂,把生产者类的对象在XML中的bean工厂创建好,消费者类不必去new一个产品,直接去Bean工…
这几天看到好友的文章关于while(1)和for(;;)效率的讨论,手痒说了两句.回头一寻思,自己也仅仅是判断.没有做不论什么实验,我们就看看这两种写法究竟有什么差别: 实验环境:IAR EWARM 5.2 我就随便在一个嵌入式项目上做文章了,首先projectC语言编译优化选择了None, 输出选择带汇编输出,输出的汇编文件和C语言相应上. 我在main函数里先用for(;;)写了个死循环,我们看看编译结果: 注意main.c生成了一个相应的main.s 能够看到,是用一条跳转指令直接替代的f…
rwnd(窗口,代表接收端的处理能力).cwnd(拥塞窗口,从发送端看当前网络整体承载能力).ssthresh(快速增长切换成慢速增长的界限值) 1.慢启动,是指数增长(对面确认多少个包,就增加多少),并不慢,只是它的起点低,所以慢启动阶段仍需要时间.实际是起点低(1),快增长阶段,每一轮将当前拥塞窗口翻倍.2.拥塞避免,引入了ssthresh(这个是个变量,初始往往是最大值65536,随后续拥塞发生不断调整),控制慢启动阶段区间是在窗口超过ssthresh之后,就开始线性增长(是让cwnd缓慢…
1.java中会有精度问题,比如: double d1 = 2.0; double d2 = 1.7; System.out.println(d1-d2);//0.30000000000000004 会出现  0.30000000000000004这个结果而不是预期的0.3, BigDecimal b1 = new BigDecimal("2.0"); BigDecimal b2 = new BigDecimal("1.7"); System.out.println…