Java EE

Tomcat源码分析 (五)----- Tomcat 类加载器

守給你的承諾、 提交于 2020-11-20 07:58:40
在研究tomcat 类加载之前,我们复习一下或者说巩固一下java 默认的类加载器。楼主以前对类加载也是懵懵懂懂,借此机会,也好好复习一下。 楼主翻开了神书《深入理解Java虚拟机》第二版,p227, 关于类加载器的部分。请看: 什么是类加载机制? Java虚拟机把描述类的数据从Class文件加载进内存,并对数据进行校验,转换解析和初始化,最终形成可以呗虚拟机直接使用的Java类型,这就是虚拟机的类加载机制。 虚拟机设计团队把类加载阶段中的“通过一个类的全限定名来获取描述此类的二进制字节流”这个动作放到Java虚拟机外部去实现,以便让应用程序自己决定如何去获取所需要的类。实现这动作的代码模块成为“类加载器”。 类与类加载器的关系 类加载器虽然只用于实现类的加载动作,但它在Java程序中起到的作用却远远不限于类加载阶段。对于任意一个类,都需要由 加载他的类加载器和这个类本身一同确立其在Java虚拟机中的唯一性 ,每一个类加载器,都拥有一个独立的类命名空间。这句话可以表达的更通俗一些:比较两个类是否“相等”, 只有在这两个类是由同一个类加载器加载的前提下才有意义 ,否则,即使这两个类来自同一个Class文件,被同一个虚拟机加载,只要加载他们的类加载器不同,那这个两个类就必定不相等。 什么是双亲委任模型? 从Java虚拟机的角度来说,只存在两种不同类加载器:一种是 启动类加载器

Tomcat架构解析(五)-----Tomcat的类加载机制

。_饼干妹妹 提交于 2020-11-20 07:30:20
类加载器就是根据类的全限定名(例如com.ty.xxx.xxx)来获取此类的二进制字节流的代码模块,从而程序可以自己去获取到相关的类。 一、java中的类加载器 1、类加载器类别 java中的类加载器主要分为三类: Bootstrap ClassLoader:启动类加载器,负责加载<JAVA_HOME>\lib目录中的class文件; Extension ClassLoader:扩展类加载器,负责加载<JAVA_HOME>\lib\ext路径下的class文件; Application ClassLoader:应用程序类加载器,也称为系统类加载器。负责加载用户路径上所指定的类库,开发者可以直接使用,如果开发者没有自己定义类加载器,一般就是使用此类加载器。 类加载器的层次结构如下: 2、双亲委派模型 要求:除了顶层的启动类加载器之外,其他的类加载器都必须具有父类 解释:如果一个类加载器收到了加载类的请求,首先并不会自己尝试加载这个类,而是将请求委派给父类加载器完成,父类又去委派给其父类,因此最终的请求都到了顶层,若顶层类加载器无法加载,子类再尝试自己加载。 好处:费了这么大劲,到底有啥好处呢? 按照双亲委派模型加载类,会让类首先有一种层次感,或者说是上下级感。最顶层的类加载器只加载<JAVA_HOME>\lib下的class文件,这是jdk的核心所在

java和Discuz论坛实现单点登录,通过Ucenter(用户管理中心)

怎甘沉沦 提交于 2020-11-19 22:30:50
一 Discuz论坛搭建步骤 1:服务器环境配置 服务器要支持php语言+支持mysql 5.0以上的数据库 + Apache服务器(支持网站的一个服务器,通过域名的能访问就可以了) Msql5.0以上的数据库一个。 2:安装Discuz (1)下载Discuz源码包 http://www.discuz.net/thread-3570835-1-1.html (2)解压源码包Discuz_X3.2_SC_GBK.zip(这里以Discuz X3/2为例)有三个文件,把 其中的upload文件夹里面的内容放在网站的根目录下。 注意: 是upload文件夹下面的所有内容放入网站根目录下,如果把upload整个文件夹放在网站根目录访问的地址就是 http://localhost/upload ) (3)访问域名地址就开始安装如图:参考地址: http://jingyan.baidu.com/article/ac6a9a5ea76e022b653eacca.html 配置数据库信息: 提前创建好mysql数据库,用户/密码,这里进行配置。同时给设置一个管理员账号和密码:点击下一步 注意:一定是mysql 5.0以上的数据库版本 如果没有问题的话就安装成功了。它会自动创建对应的数据库表等相关信息。 然后访问域名就直接可以访问论坛了。   3:Discuz的简单配置介绍 (1

面试被问到分布式锁,凉凉

筅森魡賤 提交于 2020-11-18 08:41:21
随着企业应用规模越来越大,为了满足业务增长的需求,几乎所有一线的互联网公司都会面临分布式场景,比如“618”,双11 大促,抢票,社群裂变等活动。 能否解决分布式业务问题,成为大厂面试时的重点考核内容。 然而,想把分布式掌握好并不是一蹴而就的,如果只是临时抱佛脚,草草记下一些概念就去应聘,稍一深入,就答不上来,结果可想而知。比如 现在实现分布式锁的技术方案就不少,那么面试官经常都会问到什么深度呢? 下面列举几个问题,大家可以参考下: “ XA 规范有哪些优化措施? 基于数据库实现分布式锁有哪些问题? 使用Zookeeper实现分布式锁时,如何选择重试策略?” 正值暑期求职旺季, 不少朋友苦于搜集资料耗时耗力,很难 cover 住面试官的考核角度。为了能让大家在准备面试时少走弯路,这里特别推荐一个限时福利——开课吧历时三个月打造的 “分布式专题精品课” 内容对本公众号免费开放 5 天。 本次专题视频的讲师都源于国内知名互联网公司,花费了近三个月的时间,调研精选各大互联网企业真实业务场景和用人需求,经过多次迭代,最终形成了这套专题内容来帮助正在求职的朋友们。 听下来,你可以: 收获完整的分布式开发学习路径 在实际业务场景中理解分布式事务和锁的本质,并进行性能调优 吸收业界专家的经验分享,加速分布式技能进阶 加深分布式底层和核心技术的理解 轻松应对面试中分布式问题

使用IntelliJ IDEA配置Tomcat(入门)

大兔子大兔子 提交于 2020-11-18 05:01:00
原文 一、下载Tomcat 1、进入官网http://tomcat.apache.org/,选择download,下载所需Tomcat版本。 此处我们选择下载最新版本Tomcat 9。 注意有zip和exe两种格式的,zip(64-bit Windows zip(pgp,md5,sha1))是免安装版的,exe(32-bit/64-bit Windows Service installer(pgp,md5,sha1))是安装版。同时观察自己的电脑是64位系统还是32位系统。 此处选择下载zip版; 下载后直接解压缩, 2、找到目录bin下的startup.bat,点击启动Tomcat;shutdown.bat:关闭Tomcat。 3、启动Tomcat后,打开浏览器,键入 http://localhost:8080 进入如下页面则表示安装成功: 二、Tomcat环境变量配置 1、安装完成后,右击"我的电脑",点击"属性",选择"高级系统设置"; 2、选择"高级"选项卡,点击"环境变量"; 然后就会出现如下图所示的画面: 3、在”系统变量“中添加系统变量CATALINA_BASE,CATALINA_HOME; 变量名:CATALINA_BASE 变量值:D:\tools\apache-tomcat-8.5.4 //Tomcat安装目录 变量名:CATALINA_HOME 变量值:D:

框架的认识

♀尐吖头ヾ 提交于 2020-11-18 04:25:37
参考: 框架的认识 框架: 1.是什么:框架就是一套规范。既然是规范,你使用这个框架就要遵守这个框架所规定的约束。在Java开发中, 框架是用一套规则 + 一群jar包来表示的 。 内容理解:框架是一套规范。具体到Java,是一套规则+一群jar包。 2.为什么:我们为什么要使用框架? (1)原因:在我们的开发中,如果一个类的名字,A同学起名字叫A.java B同学起名教B.java,可是其实这两个类的功能是一样的,但是就是因为没有规范,所以造成了混乱,不利于 团队合作与开发 ,如果使用了框架,框架就会对类的名字有约束,比如Struts,控制类我们都起名字叫**Action 这样很容易让人看明白功能。 (2)意义:框架不仅仅只完成这些简单的约束,更重要的是,框架为我们 封装好了一些冗余 ,且重用率低的代码。并且使用反射与动态代理机制,将 代码实现了通用性 。比如如果你说servlet开发,你需要在servlet获取表单的参数,每次都要获取很麻烦,而struts底层就使用反射机制和拦截器机制帮助我们获取表单的值,我们就不用每次都手写那些代码了,简化了开发,当然你必须遵守一些规定来配置。还有比如hibernate,它提供了一些通用性很强的对数据库的增删改差,如果你使用jdbc每次做一些简单的crud的时候都必须写sql,但使用hibernate就不需要这么麻烦了,直接save

Springmvx拦截html出现406解决以及Server Tomcat v8.0 Server at localhost failed to start 问题解决方法

青春壹個敷衍的年華 提交于 2020-11-18 04:22:59
问题是这样的:环境是SSM框架,在配置好的框架里想请求一个html,结果406了,406就是HTTP协议状态码的一种,表示无法使用请求的特性来响应请求的网页。一般指客户端浏览器不接受所请求页面的MIME类型。 解决办法就是 < servlet-mapping > < servlet-name > seckill-dispatchServlet </ servlet-name > <!-- 直接拦截所有请求,不再采用spring2.0的/*或者*.do方式 --> < url-pattern > *.do </ url-pattern > </ servlet-mapping > 改成 < servlet-mapping > < servlet-name > seckill-dispatchServlet </ servlet-name > <!-- 直接拦截所有请求,不再采用spring2.0的/*或者*.do方式 --> < url-pattern > *.do </ url-pattern > </ servlet-mapping > 至于为什么这样改就行,我也不是很懂,因为另一个项目里配置的也是/ 但是能访问html页面 Server Tomcat v8.0 Server at localhost failed to start 问题解决方法? 原来的 < servlet

应届毕业程序员找工作,企业最看重你们这些地方

拜拜、爱过 提交于 2020-11-17 08:38:16
这篇文章来谈一下应届生找工作的问题,最近有很多在校大学生跟我咨询很多企业很多工作要求有工作经验,那这样没工作经验的人都去哪学经验,要求工作经验真的有必要吗? 应届生毕业找工作,一直有一个困惑是什么,刚毕业没有工作经验,但是呢,企业又需要你有工作经验,但是你刚毕业找不到工作不可能有工作经验,好像陷入了一个死循环。其实这种情况企业是不可能不知道的,所以工作经验对于应届生来说不是硬性的考察标准。 那企业需要考察哪些东西来选择应届生呢? 第一,你是否参加过一些重要的比赛或者是校内竞争,比如说编程比赛,数学建模比赛这些,你在其中有没有拿过奖励,如果你没有得奖,那么也无所谓,重在参与,只要你参与了,就说明你有这个能力,所以只要有机会,我建议所有在校大学生多去参加这样的比赛或者是活动,这些东西对于你未来找工作其实是很重要的,大学里面的一些比赛其实并没有那么难,只要你多动动脑子,你会发现基本可以获得一个名次。这个名词对于你未来找工作是很重要的。 第二,专业很重要,这就是所谓的科班出生,科班出生指的是和计算机行相关专业,比如说计算机科学与技术,软件工程,大数据等等。这代表着你有很好的基础,比如说汇编原理,数据结构与算法操作系统,数据库等等,这代表你经过系统化正规化的学习你在着方面有过很好的培训和了解,最重要的是有娘好的逻辑思维。 第三,项目经验,项目经验一直都是应届生的一个硬伤

Spring源码分析(一):从哪里开始看spring源码(系列文章基于Spring5.0)

安稳与你 提交于 2020-11-17 07:47:25
概述 对于大多数第一次看spring源码的人来说,都会感觉不知从哪开始看起,因为spring项目源码由多个子项目组成,如spring-beans,spring-context,spring-core,spring-aop,spring-web,spring-webmvc等,整个项目结构如图: 可能有人会觉得,既然spring是一个IOC容器或者说是一个bean的容器,那么应该从spring-beans看起,先了解spring是如何从xml文件配置获取需要创建的bean的信息,但是这里有个问题就是虽然知道怎么遍历初始化,但是不知道哪里用到或者说哪里让这些初始化开始,而且像BeanFactory,FactoryBean,Environment,PropertySource等接口还是比较抽象的,比较难看懂,所以很容易让人感觉枯燥,然后就放弃了。 我们可以换个思路,从能接触到的角度开始,即我们通常会使用spring-mvc来进行web开发,如@Controller,@RequestMapping都是再熟悉不过的了。如果搭过spring-mvc项目都知道,通常需要在web.xml文件中,配置一个ContextLoaderListener,contextConfigLocation,DispatcherServlet

SpringBoot+MybatisPlus+Mysql+JSP

烂漫一生 提交于 2020-11-17 03:43:58
放个效果图: 准备项目 首先在MySql控制台输入一下sql语句创建student 数据库和student。 create databse student ; use student ; CREATE TABLE ` student ` ( ` stu_id ` bigint ( 20 ) NOT NULL , ` stu_name ` varchar ( 45 ) DEFAULT NULL , ` stu_sex ` varchar ( 6 ) DEFAULT NULL , ` date ` varchar ( 45 ) DEFAULT NULL , ` room ` int ( 2 ) DEFAULT NULL , ` acadimy ` varchar ( 45 ) DEFAULT NULL , PRIMARY KEY ( ` stu_id ` ) ) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ; SpringBoot 修改项目名称,点击next 这里直接点next 第一次打开会很慢 打开后删除用不到的文件 连接MySql 修改 application.properties 为 application.yml 插入一下代码 要修改的内容: url: jdbc:mysql:/