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

今天开始在单位推广 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 。

软件环境:Window server 2003+ IIS6.0 + Tomcat6.0 + JK2 整了大半天,不过直得整合的好处就不说了 1.导入注册表 iis+tomcat.reg 文件说明 Windows Registry Editor Version 5.00 [HKEY_LOCAL_MACHINE\SOFTWARE\Apache Software Foundation\Jakarta Isapi Redirector\2.0] //修改成你的tomcat主目录 "serverRoot"="D:/Tomcat 6.0" //不需要修改跟后面设置的虚拟目录一至 "extensionUri"="/jakarta/isapi_redirector2.dll" //第二步中复制的属性文件 "workersFile"="C:\\Program Files\\Apache Software Foundation\\Tomcat 6.0\\conf\\workers2.properties" "logLevel"="DEBUG" 2.Copy 文件 isapi_redirector2.dll jk2.properties workers2.properties 到tomcat安装目录下的conf文件夹中 文件说明jk2.properties: request.tomcatAuthentication=false //默认设置 文件说明workers2.properties: [shm] # 日志 file="C:\\\\Program Files\\\\Apache Software Foundation\\\\Tomcat 6.0\\\\conf\\\\logs\\\\jk2.log" # 文件大小 size=1048576 # 如果tomcat,iis在一台服务器中时,不需要修改配置 # 默认端口8009 [channel.socket:localhost:8009] port=8009 host=localhost # define the worker [ajp13:localhost:8009] channel=channel.socket:localhost:8009 # Uri mapping [uri:/*.jsp] [uri:/*.do] [uri:/*] worker=ajp13:localhost:8009 # define the worker [status:status] # Uri mapping [uri:/jkstatus/*] worker=status:status 3.新建站点 在IIS中新建站点,路径为JSP项目所在路径 允许权限(读取,运行脚本,执行) 4.创建ISAPI筛选器 右击站点"属性">"ISAPI筛选器"标签 添加>>筛选器名称:jakarta 可执行文件:指到"isapi_redirector2.dll" 5.创建JSP文件映射 右击站点"属性">"主目录"标签 >>配置>>添加>>可执行文件(指到"isapi_redirector2.dll",如果路径中存在空格需要用双引号) 扩展名".jsp"(需要tomcat解析的所有扩展名) 如果有多个请重复执行添加操作 6.新建虚拟目录"jakarta" 在刚建好的站点上新建虚拟目录"jakarta" 路径指到到tomcat安装目录下的conf文件夹 允许权限(读取,运行脚本,执行) 7.添加WEB服务扩展 右击web服务扩展>"添加一个新的WEB服务扩展(A)..." 扩展名随便写"JSP" 要求的文件:指到"isapi_redirector2.dll" 设置扩展状态为允许 OK 重启IIS,TOMCAT 测试 tomcat直接访问 http://localhost:8080/index.jsp IIS整合后访问 http://localhost/index.jsp 注意 tomcat的一些虚拟主机配置可以见配置文件server.xml 在访问过测试页后ISAPI筛选器"jakarta"会显示绿色箭头,红色是配置错误 不知道还有没有漏掉的 ^_^
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值