Tomcat解析之初始化类加载器截图.docx
- 文档编号:29633928
- 上传时间:2023-07-25
- 格式:DOCX
- 页数:41
- 大小:84.51KB
Tomcat解析之初始化类加载器截图.docx
《Tomcat解析之初始化类加载器截图.docx》由会员分享,可在线阅读,更多相关《Tomcat解析之初始化类加载器截图.docx(41页珍藏版)》请在冰豆网上搜索。
Tomcat解析之初始化类加载器截图
Tomcat解析之初始化类加载器(截图)
之前有写过关于tomcat中常用的一些类结构的文章。
解析Tomcat之HttpServlet(截图记录)
今天来关注一下,tomcat的类加载器相关的内容。
PS:
由于前一篇文章内容比较简单,有朋友冠以我标题党之嫌,对于此种说法,本人深感抱歉,可能标题确实有点大,但是这些常用的类,我更多的时候只关注其用法,而忽略了内部实现,所以也就把这些内容总结了一下,发了出来。
别无标题党之意,请各位eyer海涵。
OK,现在进入正题.Tomcat类加载器初始化.
开始之前,我们首先需要了解一下几个基本的知识点;
1.tomcat中类加载器的结构与关系。
这里,我引用tomcat文档的一个简图来说明一下,有兴趣深究的朋友,可以去翻看tomcat的文档,理解更多信息.
2.每种类加载器分别加载什么资源:
这些内容,可以在tomcat文档的 ClassLoaderHOW-TO找到.
这里我要说明的是,在tomcat中,这些内容是记录在哪里的。
既(程序怎么让tomcat知道,需要加载哪些类)
答案是-----
其通过一个配置文件来指定的:
(catalina.properties),这个文件默认存放在
tomcat路径下的bin/bootstrap.jar中。
如图
打开文件,其内容如下:
Java代码
1.# Licensed to the Apache Software Foundation (ASF) under one or more
2.# contributor license agreements. See the NOTICE file distributed with
3.# this work for additional information regarding copyright ownership.
4.# The ASF licenses this file to You under the Apache License, Version 2.0
5.# (the "License"); you may not use this file except in compliance with
6.# the License. You may obtain a copy of the License at
7.#
8.# http:
//www.apache.org/licenses/LICENSE-2.0
9.#
10.# Unless required by applicable law or agreed to in writing, software
11.# distributed under the License is distributed on an "AS IS" BASIS,
12.# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13.# See the License for the specific language governing permissions and
14.# limitations under the License.
15.
16.#
17.# List of comma-separated packages that start with or equal this string
18.# will cause a security exception to be thrown when
19.# passed to checkPackageAccess unless the
20.# corresponding RuntimePermission ("accessClassInPackage."+package) has
21.# been granted.
22.package.access=sun.,org.apache.catalina.,org.apache.coyote.,org.apache.tomcat.,org.apache.jasper.,sun.beans.
23.#
24.# List of comma-separated packages that start with or equal this string
25.# will cause a security exception to be thrown when
26.# passed to checkPackageDefinition unless the
27.# corresponding RuntimePermission ("defineClassInPackage."+package) has
28.# been granted.
29.#
30.# by default, no packages are restricted for definition, and none of
31.# the class loaders supplied with the JDK call checkPackageDefinition.
32.#
33.package.definition=sun.,java.,org.apache.catalina.,org.apache.coyote.,org.apache.tomcat.,org.apache.jasper.
34.
35.#
36.#
37.# List of comma-separated paths defining the contents of the "common"
38.# classloader. Prefixes should be used to define what is the repository type.
39.# Path may be relative to the CATALINA_HOME or CATALINA_BASE path or absolute.
40.# If left as blank,the JVM system loader will be used as Catalina's "common"
41.# loader.
42.# Examples:
43.# "foo":
Add this folder as a class repository
44.# "foo/*.jar":
Add all the JARs of the specified folder as class
45.# repositories
46.# "foo/bar.jar":
Add bar.jar as a class repository
47.common.loader=${catalina.home}/lib,${catalina.home}/lib/*.jar
48.
49.#
50.# List of comma-separated paths defining the contents of the "server"
51.# classloader. Prefixes should be used to define what is the repository type.
52.# Path may be relative to the CATALINA_HOME or CATALINA_BASE path or absolute.
53.# If left as blank, the "common" loader will be used as Catalina's "server"
54.# loader.
55.# Examples:
56.# "foo":
Add this folder as a class repository
57.# "foo/*.jar":
Add all the JARs of the specified folder as class
58.# repositories
59.# "foo/bar.jar":
Add bar.jar as a class repository
60.server.loader=
61.
62.#
63.# List of comma-separated paths defining the contents of the "shared"
64.# classloader. Prefixes should be used to define what is the repository type.
65.# Path may be relative to the CATALINA_BASE path or absolute. If left as blank,
66.# the "common" loader will be used as Catalina's "shared" loader.
67.# Examples:
68.# "foo":
Add this folder as a class repository
69.# "foo/*.jar":
Add all the JARs of the specified folder as class
70.# repositories
71.# "foo/bar.jar":
Add bar.jar as a class repository
72.# Please note that for single jars, e.g. bar.jar, you need the URL form
73.# starting with file:
.
74.shared.loader=
75.
76.#
77.# String cache configuration.
78.tomcat.util.buf.StringCache.byte.enabled=true
79.#tomcat.util.buf.StringCache.char.enabled=true
80.#tomcat.util.buf.StringCache.trainThreshold=500000
81.#tomcat.util.buf.StringCache.cacheSize=5000
#LicensedtotheApacheSoftwareFoundation(ASF)underoneormore
#contributorlicenseagreements.SeetheNOTICEfiledistributedwith
#thisworkforadditionalinformationregardingcopyrightownership.
#TheASFlicensesthisfiletoYouundertheApacheLicense,Version2.0
#(the"License");youmaynotusethisfileexceptincompliancewith
#theLicense.YoumayobtainacopyoftheLicenseat
#
#http:
//www.apache.org/licenses/LICENSE-2.0
#
#Unlessrequiredbyapplicablelaworagreedtoinwriting,software
#distributedundertheLicenseisdistributedonan"ASIS"BASIS,
#WITHOUTWARRANTIESORCONDITIONSOFANYKIND,eitherexpressorimplied.
#SeetheLicenseforthespecificlanguagegoverningpermissionsand
#limitationsundertheLicense.
#
#Listofcomma-separatedpackagesthatstartwithorequalthisstring
#willcauseasecurityexceptiontobethrownwhen
#passedtocheckPackageAccessunlessthe
#correspondingRuntimePermission("accessClassInPackage."+package)has
#beengranted.
package.access=sun.,org.apache.catalina.,org.apache.coyote.,org.apache.tomcat.,org.apache.jasper.,sun.beans.
#
#Listofcomma-separatedpackagesthatstartwithorequalthisstring
#willcauseasecurityexceptiontobethrownwhen
#passedtocheckPackageDefinitionunlessthe
#correspondingRuntimePermission("defineClassInPackage."+package)has
#beengranted.
#
#bydefault,nopackagesarerestrictedfordefinition,andnoneof
#theclassloaderssuppliedwiththeJDKcallcheckPackageDefinition.
#
package.definition=sun.,java.,org.apache.catalina.,org.apache.coyote.,org.apache.tomcat.,org.apache.jasper.
#
#
#Listofcomma-separatedpathsdefiningthecontentsofthe"common"
#classloader.Prefixesshouldbeusedtodefinewhatistherepositorytype.
#PathmayberelativetotheCATALINA_HOMEorCATALINA_BASEpathorabsolute.
#Ifleftasblank,theJVMsystemloaderwillbeusedasCatalina's"common"
#loader.
#Examples:
#"foo":
Addthisfolderasaclassrepository
#"foo/*.jar":
AddalltheJARsofthespecifiedfolderasclass
#repositories
#"foo/bar.jar":
Addbar.jarasaclassrepository
common.loader=${catalina.home}/lib,${catalina.home}/lib/*.jar
#
#Listofcomma-separatedpathsdefiningthecontentsofthe"server"
#classloader.Prefixesshouldbeusedtodefinewhatistherepositorytype.
#PathmayberelativetotheCATALINA_HOMEorCATALINA_BASEpathorabsolute.
#Ifleftasblank,the"common"loaderwillbeusedasCatalina's"server"
#loader.
#Examples:
#"foo":
Addthisfolderasaclassrepository
#"foo/*.jar":
AddalltheJARsofthespecifiedfolderasclass
#repositories
#"foo/bar.jar":
Addbar.jarasaclassrepository
server.loader=
#
#Listofcomma-separatedpathsdefiningthecontentsofthe"shared"
#classloader.Prefixesshouldbeusedtodefinewhatistherepositorytype.
#PathmayberelativetotheCATALINA_BASEpathorabsolute.Ifleftasblank,
#the"common"loaderwillbeusedasCatalina's"shared"loader.
#Examples:
#"foo":
Addthisfolderasaclassrepository
#"foo/*.jar":
AddalltheJARsofthespecifiedfolderasclass
#repositories
#"foo/bar.jar":
Addbar.jarasaclassrepository
#Pleasenotethatforsinglejars,e.g.bar.jar,youneedtheURLform
#startingwithfile:
.
shared.loader=
#
#Stringcacheconfiguration.
tomcat.util.buf.StringCache.byte.enabled=true
#tomcat.util.buf.StringCache.char.enabled=true
#tomcat.util.buf.StringCache.trainThreshold=500000
#tomcat.util.buf.StringCache.cacheSize=5000
此文件,下面会有详细的介绍.
OK,到此,我们初步了解到tomcat关于类加载器的一些知识。
下面来详细看看,tomcat内部是怎么来初始化这些类加载器的吧.
首先,我们知道,java程序都需要一个入口(main方法),而在tomcat中,这个入口在
org.apache.catalina.startup.Bootstrap这个类中。
看其结构:
定位到方法内部:
Java代码
1.public static void main(String args[]) {
2.
3. if (daemon == null) {
4. daemon = new Bootstrap();
5. try {
6. //初始化资源 (今天来了解的.)
7. daemon.init();
8. } catch (Throwable t) {
9. t.printStackTrace();
10. return;
11. }
12. }
13.
14. try {
15. //默认为启动
16. String command = "start";
17. if (args.length > 0) {
18. command = args[args.length - 1];
19. }
20.
21. if (command.equals("startd")) {
22. args[args.length - 1] = "start";
23. daemon.load(args);
24. daemon.start();
25. } else if (command.equals("stopd")) {
26. args[args.length - 1] = "stop";
27. daemon.stop();
28. } else if (command.equals("start")) {
29.
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Tomcat 解析 初始化 加载 截图