tomcat是怎么读取其他文件下的class文件进行启动的

tomcat是怎么读取其他文件下的class文件进行启动的,第1张

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项目的目录、打包时怎么把配置文件一起打包进去等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/9689110.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-01
下一篇2023-05-01

发表评论

登录后才能评论

评论列表(0条)

    保存