Only a type can be imported. l1.l2.MyClass resolves to a package

==========这里是解决方案===============

把生成的MyClass.class复制到网站根目录下的WEB-INF下的classes目录下,如果没有classes,就建一个,然后在classes目录下,按照包的层级逐层建立目录,例如l1.l2.MyClass,就建一个l1目录,在l1目录下建l2目录,把MyClass.class复制到l2目录下,即可。

==========以下是过程===============

昨天和今天,一直在尝试在JSP中调用JavaBean,看似很简单的事情,却遇到这个问题,遍搜全网,包括英文,下面这句给了我一些提示:

If you spell the class name wrong or the class isn't on the classpath, the JSP processor will say it "resolves to a package" rather than that it doesn't exist. This was driving me crazy today as I kept not seeing a typo I'd made.

就是说,你写错类名了,它就找不到,也就是说,随便写个类名,java找不到,就会出这个提示,说你写的这个类被解析为包,它不说找不到这个类。

整个问题过程如下:

1.用Eclipse Java Neon在项目中建立jsp页面a.jsp,位于D:\eclipseWorkspace\MentalArithmetic\WebContent,并在tomcat的conf目录下的server.xml中配置host节,设置为

<Context path="" docBase="D:\eclipseWorkspace\MentalArithmetic\WebContent" debug="0" privileged="true" reloadable="true">
</Context>

2.项目中右键new一个java的class,类名叫MyClass,包名叫l1.l2,它会在java Resources节点下的src目录下创建java文件,对应于MentalArithmetic目录下的src目录,类似这样D:\eclipseWorkspace\MentalArithmetic\src\l1\l2,l1和l2是包的名字,layer1和layer2的意思。

package l1.l2;

public class MyClass {

    public MyClass() {

    }
public String address; public String getAddress() {
return address;
} public void setAddress(String address) {
this.address = address;
}
}

3.项目中右键new一个jsp文件,我叫它a.jsp,在MentalArithmetic\WebContent,也就是网站根目录下。并在此文件中引入类,代码如下:

<%@ page language="java" import="l1.l2.MyClass"%>

<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<form> <%
MyClass b = new MyClass();
b.setAddress("kkkkkkkkkkkkkkkkk"); out.print(b.getAddress());
%>
</form>
</body>
</html>

理论上,如果这是一个在eclipse中关联紧密的项目,像visual studio一样,这个时候应该是可以运行了。背后的很多工作,应当由IDE来完成。

然而,问题来了。无论我怎样运行,都会提示Only a type can be imported. l1.l2.MyClass resolves to a package,做了很多尝试,确认我没有写错。把eclipse在build中生成的MyClass.class到处粘贴,每一个可能的地方,均无效。网上说tomcat会在网站根目录下的WEB-INF下的classes中找类的信息,这个其实是对的,但是在不清楚全过程的情况下,这么一句是无法解决问题的,我把MyClass.class复制到了classes目录下,然并卵,仍然无效。不细说了。

找了很多网站,找了很多书,依然然并卵。

最后,绝望极了。

然后就思考一个问题,如果JSP页面中,随便写个导入类的语句,如<%@ page import="a.b.c"%>,就会报下面这个错

Only a type can be imported. a.b.c resolves to a package

无论a.b.c是否真的存在,这说明系统没有找到a.b.c这个类,那么问题就变成了“如何让系统找到自定义的类?”

如果tomcat会在网站根目录下寻找类的字节码,那么它是不是像eclipse中定义的一样,一层一层地去寻找呢?

打开网站根目录下的WEB-INF,这个目录是eclipse生成的,里面毛也没有。

新建了一个classes目录,在其下又新建了一个l1子目录,在l1下又新建了一个l2子目录,把MyClass.class复制过来,再运行http://localhost/a.jsp,成功。

我一点都不兴奋。

这是不是意味着,每次写完javaBean,都要手动把class复制到WEB-INFO目录去?可能有更好的方法,目前不知道。

作为eclipse来讲,如此基础的工作都没有完成,这个IDE真的好用么?

是不是开源的工具都是这样,易用性较差,学习曲线陡峭,如果你会用,那它还挺好使的,如果你是不会用的初学者,要花很多的时间和精力去学习。

从这个角度来看,微软真的挺伟大的,致力于让开发者把精力集中在业务上,开发工具简单得一塌糊涂,包括java的开发者在内,都认为VS太好用了,节省大量时间。但是它的正版工具价格与破解成本比起来,实在让人无法产生购买欲。如果VS和.net能继续开源,继续发展,超过Java也并非不可能。

Only a type can be imported. classname resolves to a package的解决的更多相关文章

  1. 解决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的错误,然而改成 ...

  2. 解决Only a type can be imported. * resolves to a package

    HTTP Status 500 - Unable to compile class for JSP: type Exception report message Unable to compile c ...

  3. JSP error: Only a type can be imported

    错误: [14] in the generated java file: [E:\apache-tomcat-7.0.63-windows-x64\apache-tomcat-7.0.63\work\ ...

  4. PWC6199:Generated servlet error:Only a type can be imported. org.apache.jasper.tagplugins.jstl.core.ForEach resolves to a package

    <%@ import="org.apache.jasper.tagplugins.jstl.core.ForEach"%> 去掉这条语句,就不报错了.所以问题就出在这里 ...

  5. Type.GetType()在跨程序集反射时返回null的解决方法

    在开发中,经常会遇到这种情况,在程序集A.dll中需要反射程序集B.dll中的类型.如果使用稍有不慎,就会产生运行时错误.例如使用Type.GetType("BNameSpace.Class ...

  6. Dynamics CRM2015 The plug-in type does not exist in the specified assembly问题的解决方法

    在用插件工具PluginProfiler调试时,报"The plug-in type  xxxx  does not exist in the specified assembly" ...

  7. Eclipse之NDK编译-- Type 'jint' could not be resolved, and JNIEnv, jclass错误解决办法

    最近在研究面部识别美白相关的功能.使用的是opencv,就去研究了.今天正好有空就把安装了ndk,安装完成之后就试图去编译demo程序,hellow-jni c代码,一开始编辑就报错了3个错误信息: ...

  8. The type org.springframework.jms.JmsException cannot be resolved报错解决

    在调用JmsTemplate的send方法时,一直报编译时异常.如下: 异常提示是无法解析org.SpringFrawork.jms.JmsException类型.如下: The type org.s ...

  9. 在 UIViewController 中手动增加 TableView 出现 Type 'SomeViewController' does not confirm to protocol 'UITableViewDataSource' 问题的解决办法

    许多时候我们都有在普通的继承自 UIViewController 的控制器中使用 TableView 的需求,这时候就需要当前控制器类继承 UITableViewDelegate 和 UITableV ...

随机推荐

  1. 二叉查找树 _ 二叉排序树 _ 二叉搜索树_C++

    一.数据结构背景+代码变量介绍 二叉查找树,又名二叉排序树,亦名二叉搜索树 它满足以下定义: 1.任意节点的子树又是一颗二叉查找树,且左子树的每个节点均小于该节点,右子树的每个节点均大于该节点. 2. ...

  2. windows下安装TA-Lib库

    步骤一: https://sourceforge.net/projects/ta-lib/files/ta-lib/0.4.0/ta-lib-0.4.0-msvc.zip/download?use_m ...

  3. MVC演化 (转至http://www.cnblogs.com/wubaiqing/archive/2011/10/26/2225438.html)

    MVC已经成为我们最常误用的模式,人们之所以常常误用MVC,很大程度上是因为混淆了不同的MVC变体. Classic MVC Classic MVC 大概上世纪七十年代,Xerox PARC的Tryg ...

  4. R语言低级绘图函数-grid

    grid 函数用来在一张图表上添加网格线, 基本用法:默认在添加刻度线的地方添加网格线 plot(1:5, 1:5, xlim = c(0,6), ylim = c (0,6), type = &qu ...

  5. CS文件类头注释

    1.修改unity生成CS文件的模板(模板位置:Unity\Editor\Data\Resources\ScriptTemplates 文件名:81-C# Script-NewBehaviourScr ...

  6. ubuntu下使用sublime text进行C编程开发尝鲜

    1 选择编译系统 2 编写文件,编译(Ctrl+B)运行(Shift+Ctrl+B)

  7. CUGBACM Codeforces Tranning 1 题解

    链接:http://acm.hust.edu.cn/vjudge/contest/view.action?cid=61581#overview 描写叙述:非常老的CF题,题不错,拿来训练正好. 做的时 ...

  8. 一、SDWebImage分析--库处理流程分析

    二.SDWebImage分析--源码具体分析 这阵子看了SDWebImage的实现跟源代码.也看了下网上的一些总结. 这里我自己画了个流程图来辅助理解下SDWebImage这个库的实现流程.相信也是有 ...

  9. Oracle Apex 有用笔记系列 2 - 文件上传管理

    1. 页面设计 页面A有若干region, 当中一个region用于文件列表管理(包含显示,下载.删除).如图A. 在页面A有一button,点击它会调用页面B,页面B负责文件上传.如图B. 图A 图 ...

  10. POJ 1742 Coins(多重背包, 单调队列)

    Description People in Silverland use coins.They have coins of value A1,A2,A3...An Silverland dollar. ...