Tomcat7.x 与 Tomcat6.x
Java(14)
Tomcat(3)
配置心得(6) 
版权声明:本文为博主原创文章,未经博主允许不得转载。
今天开始在单位推广 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 ,区分大小写,然后在其中编写 <Context> 片段。
- <Context
- crossContext="true"
- privileged="true"
- path=""
- docBase="/usr/local/example.war"
- reloadable="false"
- unpackWAR="true"
- cachingAllowed="true"
- cacheMaxSize="1024"
- ></Context>
这个例子比较全。其中
crossContext="true" ,是允许应用通过 ServletContext.getContext() 去拿到一个通往别的应用 request dispatcher 。当然了,这种方法无法跨越现在 Tomcat 支持的虚拟主机界限。也就是说,能够穿透访问的,必须是和当前应用在一个 <Host> 之中的应用。
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 。
Tomcat7.x 与 Tomcat6.x的更多相关文章
- 试用 Tomcat7.x 与 Tomcat6.x 的明显不同 + Context 填写方法 + 默认应用配置方法 (zhuan)
http://blog.csdn.net/shanelooli/article/details/7408675
- tomcat7/8 启用调试模式,可进行远程调试
tomcat7,和 tomcat6 的jpda 不一样,tomcat7已经把jpda配置的属性在catalina.sh/catalina.bat里面已经写好了,我们不需要向tomcat6那样去设置参数 ...
- eclipse+tomcat7解决项目中文乱码的一个思路
1. 在代码层面进行编码的修改操作,参考博文的方法一:http://www.cnblogs.com/longshiyVip/p/4873058.html 2. 如果项目使用了struts2等前端框架, ...
- 解决eclipse+tomcat7的中文乱码的一个方法
我用的eclipse+tomcat7进行开发部署个一个项目,在页面展示的时候出现中文乱码,我想尽了所有方法,eclipse开发环境可以配置成utf-8的地方都进行了配置,tomcat也进行了配置URI ...
- tomcat:run和tomcat7:run的区别,以及Apache Tomcat Maven Plugin 相关
起因: 同事部署的maven项目,之前使用 jetty,现在切换到 tomcat,但是他使用的命令是 tomcat:run ,而不是 tomcat7:run,能启动,但出现问题了. 于是搜索了一番,想 ...
- maven tomcat:run指定tomcat7:
配置好下面的内容后,执行 run as -> tomcat7:run 或者tomcat6:run可以将maven的web应用在tomcat6/7里面运行 ,eclipse Indigo 版本默认 ...
- springMVC文件上传
参考的地址:http://www.tuicool.com/articles/nMVjaiF 1.需要使用的jar. commons-fileupload.jar与commons-io-1.4.jar二 ...
- hadoop在网页客户端的maven配置
hadoop网页客户端maven配置,只能在tomcat7上运行,tomcat6和tomcat8运行会出错,我用的是tomcat-7.0.67 完整的pom.xml内容为: <!-- 这个配置只 ...
- Jsp之神笔记
JSP笔记 Tomcatserver port: port就是指的某一个程序网络入口,Tomcat的初始化port为:8080: port的个数:256*256=65536个: 一般常见协议的缺省po ...
随机推荐
- IOS之资源收集--很好的github网址
1.Nick Jensen 2.关于直播的
- Java 网络编程----基本概念
网络现在是一个非常普遍的概念. 以下是维基百科上的解释: 网络一词有多种意义,可解作: 网络流也简称为网络(network).一般用于管道系统.交通系统.通讯系统建模. 有时特指计算机网络. 或特指其 ...
- linux 2>&1
2>&1就是用来将标准错误2重定向到标准输出1中的.此处1前面的&就是为了让bash将1解释成标准输出而不是文件1.至于最后一个&,则是让bash在后台执行 例如:/us ...
- Flash网站Loading制作
Flash网站Loading制作~~~ stop(); stage.scaleMode=StageScaleMode.NO_SCALE; //指定舞台属性为不跟随播放器大小而改变 stage.show ...
- jQuery Form 表单提交插件-----ajaxSubmit() 的应用
Form Plugin API 里提供了很多有用的方法可以让你轻松的处理表单里的数据和表单的提交过程. 测试环境:部署到Tomcat中的web项目. 一.ajaxSubmit() 介绍 立即通过AJ ...
- C#删除文件和文件夹到回收站
首先对项目添加名为Microsoft.VisualBasic.dll的引用,然后添加命名空间using Microsoft.VisualBasic.FileIO;usingSystem;namespa ...
- DimDate populate data
日期维度 任何一个数据仓库都应该有一个日期维度. 因为很少有不需要通过日期维度看数据的情况存在. 日期维度的好处是,你可以通过他连接各个事实表,然后在报表端传送报表参数的时候, 直接自动过滤日期维度的 ...
- ZooKeeper 安装部署及hello world(转)
ZooKeeper 安装部署及hello world 先给一堆学习文档,方便以后查看官网文档地址大全:OverView(概述)http://zookeeper.apache.org/doc/r3.4 ...
- python中BeautifulSoup库中find函数
http://www.crummy.com/software/BeautifulSoup/bs3/documentation.zh.html#contents 简单的用法: find(name, at ...
- UVA 12730 Skyrk's Bar --期望问题
题意:有n个地方,现在要站人进去,而每两个人之间至少要隔k个空地,问这n个地方能站的人数的期望是多少. 分析:考虑dp[i]表示 i 个地方能站的期望数,从左往右推, 如果i-k-1<1,那么最 ...