Only a type can be imported解决方法

这次项目开发,运行环境的tomcat版本从5.5.12升级到了6.0.18,发现以前的项目不能跑了,访问一个很简单的jsp也会报错,说无法编译,报的错误就是:Only a type can be imported. com.xxx.xxx.XXX resolves to a package,意思就是说你jsp页面上引用的那个类不存在,可是在老版本明明跑的好好的,而且另一个现象就是项目根目录下的jsp访问没有问题,子目录下就报错,google了一下,发现这是新版本tomcat的一个变化,就是如果不指定context的话,每一个子文件夹都会被tomcat当作一个独立的虚拟应用的,所以每个子文件夹下的jsp页面访问的时候,都会在它的同一层找WEB-INF里面的class,这样当然找不到了,只有刚巧放在根目录下的jsp文件能访问。

解决办法:其实这也是自己以前写tomcat的配置文件时候,写法不规范造成的,以前的server.xml里面host信息代码如下:

<Host name="www.local.com" appBase="D://projects//myWebSite//WebContent" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false">
    <Alias>192.168.1.43</Alias> 
    <Context path="" docBase="" reloadable="true">
     <Logger className="org.apache.catalina.logger.FileLogger" directory="logs" prefix="www.local.com_log." suffix=".txt" timestamp="true"/>
    </Context></Host>

这其中Context里面的docBase为空,文件路径就靠Host里的appBase去指定,这样tomcat认为你这个站点下没有应用,会自动把每个文件夹当作一个虚拟应用处理。修改后的代码片段如下:

<Host name="www.local.com" appBase="" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false">
    <Alias>192.168.1.43</Alias> 
    <Context path="" docBase="D://projects//myWebSite//WebContent" reloadable="true">
     <Logger className="org.apache.catalina.logger.FileLogger" directory="logs" prefix="www.local.com_log." suffix=".txt" timestamp="true"/>
    </Context></Host>

可以看到Host里面不再指定appBase了,而是在主机下建立一个应用,应用的文件路径通过docBase来指定,这样就不会再产生找不到class的问题了。

ps:tomcat的这个问题好像是从5.5.28就开始了,记得以前也曾经尝试过升级tomcat,就发生了类似的问题,但是当时没充裕时间去解决,就一直把问题遗留到现在。

时间: 2024-10-13 21:48:37

Only a type can be imported解决方法的相关文章

编绎显示Unknown type name &ldquo;CGFloat&rdquo; 错误解决方法

一.编绎显示Unknown type name "CGFloat"  错误解决方法   将Compile Sources As 改为 Objective-C 二.如果是extern const引起的.直接加头文件 #import <UIKit/UIKit.h>

NDK编译c包含C++头文件 error: unknown type name &#39;class&#39; 的解决方法

在进行native开发的时候,难免会遇到C文件包含C++头文件而调用C++函数,若没做什么处理,直接include进行编译的话,会遇到以下错误: error: unknown type name 'class' error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token 那么怎么解决呢? 首先,找下报错的原,从C以及C++特性不难发现:C文件include了带有C++关键字的头文件,如class等,因此,包含C

null value was assigned to a property of primitive type setter of原因解决方法

原理如下: Integer与int的区别: Integer是对象.     因此可以为null(对象可以为空.),即property   =   null;      int   是普通类型, 不可以为null. 数据库中的property是空的,可以映射额外integer类型,但是不能映射为int类型,如果误在实体中将property定义成了int类型,就有可能会出这种错误. 解决方法: 把数据库中的数据删除,重新录入. 或者 将实体中对应property修改为integer类型.

Httpservlet cannot be resolved to a type的原因与解决方法

Httpservlet cannot be resolved to a type,显然是Eclipse找不到相应的包,即javax.servlet. 原因: jdk 里不包括servlet-api.jar 这个包,此包在Tomcat 中存在 项目名--> 右键 Property--> 选择 JavaBuild Path--> 选择 Add External JARs--> 选择 把servlet-api.jar 的路径输入即可

java中&quot;no enclosing instance of type * is accessible&quot;的解决方法

这种情况一般发生在“在静态方法里面使用内部类” 测试代码: public class Test { public static void main(String[] args) { A a = new A(1); } class A { int x; public A() {} public A(int x) { this.x = x; } } } 上面这份代码在main函数里面会发生编译错误,为了解决问题,让我们先看看编译器的提示: 编译器告诉我们,没有可访问的Test类的实例,意味着下面将要

编绎显示Unknown type name “CGFloat” 错误解决方法

将Compile Sources As 改为 Objective-C++ 二.如果是extern const引起的.直接加头文件 #import <UIKit/UIKit.h>

解决Only a type can be imported. com.mysql.jdbc.Connection resolves to a package的报错问题

写jsp加载数据驱动以后老是提示Only a type can be imported. com.mysql.jdbc.Connection resolves to a package的错误,然而改成java就无报错 出错的原因:没有成功引入包 解决方法:将mysql-connector-java-5.1.39-bin.jar放到tomcat的bin目录下就可以解决  

关于spring4和hibernate4整合,配置事务报“Cannot unwrap to requested type [javax.sql.DataSource]”错误的解决方法及心得

Cannot unwrap to requested type [javax.sql.DataSource] 配置hibernate4和spring4时,出现错误,解决方法: 1.我去了spring4中的事务配置,数据库可以正常执行并访问.如下: <!-- 配置Hibernate  数据事务 --> <bean id="transactionManager" class="org.springframework.orm.hibernate4.Hibernat

[[NSBundle mainBundle] pathForResource:@&quot;name&quot; ofType:@&quot;type&quot;] 找不到对应的文件解决方法

最近在使用[[NSBundle mainBundle] pathForResource:@"name" ofType:@"type"]时,找不到其对应的文件,文件当时是通过 右键->add files to 的方式添加到工程里面的,但是使用[[NSBundle mainBundle] pathForResource:@"name" ofType:@"type"]时,无论如何都找不到文件,经过了重启工程 .clear工程以