热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

试用Tomcat7.x与Tomcat6.x的明显不同+Context填写方法+默认应用配置方法

今天开始在单位推广Tomcat7,竟然碰到了好多问题。到现在才刚刚解决的差不多。在此介绍一下。Tomcat6下边程序运行极其正常换了Tomcat7忽然不能用的都来看看了~

今天开始在单位推广 Tomcat7 ,竟然碰到了好多问题。到现在才刚刚解决的差不多。在此介绍一下。

Tomcat6下边程序运行极其正常换了 Tomcat7 忽然不能用的都来看看了~


---------- ---------- ---------- ---------- ----------


第一个问题是关于数据库驱动程序加载。受数据库驱动异常困扰的同胞们,Tomcat7 下边因为 Tomcat 限定了类加载执行时静态代码的执行,需要在生成对象的时候才能够真正执行,所以在 Tomcat6 以前大家熟悉的数据库驱动程序加载方式:

Class cls = com.mysql.jdbc.Driver.class;
或者

Class.forName("com.mysql.jdbc.Driver");
都已经不能用了。在使用 DriverManager 生成的数据库连接的时候,会出现“No suitable driver found for jdbc”这个异常。


现在正确的数据库驱动程序加载方式,要求生成数据库驱动类的对象。推荐

com.mysql.jdbc.Driver.class.newInstance();
这种方式不用处理异常,而且生成的无用对象会最短时间被垃圾回收。

当然了,也可以用一个引用类型变量把此对象接出来,但没有什么实际用途吧……

java.sql.Driver driver = com.mysql.jdbc.Driver.class.newInstance();
其中 java.sql.Driver 是各个数据库管理系统提供的驱动程序类的接口,属于 JDBC 规范,适合用 import java.sql.Driver; 进行缩写。


---------- ---------- ---------- ---------- ----------


第二个问题,是线程启动的问题。因为 Tomcat7 或者 -server 方式运行的爪哇虚拟机(JVM)的一些我尚未掌握的保护机制,所以当一个线程经历空循环时,就会被架空。

while(flag) { }
于是通过 flag 作为线程控制变量的控制方法,就没办法继续使用了。这个时候,要时常跳过这个人工卡死的线程,以便其能够总在执行而不会真的陷入僵死。

while(flag) { Thread.yield(); }


---------- ---------- ---------- ---------- ----------


Tomcat7 的配置文件中,Context 配置,debug 属性被取消了,如果依然使用,会报出一个警告。

同时 unpackWAR 属性的默认值,在 Tomcat6 时是 true ,意味着默认状态将会解压 .war 然后再执行;而 Tomcat7 变成了默认 false ,不展开。


---------- ---------- ---------- ---------- ----------


另外还有一个并不是 Tomcat7 新有的特点。之前 conf/Catalina/localhost 下边会自动建立 ROOT.xml ,现在不会了。然后之前此目录下的配置文件,会以其中 path 属性指明的路径为“应用路径”;现在则会以 XML 文件的名字作为应用路径。如果大家想制作一个不需要填写应用路径就可以访问的应用,请记得一定要自己建立一个 ROOT.xml ,区分大小写,然后在其中编写 片段。

这个例子比较全。其中

crossCOntext="true" ,是允许应用通过 ServletContext.getContext() 去拿到一个通往别的应用 request dispatcher 。当然了,这种方法无法跨越现在 Tomcat 支持的虚拟主机界限。也就是说,能够穿透访问的,必须是和当前应用在一个 之中的应用。

privileged="true" 意味着 Tomcat 自身的应用,比如· Tomcat Manager ,可以被当前这个应用访问。根据官方文档的解释,这个机理是改变应用的类加载器为 Server class loader 。我想,这种改变,会令应用程序发现 Tomcat 本身的类,都能够从应用自己的类加载器上寻找到。从而实现对 Tomcat 自身应用程序方法的调用。

path 和 docBase 不用多说,都要指定这二个属性的。其中 docBase 可以是目录也可以是结构完整的 .war 文件。

reloadable="true" 意味着 Tomcat 将提供对应用类路径( /WEB-INF/classes/ 和 /WEB-INF/lib/ )的监测。当这里边有内容改变并且其类已经被爪哇虚拟机(JVM)加载的时候,Tomcat 可以自行重新加载此类。不过此功能对 Tomcat 的稳定服务影响不小,调试环境可以使用,生产环境还是算了吧——当然,这只是我的个人建议。

unpackWAR 就如字面意思,unpackWAR="true" 意味着 Tomcat 会保存 .war 包的解压结果,然后直接对解压结果进行运行。我个人认为,考虑到爪哇虚拟机的类加载机制,每个类都仅加载一回,但是页面内容却没有类似的有效缓存,所以 .war 还是解压执行的比较好。而且日志也将造成 unpackWAR="false" 形同灾难。

cachingAllowed="true" 意味着开启了 Tomcat7 的静态缓存功能。静态文件包括 Javascript 程序、图片声音等允许网络访问的文件以及 HTML 页面。

cacheMaxSize 是静态缓存功能缓冲区大小的设定。单位是 MB ,也就是 1024KB 。例子中设为 1024 ,意味着 1GB 。


推荐阅读
  • 本文介绍了Java工具类库Hutool,该工具包封装了对文件、流、加密解密、转码、正则、线程、XML等JDK方法的封装,并提供了各种Util工具类。同时,还介绍了Hutool的组件,包括动态代理、布隆过滤、缓存、定时任务等功能。该工具包可以简化Java代码,提高开发效率。 ... [详细]
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • 1,关于死锁的理解死锁,我们可以简单的理解为是两个线程同时使用同一资源,两个线程又得不到相应的资源而造成永无相互等待的情况。 2,模拟死锁背景介绍:我们创建一个朋友 ... [详细]
  • 本文介绍了在Mac上搭建php环境后无法使用localhost连接mysql的问题,并通过将localhost替换为127.0.0.1或本机IP解决了该问题。文章解释了localhost和127.0.0.1的区别,指出了使用socket方式连接导致连接失败的原因。此外,还提供了相关链接供读者深入了解。 ... [详细]
  • Iamtryingtomakeaclassthatwillreadatextfileofnamesintoanarray,thenreturnthatarra ... [详细]
  • Spring源码解密之默认标签的解析方式分析
    本文分析了Spring源码解密中默认标签的解析方式。通过对命名空间的判断,区分默认命名空间和自定义命名空间,并采用不同的解析方式。其中,bean标签的解析最为复杂和重要。 ... [详细]
  • Nginx使用(server参数配置)
    本文介绍了Nginx的使用,重点讲解了server参数配置,包括端口号、主机名、根目录等内容。同时,还介绍了Nginx的反向代理功能。 ... [详细]
  • Mac OS 升级到11.2.2 Eclipse打不开了,报错Failed to create the Java Virtual Machine
    本文介绍了在Mac OS升级到11.2.2版本后,使用Eclipse打开时出现报错Failed to create the Java Virtual Machine的问题,并提供了解决方法。 ... [详细]
  • 本文介绍了在Win10上安装WinPythonHadoop的详细步骤,包括安装Python环境、安装JDK8、安装pyspark、安装Hadoop和Spark、设置环境变量、下载winutils.exe等。同时提醒注意Hadoop版本与pyspark版本的一致性,并建议重启电脑以确保安装成功。 ... [详细]
  • 在说Hibernate映射前,我们先来了解下对象关系映射ORM。ORM的实现思想就是将关系数据库中表的数据映射成对象,以对象的形式展现。这样开发人员就可以把对数据库的操作转化为对 ... [详细]
  • 使用Ubuntu中的Python获取浏览器历史记录原文: ... [详细]
  • Spring特性实现接口多类的动态调用详解
    本文详细介绍了如何使用Spring特性实现接口多类的动态调用。通过对Spring IoC容器的基础类BeanFactory和ApplicationContext的介绍,以及getBeansOfType方法的应用,解决了在实际工作中遇到的接口及多个实现类的问题。同时,文章还提到了SPI使用的不便之处,并介绍了借助ApplicationContext实现需求的方法。阅读本文,你将了解到Spring特性的实现原理和实际应用方式。 ... [详细]
  • 后台获取视图对应的字符串
    1.帮助类后台获取视图对应的字符串publicclassViewHelper{将View输出为字符串(注:不会执行对应的ac ... [详细]
  • XML介绍与使用的概述及标签规则
    本文介绍了XML的基本概念和用途,包括XML的可扩展性和标签的自定义特性。同时还详细解释了XML标签的规则,包括标签的尖括号和合法标识符的组成,标签必须成对出现的原则以及特殊标签的使用方法。通过本文的阅读,读者可以对XML的基本知识有一个全面的了解。 ... [详细]
  • 本文介绍了Web学习历程记录中关于Tomcat的基本概念和配置。首先解释了Web静态Web资源和动态Web资源的概念,以及C/S架构和B/S架构的区别。然后介绍了常见的Web服务器,包括Weblogic、WebSphere和Tomcat。接着详细讲解了Tomcat的虚拟主机、web应用和虚拟路径映射的概念和配置过程。最后简要介绍了http协议的作用。本文内容详实,适合初学者了解Tomcat的基础知识。 ... [详细]
author-avatar
我还是看好小棠呀
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有