JSTL存在这个问题我在过去的几天里一直坚持下去。任何帮助表示赞赏。
Tomcat 6.0.28
Eclipse:Helios
pom.xml:
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<version>1.1.2</version>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.4</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>taglibs</groupId>
<artifactId>standard</artifactId>
<version>1.1.2</version>
</dependency>
<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>jsp-api</artifactId>
<version>2.0</version>
<scope>provided</scope>
</dependency>
JSP:
<%@ page session="true"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<%@ taglib prefix="utilfn" uri="/utility-functions" %>
的web.xml:
<web-app id="WebApp_ID" version="2.4"
xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
当我使用管理器在tomcat 6上部署Maven构建的战争时,它可以正常工作。 当我在eclipse中运行它作为“Run As&gt; Run On Server”时,我得到了这个:
无法从JAR文件“file:/&lt; - location - &gt; /。metadata / .plugins / org.eclipse.wst.server.core / tmp0 / wtpwebapps”中读取TLD“META-INF / c.tld” /Myproject/WEB-INF/lib/standard-1.1.2.jar“:org.apache.jasper.JasperException:无法加载或实例化TagLibraryValidator类:org.apache.taglibs.standard.tlv.JstlCoreTLV
无论我在哪里,都说同样的事情:
- 确保servlet-api和jsp-api不在lib
中- 确保使用与JSP 2.0一致的正确JSTL版本和URI。
醇>
他们似乎很好,因为我可以独立部署战争。那么这里有什么问题!?
答案 0 :(得分:16)
在我使用Indigo Eclipse 3.7移动并接受m2e的持续更新后,我遇到了这个问题,我删除了它下面的依赖项。
<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>jsp-api</artifactId>
<version>2.1</version>
<scope>provided</scope>
</dependency>
我不确定为什么这些问题消失了,因为我理解m2e的新版本已经有了jsp编译库。
答案 1 :(得分:6)
删除:
javax.servlet.jsp
JSP-API
2.0
提供
应该做..它在我的情况下工作: - )
答案 2 :(得分:5)
看起来maven / m2eclipse插件存在问题。即使我看到同样的问题。默认情况下,它将所有jar文件推送到服务器lib目录。其中包括范围“提供”的jar文件。在旧版本的m2eclipse中修复了此问题。但它似乎又被引入了。
答案 3 :(得分:4)
检查一下
.metadata/.plugins/org.eclipse.wst.server.core/tmp0/wtpwebapps/Myproject/WEB-INF/lib/standard-1.1.2.jar
未损坏(如果需要,请进行一些清理)。
答案 4 :(得分:2)
<强>的QuickFix:强>
备份.classpath和.project以及.settings / org.eclipse.wst.common.component。
运行此命令:
mvn eclipse:eclipse
或者右键单击项目,在 Maven 子菜单中,您有一个更新项目... 命令我认为做同样的事情。
重新发布。
<强>解释强>
您可能已将所有Maven依赖项添加为项目的部署程序集。这会将所有Maven类路径条目复制到WEB-INF / lib目录。打开.classpath文件(在项目的根目录下),您可能会找到以下XML:
<classpathentry kind="con" path="org.maven.ide.eclipse.MAVEN2_CLASSPATH_CONTAINER">
<attributes>
<attribute name="org.eclipse.jst.component.dependency" value="/WEB-INF/lib"/>
</attributes>
</classpathentry>
这意味着复制EVERY .jar文件,在这种情况下会成为问题。
更新项目应删除上面的XML块并明确列出JAR文件。
所以,如果你重新打开.classpath,你会看到这个:
<classpathentry kind="var" path="M2_REPO/com/google/code/gson/gson/2.2.1/gson-2.2.1.jar" sourcepath="M2_REPO/com/google/code/gson/gson/2.2.1/gson-2.2.1-sources.jar"/>
<classpathentry kind="var" path="M2_REPO/javax/servlet/jsp/jsp-api/2.1/jsp-api-2.1.jar" sourcepath="M2_REPO/javax/servlet/jsp/jsp-api/2.1/jsp-api-2.1-sources.jar"/>
...
这是针对您仍然需要的类路径,但它删除了将它们复制到lib的依赖项。相反,如果打开.settings / org.eclipse.wst.common.component /,您将看到现在明确列出了JAR文件:
<dependent-module deploy-path="/WEB-INF/lib" handle="module:/classpath/var/M2_REPO/com/google/code/gson/gson/2.2.1/gson-2.2.1.jar">
<dependency-type>uses</dependency-type>
</dependent-module>
而且,你会注意到现在缺少jsp-api-2.1.jar。将相同的逻辑应用于其他JAR文件。
有谁知道怎么做这个?
答案 5 :(得分:0)
平台:eclipse 3.7 indigo,tomcat 6.0.29
在pom.xml中注释掉了以下依赖项:
javax.servlet
org.apache.taglibs
这解决了问题(因为它们是通过tomcat提供的)......
答案 6 :(得分:0)
我同意杰伊的回答。我在这里有同样的问题。如果我从pom.xlm中删除jsp-api,maven测试将失败,因为它无法在jsp-api jar中找到jspWriter类。如果我将jsp-api保存在pom中并将其设置为'provided'或'test',则tomcat端将失败,因为m2e插件将jsp-api jar推送到maven依赖项,然后将其包含在我的tomcat部署的lib中。我会说这是插件问题,因为jsp-api必须在提供的pom.xml中声明,因为它是由应用程序服务器提供的。 我找不到任何解决此问题的方法,但每次在tomcat服务器同步后手动删除jsp-api。
答案 7 :(得分:0)
使用Eclipse,请确保您安装了适用于Eclipse的Maven Integration WTP &#39; 使用没有WTP的其他插件,eclipse会更改您的类路径并在您的webapps中包含servlet-api.jar。
答案 8 :(得分:0)
您必须在pom.xml中从jstl import中排除jsp-api依赖项:
<dependency>
<groupId>javax.servlet.jsp.jstl</groupId>
<artifactId>jstl-api</artifactId>
<version>1.2</version>
<exclusions>
<exclusion>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
</exclusion>
<exclusion>
<artifactId>jsp-api</artifactId>
<groupId>javax.servlet.jsp</groupId>
</exclusion>
</exclusions>
</dependency>
答案 9 :(得分:0)
从中删除了jsp-api 2.0 .metadata / .plugins / org.eclipse.wst.server.core / TMP0 / wtpwebapps / MYPROJECT / WEB-INF / LIB / 这对我有用。
答案 10 :(得分:0)
我在netbeans IDE 8.0.2中遇到了同样的错误。事实证明我的部分被设置为8080用于传出和关闭。我将Tomcat服务器的传出更改为8081。有效!然后我更改了关机端口8005.要更改,请转到工具&gt;服务器&gt;
我的tomcat服务器现在正常运行。