java web导入类_关于jsp:Java错误:只能导入一个类型。 XYZ解析为一个包

我收到错误:"只能导入一个类型.XYZ会解析为一个包。"

有人在这里解释了原因,但我不确定我应该做些什么来解决这个问题。 仅供参考:我正在使用Eclipse。 我添加了下面导入的代码。 java.util。* import工作正常。

CategoryDao catDao = new CategoryDao();

ArrayList catList = catDao.selectCategory();

//

%>

编辑:实际错误如下:

org.apache.jasper.JasperException: Unable to compile class for JSP:

An error occurred at line: 7 in the generated java file

Only a type can be imported. org.eresearch.knowledgeportal.model.Category resolves to a package

如果您可以发布代码并提供有关环境的更多详细信息,将会有所帮助。

那么大多数代码都只是HTML。 由于它在这一点上摔倒,我没有取得多大进展。 我正在使用Tomcat 6,但我通过Eclipse调试选项运行。 如果我能提供其他任何东西,请告诉我。

Scriptlet是一种不好的做法:stackoverflow.com/questions/1831238/jsp-for-business-layer/使用servlet。

好吧,你并没有真正提供关于你的webapp的足够细节,但我的猜测是你有一个这样的JSP:

并且在类路径中找不到x.y.Z(即,WEB-INF/classes下也不存在WEB-INF/lib的JAR中)。

仔细检查您在Tomcat上部署的WAR是否具有以下结构:

my-webapp

|-- META-INF

|   `-- MANIFEST.MF

|-- WEB-INF

|   |-- classes

|   |   |-- x

|   |   |   `-- y

|   |   |       `-- Z.class

|   |   `-- another

|   |       `-- packagename

|   |           `-- AnotherClass.class

|   |-- lib

|   |   |-- ajar.jar

|   |   |-- bjar.jar

|   |   `-- zjar.jar

|   `-- web.xml

|-- a.jsp

|-- b.jsp

`-- index.jsp

或者捆绑x.y.Z.class的JAR存在于WEB-INF/lib下。

你真的花了点时间构建那个ASCII树吗?!

我使用tree命令,但我不得不自定义它:)

谢谢。这一切看起来都像你说的应该是,这就是为什么它如此令人困惑。

荣誉,但package是非法的包标识符;)

@BalusC当然,你是对的,但大声笑:)

当然"只能导入一个类型.XYZ解析为一个包"真的意味着"无法在类路径中找到依赖"。当然!

好的,我刚解决了。在上一次导入中,我添加了一个";"通过复制其他代码示例。我想这是标准的行结束所需要的。

所以

成为

分号只会导致语法错误。

AFAIK添加分号会产生错误,并且与删除线条具有相同的效果。

这为我解决了一个问题。但是,在我删除分号后,它再次起作用。

分号导致语法错误,但是在eclipse中触发重新检查,有些如何在删除分号之后导入恢复正常而没有摇摆下的红线... weir很奇怪但是工作!

如果您将类名拼写错误或类不在类路径上,则JSP处理器会将其"解析为包"而不是它不存在。这让我疯狂,因为我一直没有看到我犯过的错字。

手动将类文件复制到我的Tomcat webapps / myApp / WEB-INF / classes目录后,我看到了这个问题。 Tomcat的反弹修复了它。而且我猜测重新部署也会起作用。

的确,这个消息很可怕。即使他们不想打扰区分这两种情况,它至少应该是"未找到类或解析为一个包"。

我在Netbeans中遇到了这个错误。正如大多数奇怪的错误一样,我通过转到项目属性,更改源/二进制格式(无关紧要,只是不同的东西)来解决它,并进行清理和构建。

谢谢!哇,不能相信这很有效。下次我有一个奇怪的Netbeans错误时我会尝试这个。我不知道为什么Netbeans会这样行为不端。现在我安装了一个新版本。

好的,我现在已经两次遇到这个问题了,你的伎俩两次都修好了。

我刚刚再次这样做了。我实际上通过重命名/重构导致问题的包名称,执行干净+构建,然后重命名/重构回原点,并执行另一个干净+构建来解决它。这也是诀窍。

我通过在tomcat lib目录中添加jar来解决它。

没有进一步的细节,它听起来像一个类的导入声明中的错误。检查是否所有导入声明都从包或单个类导入所有类:

import all.classes.from.package.*;

import only.one.type.named.MyClass;

编辑

好的,在编辑之后,看起来像是一个jsp问题。

编辑2

这是另一个论坛条目,问题似乎有相似之处,受害者通过重新安装eclipse解决了这个问题。我先尝试一下 - 安装第二个eclipse实例,只需要最必要的插件,一个新的工作空间,将项目导入到干净的工作空间中,希望最好......

对我来说这是一个错误的部署。正确部署,一切正常(详情请查看我的问题)。

看起来错误的部署是这个问题的主要原因,重新部署对我有用。

生成.class文件分开并将其粘贴到相关的包中进入工作区。

刷新项目。

我知道回复这篇文章有点太晚了但是因为我没有看到任何明确的答案我还是会这样做...

你可能想看看日食中MANIFEST.MF的MANIFEST.MF。

那么你可能需要添加你的类文件的路径,如..

Class-Path: WEB-INF/classes

当然不。这是默认值。

在以类的名义更改字母大小写后,我也遇到了这个奇怪的错误。该文件未按预期复制到tomcat服务器,我不得不手动删除它并重新部署。也许是因为我使用不区分大小写的操作系统?

答对了。在我的例子中,问题类是在另一个项目中,当我改变时,Netbeans没有将其复制到Tomcat库中,正如我所料。

有更多细节吗? (这是在链接网页中的JSP中吗?)

如果是这样,您始终可以使用完全限定的类名。

而不是:

import foo.bar.*;

Baz myBaz;

您可以使用

foo.bar.Baz myBaz;

我有一个类似的问题。在eclipse中,我将我的项目与一个工作正常的示例项目(由maven原型生成)进行了比较。我发现我的项目错过了/.classpath文件中的2行。我复制了这两行,它解决了这个问题。即使我在项目首选项中设置了构建路径,但由于某些原因,eclipse没有相应更新。

...

我的贡献:我收到此错误是因为我创建了一个名为3lp的包。

但是,根据java规范,您不能使用数字命名您的包。

我将它改为_3lp,现在它可以工作了。

你必须从包中导入一些东西,比如类,枚举或接口,如下所示:

import some.package.SomeClass;

或者,从包中导入所有内容(不推荐)

import some.package.*;

编辑:也许我读得不够近。您尝试从文件系统中导入的包在哪里?它在WEB-INF / lib下吗?

如果您使用Maven并将Java类打包为JAR,那么请确保JAR是最新的。仍然假设JAR当然在你的类路径中。

也有这个例外。

环境:Mac使用Eclipse使用Servers视图从Eclipse内部运行Tomcat。

出于任何原因,Eclipse不会将classes文件夹复制到WEB-INF。手动复制classes文件夹后,一切正常。

不知道,或者是Eclipse bug或者我错过了什么。

我通过将包含导入的类的jar文件添加到WEB-INF/lib中来解决它。

您是否尝试像我一样导入被覆盖的类?

如果是这样,你的被覆盖的类是在错误的包中,或者根本就不存在。

创建或将类移动到正确的位置(src / [package.package]。[class])可以解决您的问题。

这通常发生在混合(在相同的jsp页面中)静态jsp导入时:

使用动态jsp导入:

需要使用(然后导入)相同类型时,会生成异常:"只能导入一个类型......"

所以我有同样的问题,只是想给我的解决方案。也许有人面临同样的问题。

我已经正确配置了我的工件,但不知何故intellij混合了一些东西并删除了我的一个工件中的WEB-INF文件夹。

当我查看.war文件的内容时,每个类都存在于正确的文件夹结构中。所以我不认为有任何遗漏。但是,当我检查Intellij中的工件并将其与工作工件进行比较时,我意识到,包含类和库的WEB-INF文件夹不存在。

将它们添加到工件中它应该可以工作。

TLDR:Intellij删除了我的.war工件中的WEB-INF文件夹。只要检查你的是否也失踪了。 (Project Strucutre - >文物)

我敢打赌,你有一个叫做org.ivec.eresearch.knowledgeportal.model.category(小c)的软件包,它运行在一个非大小写敏感的文件系统上,比如Windows或Mac。当类和包存在时,似乎编译器会感到困惑。

您可以重命名类"类别"或包"类别",此错误将消失。不幸的是我不确定这是Tomcat还是ECJ的bug。

我有相同的错误消息,我的处理方式如下:

首先去检查Tomcat发布Web应用程序的文件目录,例如D: Java workspace.metadata.plugins org.eclipse.wst.server.core tmp1 wtpwebapps myDatatable WEB-INF classes,我们通常在其中放置我们的类。如果这不是您放置类的地方,那么您必须通过右键单击您的Web应用程序根名称 - >构建路径 - >配置构建浴池来确定默认位置...-->然后检查"源"选项卡,找出"默认输出文件夹"的字段值。这将是Tomcat放置课程的地方。

你会看到还没有构建XYZ类。为了构建它,您可以转到菜单"项目" - >"清除..." - >选择要清理的Web应用程序。

完成后,尝试重新启动tomcat服务器并再次检查文件目录。你的班级应该在那里。至少它对我有用。希望能帮助到你。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,下面是一个简单的使用 Java Web 技术实现带有验证码的 JSP 登录页面的示例代码: 首先,我们需要在 web.xml 文件中配置一个 Servlet,用于生成验证码并将其保存到 Session 中: ```xml <servlet> <servlet-name>CaptchaServlet</servlet-name> <servlet-class>com.example.CaptchaServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>CaptchaServlet</servlet-name> <url-pattern>/captcha</url-pattern> </servlet-mapping> ``` 其中,`com.example.CaptchaServlet` 是我们自己编写的验证码生成 Servlet。 然后,在 JSP 页面中,我们可以通过以下代码来引用该验证码: ```html <img src="captcha" alt="验证码"> <input type="text" name="captcha"> ``` 其中,`captcha` 是 Servlet 的 URL Pattern,用于请求验证码图片;`captcha` 的值是用户输入的验证码,用于验证用户输入是否正确。 最后,在后台代码中,我们可以通过以下代码来验证用户输入的验证码是否正确: ```java String captcha = request.getParameter("captcha"); String expectedCaptcha = (String) request.getSession().getAttribute("captcha"); if (captcha == null || !captcha.equals(expectedCaptcha)) { response.sendRedirect("login.jsp?error=captcha"); return; } ``` 其中,`captcha` 是用户输入的验证码,`expectedCaptcha` 是从 Session 中获取的正确验证码。如果两者不相等,则说明用户输入的验证码不正确,我们可以将用户重定向回登录页面,并在 URL 中添加一个 `error=captcha` 的参数,用于提示用户输入的验证码错误。 希望以上内容能够对您有所帮助。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值