子目录下的JSP不能访问类的问题分析

问题现象

主要的目录结构
index.jsp
test/test.jsp
WEB-INF/web.xml
WEB-INF/classes/MyClass.class

2个JSP里面全都调用了MyClass.class
程序内容完全相同,是复制过去改文件名的。

访问  http://127.0.0.1/index.jsp 没有任何问题
访问  http://127.0.0.1/test/test.jsp  报 ClassNotFoundException

服务器其是Tomcat 5.5

故障查找

经过程序测试,发现在/index.jsp里面包含了需要的CLASSAPTH目录,也就是 /WEB-INF/classes
而在 /test/test.jsp 里面,竟然不包含这个目录,当然也就无法访问MyClass类了

查看Tomcat/conf/server.xml, 发现如下配置

复制内容到剪贴板
代码:
 
<Host
    appBase="e:/abc"
    name="abc.123.net"
    <Context
        path="/"
        docBase="e:/abc"
    </Context>
</Host>



其中appBase 和 根的 docBase 指向了同一个目录。问题找到了

故障分析

appBase 的作用是,改目录将作为所有应用的根目录,其下面的任何一个子目录都将成为虚拟目录。
如果你把war文件放到这里,将会被自动解包,并配置成虚拟目录运行

因为每个虚拟目录都有自己独立的CLASSPATH,所以 
/test/test.jsp 被服务器解析为一个独立的虚拟目录,其CLASSPATH 应该在
/test/WEB-INF/classes 里面

故障排除

原因找到了,排除很简单
1 修改appBase到默认目录 appBase="webapps" 推荐这么做
2 修改appBase 到你指定的应用目录,比如 d:/project 目录,然后把你的项目放到这个目录的子目录里面,比如
d:/project/myRoot/index.jsp
d:/project/myRoot/test/test.jsp
d:/project/myRoot/WEB-INF/web.xml
d:/project/myRoot/WEB-INF/classes/MyClass.class

然后对docBase进行修正

这样就可以了! 
 

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值