tomcat 通过server.xml静态部署web项目访问报java.lang.ClassNotFoundException,找不到相应的servlet

server.xml配置文件的大致结构如下:

<server>

    <service>

        <connector/>

        <engine>

             <host>

                   <context/>

             </host>

        </engine>

    </service>

</server>

1 先简单了解一下server.xml中的配置

* server元素:是整个配置文件的根元素,代表整个tomcat的容器

* service元素:一个server元素包含一个或多个service元素

* connector元素:一个service元素可以包含多个connector元素

* engine元素:一个service元素中只可以包含一个engine元素

* host元素:一个engine元素可以包含多个host元素

* context元素:一个host元素可以包含多个context元素

各元素的作用可以参考:https://www.cnblogs.com/kismetv/p/7228274.html

2 静态配置web项目

我们要配置web项目,可以在engine元素中再建一个host元素,如下:

<Host name="127.0.0.1" appBase="webapps" unpackWARs="true" autoDeploy="true">

     <Context path="/ClassLoaderTest" docBase="/Users/zyq/Documents/workspace/ClassLoaderTest/WebContent" reloadable="true" />

 </Host>

注意:engine元素中有一个属性defaulthost,它指定了默认的host名称,当发往本机的请求指定的host不存在时,一律使用它指定的host进行处理,因此它的值必须与engine中的一个host元素的name属性值相匹配。假如已经有一个host元素的name值和defaulthost值一致了,下个host元素的name值不要再用一样的了。

path:静态部署时它的值可以显示指定,可以指定是项目的名称

docBase:项目中的webRoot路径

reloadable:当tomcat运行时,监控WEBINFO/classes和WEBINFO/lib目录下的变动,如果值为true,当目录下有变动时,会重新加载。

3 部署情况


我的eclipse是Mars版本,创建web项目时选择的是:


生成的目录结构是这样的:


web.xml:


生成的项目结构中,classes文件不在webinfo目录下面,所以启动tomcat的时候访问127.0.0.1:8080/ClassLoaderTest/hw时报java.lang.ClassNotFoundException,not found ....hwServlet这个servlet。

编译后的class文件不在webinfo目录下,所以就找不到相应的servlet。

解决:只要把classes文件复制到webinfo目录下就可以了,访问就正常了。








评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值