神秘的 Eclipse JSP 验证错误

Posted

技术标签:

【中文标题】神秘的 Eclipse JSP 验证错误【英文标题】:Mysterious Eclipse JSP Validation Errors 【发布时间】:2011-04-16 22:27:06 【问题描述】:

Eclipse (Helios) 偶尔会将看起来有效的 JSP 内容标记为有错误。当我使用 标签时,它似乎经常中断。例如,在只有以下内容的 JSP 中:

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<body>

<c:if test="$1 == 1">
something
</c:if>

</body>
</html>

编译后“问题”选项卡中显示以下错误:

不兼容的操作数类型字符串和 第 1 行 javax.servlet.jsp.JspException 不能 解析为第 1 行的类型 javax.servlet.jsp.PageContext 不能 解析为第 1 行的类型

代码运行良好。 JSP 的验证是否有问题,我是否遗漏了一些明显的东西,或者这是否表明某些东西没有正确设置。

【问题讨论】:

关闭它。 Eclipse 的 JSP 验证器就是其中之一,所有史诗都失败了。相关问题:***.com/questions/1790749/…、***.com/questions/2268153/…、***.com/questions/2975168/… 它在动态 Web 项目中运行良好。很多人抱怨设置不是 DWP,根本没有提及这一事实。 【参考方案1】:

好吧,我找到了解决此错误的方法。 将此添加到您的 Maven 依赖项(pom.xml):

<!-- dependency to fix JSPServletException -->
    <dependency>
        <groupId>org.apache.tomcat</groupId>
        <artifactId>jsp-api</artifactId>
        <version>6.0.32</version>
        <scope>provided</scope>               
    </dependency>

如果您觉得它有用,请发表评论,因为它对我有很大帮助。

【讨论】:

添加提供的范围也可能很聪明,因为您的容器可能已经安装了它。 在上述maven依赖配置中的标签前添加一个“provided”(只是让Knubo的观点清楚) @MarkJosephDelRosario,这对different problem 也很有用。 为我工作,需要一个项目 --> 更新 pom 后清理 我很高兴这对某些人有用,但即使在 pom 更新后清理、重新运行 maven clean install 和刷新项目,甚至在取消检查所有验证器之后,我仍然得到奇怪的消息。我现在将尝试根据下面 Xander Plooy 的回答,使用更新版本的 STS 从头开始​​重新安装所有内容。【参考方案2】:

基于 cmets,我最终关闭了部分 JSP 验证,从而解决了这个问题。

    转到“项目->属性->验证”。 点击“配置工作区设置...”。 取消选择 JSP 语法验证器的选项(手动和构建)。

我希望我遗漏了一些东西并且有办法解决这个问题,但我不得不承认 JSP 验证是垃圾。

【讨论】:

JSP 文件很好,我更改了一些随机文本(甚至不是 JSTL 或 JSP 代码),突然间我到处都是红色的小波浪,在随机的地方(甚至没有在它们的代码下划线)抱怨)。当然,Rational Application Developer 不会让我将整个应用程序部署到服务器上,因为它认为存在错误。如此愚蠢。感谢您的修复。【参考方案3】:

我遇到了同样的问题,问题是 jsp-api 库,您可以将依赖项添加到您的 pom (如其他答案中所述),或者您也可以添加 target 运行时和 Eclipse 会自动将该库添加到您的类路径中:

Project -> Properties -> Targeted Runtimes 

然后选择你的服务器。

【讨论】:

我喜欢这个解决方案,因为它不需要我关闭 jsp 验证(IMO 用洗澡水把婴儿扔出去),也不需要我对 pom 进行更改将修改限制在我的本地设置中。谢谢!【参考方案4】:

为了修复: - javax.servlet.jsp.* 需要 jsp-api.jar - javax.servlet.http.* 需要 servlet-api.jar 您需要在项目设置中将这些库添加到 Java 构建路径。这些库可以在 tomcat/lib 目录中找到(对于 Tomcat 6.0)。

【讨论】:

【参考方案5】:

这是一个老问题,但我想我可能会提到我在 Mac OS X 上的 Juno 中也遇到了这个问题——尤其是在我从外部更改文件然后在 Eclipse 中刷新项目之后。在各种奇怪的地方加上下划线,甚至在 JSP cmets 中的单词中间。

可能(可能?!)与 bug 376926 相关,而 bug 376926 显然在一周前得到修复?

【讨论】:

【参考方案6】:

不应该部署的eclipse依赖的解决方案是添加UserLibrary容器,并将其包含在依赖项目中。

    创建目录,例如 /home/user*/eclipse-deps/ 并从 */tomcat/lib 目录复制 jsp-api.jar 在 Eclipse 中,转到项目属性-> 构建路径,并创建新的“UserLibrary”,例如。 IdeDeps。 在IdeDeps库中包含/home/user/eclipse-deps/,在所有依赖jsp-api.jar的项目中包含用户库 (在类路径中:

您可以对所有不应部署的 *.jar 执行此操作,但 eclipse 需要它来进行验证。

【讨论】:

【参考方案7】:

对于 Tomcat 7.0.x,您的 pom 中需要以下内容

<properties>
    <org.apache.tomcat.version>7.0.28</org.apache.tomcat.version>
</properties>

<dependencies>
    <dependency>
        <groupId>org.apache.tomcat</groupId>
        <artifactId>tomcat-jsp-api</artifactId>
        <version>$org.apache.tomcat.version</version>
        <scope>provided</scope>
    </dependency>
</dependencies>

【讨论】:

【参考方案8】:

尝试检查您的项目类路径。您的项目中似乎没有 JSP 库(因此“无法解析 JspException”),或者您的库版本与 JSP 编译器版本不同。

该库默认包含在您部署应用程序的应用程序服务器中,因此代码在部署时可以完美运行。但是,如果 Eclipse 内部编译器缺少库(或版本不正确),Eclipse 编辑器会显示应用服务器中不存在的错误。

【讨论】:

老实说,无论我添加什么 JAR,我总是从 Eclipse JSP 编辑器中得到这些错误 - 以及诸如下划线甚至在语法上不在一起的代码片段之类的东西。不要误会,我是 Eclipse 的忠实粉丝,但 JSP 编辑器根本没用。 啊!如果编辑器行为不端并且项目的构建路径按照 Vivien 的描述正确设置,请打开错误报告。【参考方案9】:

您需要在类路径中包含 jap-api.jar。

【讨论】:

【参考方案10】:

我遇到了同样的问题,最终通过(使用 Maven)切换到 servlet-api 的 2.3 版来解决问题:

<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>servlet-api</artifactId>
    <version>2.3</version>
    <scope>provided</scope>
</dependency>

显然 2.4 及更高版本不再内置 javax.servlet.jsp。如果您仍想使用 2.4 或更高版本,您也许可以在另一个包中找到该库。

【讨论】:

【参考方案11】:

我遇到了同样的问题,但是 jsp-api.jarservlet-api.jar 都已经在构建路径中了。禁用 JSP 语法验证器 也没有帮助。

相反,我不得不禁用 JSP 内容验证器,让语法验证器保持启用状态。我的 JSP 中仍然有带下划线的代码,但没有红叉表示编译错误,这就是重点:)

【讨论】:

在 Preferences > 验证下找到的 JSP 内容验证器。 (全局验证设置,不是 JSP 验证)【参考方案12】:

一个更简单的方法是

select the project -&gt; Properties -&gt; Java Build Path -&gt; Libraries Tab

选择add Libraries。从那里选择Server Runtime。它将列出您已配置的所有服务器运行时。从那里选择与您的项目相关联的服务器运行时。

这将重建并重新验证项目,并且所有这些鬼错误都将被删除。

希望这会有所帮助。

【讨论】:

【参考方案13】:

对我来说,当我手动输入该行时,在关闭标签之前出现了错误,但错误从未消失。我找到了一行类似的代码,我删除了有问题的代码,复制并粘贴了好的代码,然后根据需要在标签内进行了更改。没有更多的错误!!!不是一个理想的解决方案,但它对我有用。

【讨论】:

【参考方案14】:

在我转移到 Maven(使用 m2e)期间,我也看到了同样的问题,出现“javax.servlet.http 无法解决”之类的错误以及一些 Spring 标记未定义警告。最后我发现这是因为我的构建配置中的 java 版本(v1.6)与构面配置(v1.7)中的不同。将 v1.7 更改为 v1.6 后问题消失。

【讨论】:

【参考方案15】:

jsp-api.jar 添加到您的构建类路径中可以修复它。 jsp-api.jarcommon\lib 下,用于 tomcat 5.x

【讨论】:

【参考方案16】:

正如你们中的许多人所提到的,问题在于构建路径和缺少库。我找到了一个非常简单的解决这个构建路径问题的方法。这是解决方案: 在 Eclipse 中的“Java 构建路径”下,转到“订购和导出”选项卡,并确保选中“Apache Tomcat v7.0”库(或您使用 Eclipse 安装的任何版本的 Tomcat)。这立即解决了问题。其他任何事情都没有麻烦。 :-)

在这种情况下也不需要关闭任何验证。

【讨论】:

以上是关于神秘的 Eclipse JSP 验证错误的主要内容,如果未能解决你的问题,请参考以下文章

eclipse 无法打开JSP文件

Eclipse------新建文件时没有JSP File解决方法

为什么我的eclipse里没有JSP呢?在线!

eclipse插件lomboz中jsp editor无法启动

如何在 Eclipse helios 中禁用 JSP 验证?

Spring Boot JSP应用实例