
Tomcat通过使用ClassLoader来读取其他文件夹下的class文件,并将其加载到内存中,然后使用反射机制来调用其中的方法,从而实现启动。Tomcat的ClassLoader是一个层次结构,它可以从多个路径中加载class文件,而且可以按照自定义的顺序加载。Tomcat可以从多个路径中加载class文件,例如:WEB-INF/classes,WEB-INF/lib,Tomcat/lib,Tomcat/bin等。Tomcat在启动的时候,会先加载Tomcat/bin目录下的class文件,然后加载WEB-INF/lib目录下的class文件,最后加载WEB-INF/classes目录下的class文件。
一 相对路径的获得
说明:相对路径(即不写明时候到底相对谁)均可通过以下方式获得(不论是一般的java项目还是web项目)
String relativelyPath=SystemgetProperty("userdir");
上述相对路径中,java项目中的文件是相对于项目的根目录
web项目中的文件路径视不同的web服务器不同而不同(tomcat是相对于 tomcat安装目录\bin)
二 类加载目录的获得(即当运行时某一类时获得其装载目录)
11)通用的方法一(不论是一般的java项目还是web项目,先定位到能看到包路径的第一级目录)
InputStream is=TestActionclassgetClassLoader()getResourceAsStream("testtxt");
(testtxt文件的路径为 项目名\src\testtxt;类TestAction所在包的第一级目录位于src目录下)
上式中将TestAction,testtxt替换成对应成相应的类名和文件名字即可
12)通用方法二 (此方法和11中的方法类似,不同的是此方法必须以'/'开头,参考>
方法一:pomxml文件配置:如果配置文件放在src/main/resources目录下,maven默认会把这个文件夹下的文件复制到classes目录下,如果你不死放在默认目录下,你可以手动指定Resources目录和输出目录。配置如下:
<build>
<sourceDirectory>src/</sourceDirectory>
<outputDirectory>build/</outputDirectory>
</build>
方法二:把配置文件打包到其他人员目录:可以使用orgapachemavenplugins插件。
打开eclipse插件项目的pluginxml文件(Plugin manifest editor),在可视编辑器中有一项build,在build页右上角有个Export Deployable plug-ins
可以使用这个功能打包插件,发布成zip包或指定目录。
如果有第三方jar包,可以放在项目的lib目录下,然后在META-INF/MANIFESTMF文件里配置
Bundle-ClassPath: ,
/classes,
lib/commons-beanutilsjar,
lib/commons-codec-14jar,
lib/commons-collectionsjar,
使用以上工具导出zip文件的时候,记得要选上options--use class files compiled in the workspace。这样导出zip包里的jar文件,class文件是在根目录下。如果不使用“use class”的选项,通过pluginxml中build编辑页面配置输出文件跟文件夹的话,class文件会在jar包的“classes(默认是bin)”目录下,这时打包出来的插件安装到eclipse后会报错:
Chosen operation is not currently available
这时看workspace\metadata\log文件中的错误,会找不到eclipse插件项目中的类。使用“use class”选项会解决这个问题,但会导致jar包根目录下多一套第三方jar包(lib目录下已经有一套了),这个时候就要使用排除。最终buildproperties文件配置示例如下:
binincludes = pluginxml,\
META-INF/,\
,\
icons/,\
temp/,\
lib/
source = lib/
output = classes/
jarscompileorder =
binexcludes = commons-beanutilsjar,\
commons-codec-14jar,\
commons-collectionsjar,\
commons-io-14jar,\
commons-jexl-11jar,\
commons-lang-20jar,\
commons-loggingjar,\
commons-validatorjar,\
velocity-14jar,\
xstream-131jar
其中source的配置默认生成是 src/,如果这样配置在不使用“use class files compiled in the workspace”选项导出的时候会报错,改成存放第三方jar包的lib目录就没有错了。
存放的是一些编译后的class文件和运行所必须的配置文件。
解释:java运行过程中会将java文件编译为class文件,而此文件的存储位置默认就是在classes路径下,还有一些其余的xml文件、prepertise文件也会编译在此路径下。
遵守由小到大,由内到外先调用当前的,也就是应用程序自己的,然后调用类库Lib中的
先调用的是lib中的包, tomcat启动的时候首先把lib库中的包加载进来,会先把lib包中的类都加载上,然后才是你应用程序中应用到的包,程序执行时加载classes中的类。
lib下面都是打了包的,通常做类库用的;
classes下面属于可以更改的servlet,ejb什么的。
1 在/server/lib 目录下的JAR文件只可被TOMCAT服务器访问。
2 在/shared/lib 目录下的JAR文件可以被所有的WEB应用访问,但不能被TOMCAT服务器访问
3 在commond/lib 目录下的JAR文件可以被TOMCAT服务器和WEB应用访问。
这里有更详细的解释:
>
以上就是关于tomcat是怎么读取其他文件下的class文件进行启动的全部的内容,包括:tomcat是怎么读取其他文件下的class文件进行启动的、在java类中怎么获得java项目的目录、打包时怎么把配置文件一起打包进去等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)