Eclipse(Helios)偶尔会将有效的JSP内容标记为有错误。当我使用< c:if>时,它似乎经常会中断。标签。例如,在仅包含此内容的JSP中:
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<body>
<c:if test="${1 == 1}">
something
</c:if>
</body>
</html>
编译后,“问题”标签中显示以下错误:
代码运行正常。对JSP的验证是否存在问题,我是否遗漏了一些明显的问题,或者是否表明某些内容未正确设置。
答案 0 :(得分:45)
好吧,我找到了如何解决这个错误。 将其添加到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>
如果您觉得它有用,请发表评论,就像它帮助我一样。
答案 1 :(得分:36)
根据评论,我最终关闭了部分JSP验证,修复了这个问题。
我希望我错过了一些东西并且有办法解决这个问题,但我不得不承认JSP验证是垃圾。
答案 2 :(得分:21)
我遇到了同样的问题,问题是jsp-api
库,您可以将依赖项添加到 pom (如其他答案中所述),或者您也可以添加 target 运行时,eclipse会自动将该库添加到您的类路径中:
Project -> Properties -> Targeted Runtimes
选择您的服务器。
答案 3 :(得分:5)
为了解决问题:
- javax.servlet.jsp。*需要jsp-api.jar
- javax.servlet.http。*需要servlet-api.jar
您需要在项目设置中将这些库添加到Java Build路径。这些库可以在tomcat / lib目录中找到(对于Tomcat 6.0)。
答案 4 :(得分:3)
这是一个老问题,但我想我可能会提到我在Mac OS X上的Juno中也是这样 - 特别是在我从外部更改文件然后在Eclipse中刷新项目之后。在各种奇怪的地方都有下划线,甚至是JSP评论中的单词。
可能(可能?!)与bug 376926有关,这显然在一周前得到了修复?
答案 5 :(得分:2)
不应部署的eclipse依赖项解决方案是添加UserLibrary容器,并将其包含在依赖项目中。
你可以为所有不应该部署的* .jars做到这一点,但是eclipse需要它来进行验证。
答案 6 :(得分:2)
对于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>
答案 7 :(得分:1)
尝试检查项目类路径。看起来您的项目中没有JSP库(因此无法解析“JspException”),或者您的库版本与JSP编译器版本不同。
默认情况下,该库包含在您部署应用程序的应用程序服务器中,因此代码在部署时运行良好。但是,如果Eclipse内部编译器缺少库(或者版本不正确),Eclipse编辑器会显示应用程序服务器中不存在的错误。
答案 8 :(得分:1)
我遇到了同样的问题,并最终通过切换(使用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或更高版本,则可以在另一个包中找到该库。
答案 9 :(得分:1)
您需要在类路径中包含jap-api.jar。
答案 10 :(得分:1)
更简单的方法是
select the project -> Properties -> Java Build Path -> Libraries Tab
选择add Libraries
。从那里选择Server Runtime
。它将列出您已配置的所有服务器运行时。从那里选择与项目相关的服务器运行时。
这将重建并重新验证项目,并且将删除所有这些重影错误。
希望这有帮助。
答案 11 :(得分:0)
将jsp-api.jar
添加到构建类路径中会修复它。对于tomcat 5.x
jsp-api.jar
位于common\lib
下
答案 12 :(得分:0)
我在转移到Maven(使用m2e)时也看到了同样的问题,得到的错误如“javax.servlet.http无法解析”和一些Spring标签未定义的警告。最后我发现它是因为我的构建配置中的java版本(v1.6)与facet配置(v1.7)中的版本不同。在将v1.7更改为v1.6之后,问题就消失了。
答案 13 :(得分:0)
我遇到了同样的问题,但 jsp-api.jar 和 servlet-api.jar 都已在构建路径中。禁用 JSP语法验证器也没有帮助。
相反,我必须禁用 JSP内容验证器,并启用语法验证程序。我仍然在我的JSP中加下划线代码,但没有红叉表示编译错误,这就是重点:)
答案 14 :(得分:0)
正如你们许多人所提到的,问题在于构建路径和缺少的库。我发现了一个非常简单的修复此构建路径问题。这是解决方案: 在&#39; Java Build Path&#39;在日食中,去订购和出口&#39;选项卡,并确保“Apache Tomcat v7.0&#39;库(或使用eclipse安装的Tomcat的任何版本)都会被检查。这可以立即解决问题。没有别的麻烦。 : - )
在这种情况下也无需关闭任何验证。
答案 15 :(得分:0)
对我来说,当我手动输入行时,我收到错误,直到我关闭了标记,但错误从未消失。我发现了一行类似的代码,我删除了有问题的代码,复制并粘贴了好的代码,然后根据需要在标记内部进行了更改。没有更多的错误!不是一个理想的解决方案,但它对我有用。