servlet装载Java类笔记

来源:互联网 发布:大连艺术学院网络平台 编辑:程序博客网 时间:2024/05/16 23:37

                                                                                                                   ---  catalina

bootstrap    ---  system (sun misc Launcher&appClassLoad) ---  common 

              

                                                                                                                                      ---  webapp1

                                                                                                                   ---  shared  

                                                                                                                                      ---  webapp2  ...

 

 

 

                                                  --- web.xml   注册servlet, 映射路径,指定默认打开页面

              --- WEB-INF  应用程序

                                                  --- classes 文件夹 --- class文件由webapp装载

应用程序

              --- demo  --- text.html

              ---  class文件直接由System类装载

 

张孝祥视频笔记

应用程序名称目录下的.class文件的装载器为system  classload  如果需要找到关联类,必须把关联类servlet-api.jar文件复制到Jdk  jre目录下的 lib 目录下ext 目录下  jar 包中

应用程序目录下WEB-INF目录下的classes目录下的.class文件则由Webappclassload 装载 ,只有Webapp自己可以加载到这个类

jdk目录下的jre文件下lib下的ext 目录下的jar包为核心装载器

webapp能够搜索到WEB-INF目录下classes文件夹下的.class文件

 

如果类文件没有找到,那么把文件所在路径增加到tomcat   bin 目录下 setclasspath.bat文件中  set classpath=; ; ;

 

如果在不同目录下存在两个相同名字的.class文件,浏览器没有遵循sun公司的建议,只有删除system能够装载的那个.class文件,才会用org.apache.catalina.loader.WebappClassLoad去装载.

 

Tomcat中的类装载器

1 .     Bootstrap 为Java虚拟机内嵌的类装载器与ExtClassLoader的总称,负责加载Java核心包中的类和存放在<JAVA_HOME>/jre/lib/ext目录下的类

2.  System即系统类装载器,通常情况下就是AppClassLoader,负责加载CLASSPATH环境变量设置的目录中的类.  Tomcat 不会继承操作系统上原来设置好的classpath环境变量的内容,而是将classpath环境变量重新设置为仅包含如下两个包:

<CATALINA_HOME>/bin/bootstrap.jar           <JAVA_HOME>/lib/tools.jar

3.  Common类装载器负责从<CATALINA_HOME>/COMMON/CLASSES中的.class类文件和<CATALINA_HOME>/common/lib中的jar包加载类

4.  Catalina类装载器负责从<CATALINA_HOME>/server/classes中的.class类文件和<CATALINA_HOME>/server/lib中的jar包加载类

5   Shared类装载器负责从<CATALINA_HOME>/share/classes中的.class类文件和<CATALINA_HOME>/share/lib中的jar包加载类

6WebappX类装载器负责从当前Web应用程序的/WEB-INF/classes中的.class类文件和/WEB-INF/lib中的jar包加载类

 

编写自动编译工具

1  编写Servlet源文件时的两个繁琐问题:

    (1) 必须将包含有Servlet API 的 jar文件加入到CLASSPATH环境变量的路径列表中

    (2) 编译生成的.class文件必须放置在Web应用程序的WEB-INF/classes目录中,并且有与包名对应的子目录结构

 2 解决方案:使用compile.bat批处理文件

    set CLASSPATH=C:/tomcat6.0/lib/servlet-api.jar;%CLASSPATH%

    javac  -d  d:/myweb/WEB-INF/classes  %1

    pause

 

tomcat也提供了是否自动重新装载被修改的Servlet的配置选项. 在tomcat6.0安装目录/conf/server.xml文件中,可以将<Context>元素的reloadable属性设置为true,这样  tomcat 将监视该WEB应用程序的/WEB-INF/classes和/WEB-INF/lib目录下的类是否发生了改变,然后自动重新装载那些发生了改变的类.

<Context path="/it315" docBase="d:/myweb" debug="0" reloadable"true"/>

 

 

原创粉丝点击