Eclipse 需要哪些 JAR 文件才能使用 JSTL 才能最终在 GAE/J 上运行?

Posted

技术标签:

【中文标题】Eclipse 需要哪些 JAR 文件才能使用 JSTL 才能最终在 GAE/J 上运行?【英文标题】:What JAR files are needed for Eclipse to use JSTL so it ultimately works on GAE/J? 【发布时间】:2011-05-02 10:33:43 【问题描述】:

我一直在尝试让 JSTL 在 Eclipse 下工作(最终在 GAE/J 下)工作的时间比我想承认的要长。我已经下载了 Eclipse、Google App Engine Extension for Eclipse 和 JSTL(http://download.java.net/maven/1/jstl/jars/ - jstl-1.2.jar 在 WEB-INF\lib 目录中)。

我的代码和输出如下:

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<html><HEAD><TITLE>Test Page</TITLE></HEAD><BODY>
Test Page

<c:set var="myvar" value="3"/>

</BODY></HTML>

我得到的错误是:

The tag handler class for "c:set" (org.apache.taglibs.standard.tag.rt.core.SetTag) was not found on the Java Build Path 
test.jsp
[my app's path and name]
line 8
JSP Problem

从本页的最后一篇文章来看,我认为我不需要standard.jar (http://forums.sun.com/thread.jspa?threadID=701267),无论如何,我在Oracle download.java.com 网站上找不到一个和jstl jar 一起的.

编辑 4:现在可以使用 - 步骤: 1) 使用 Apache 版本 2)实际上在构建路径中包含jar文件(右键单击eclipse项目并点击属性-> Java构建路径->库->添加类文件夹...;war/WEB-INF/lib显然不在默认构建路径) 3) 将文件 c.tld 添加到 war/WEB-INF/tld

让你的 web.xml 看起来像:

<\?xml version="1.0" encoding="UTF-8"?>
<web-app 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">
<display-name>JSTLExample</display-name>
<welcome-file-list>
    <welcome-file>index.html</welcome-file>
</welcome-file-list>
<jsp-config>
    <taglib>
        <taglib-uri>http://java.sun.com/jstl/core</taglib-uri>
        <taglib-location>/WEB-INF/tld/c.tld</taglib-location>
    </taglib>
</jsp-config>  
</web-app>

测试jsp文件内容:

 <?xml version="1.0" encoding="UTF-8" ?>
 <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>

 <!-- Taglib -->
 <%@ taglib uri="http://java.sun.com/jstl/core" prefix="c" %>

 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
 <title>Test Apache ServiceMix with JSTL</title>
 </head>
 <body>

 This is a testpage.

 <%= "hello" %>
 <c:forEach var="i" begin="1" end="10" step="1">
 <c:out value="$i" />

 <br />
 </c:forEach>


 </body>
 </html>

【问题讨论】:

这很奇怪:我对 jstl.jar 也有同样的问题,如果我是从你说它工作的地方下载的。 【参考方案1】:

将 jstl-1.2-sources.jar 添加到您的 Tomcat\lib 目录中

【讨论】:

嗨,也许你可以详细说明你的答案。【参考方案2】:

Apache 中的 taglibs-standard-impl-1.2.5 添加到项目的构建路径中。这可能会解决问题。

【讨论】:

taglibs-standard-impl-1.2.5是否等于jstl.jar?【参考方案3】:

确保您的 web.xml 根声明至少符合 Servlet 2.4。

<web-app
    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"
    version="2.4">

    <!-- Config here. -->

</web-app>

或者如果你的 servletcontainer 支持它,更喜欢 2.5:

<web-app 
    xmlns="http://java.sun.com/xml/ns/javaee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
    version="2.5">

    <!-- Config here. -->

</web-app>

O如果支持最新版本3.0

<web-app 
    xmlns="http://java.sun.com/xml/ns/javaee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
    version="3.0">

    <!-- Config here. -->

</web-app>

否则一切都会退回到最不支持的模式,标签库可能会像那样中断。

还要确保在类路径(/WEB-INF/lib 文件夹等)中没有松散的tld 文件,它们会与 JAR 文件中的文件发生冲突。哦,还要确保你没有手动定义web.xml中的tlds,保持干净。

【讨论】:

嗯,当我这样做时,我得到了一个额外的错误:必须为元素类型“web-app”声明属性“xsi:schemaLocation”。必须为元素类型“web-app”声明属性“xmlns”。必须为元素类型“web-app”声明属性“xmlns:xsi”。必须为元素类型“web-app”声明属性“version”。 去掉那个 DOCTYPE。这是 Servlet 2.3 特有的。 还是同样的错误;我创建了一个新项目(这次不支持 GWT - 只是 GAE)并且您建议的 web.xml 位已自动添加,但只要我添加行 我得到同样的错误... 你声明它是 servlet 2.4 还是 2.5?您的编辑模棱两可。 servletcontainer 支持哪个版本?您应该声明 web.xml 以匹配 servletcontainer 的最大支持版本。 JSTL 1.2 是为 Servlet 2.5 设计的,但当 servletcontainer 在技术上支持 2.5 时,它确实适用于 Servlet 2.4。如果 servletcontainer 在技术上不支持高于 Servlet 2.4 的版本,则需要退回到 JSTL 1.1。它可用here。它由 lib 中的两个 JAR 文件组成:jstl.jar 和standard.jar。 对不起,我没有先删除旧的。我尝试使用 2.4 和 2.5,并尝试先将两者都添加到 web.xml,然后再添加到 appengine-web.xml,但都没有成功。如果我运行它,我仍然会收到相同的错误和空指针异常。我正在考虑尝试 Apache 实现(我认为 java.net 上的那个是 Sun/Oracle 的 - 也许它与我的 Eclipse 版本和 Google-GAE 插件不兼容)。【参考方案4】:

我遇到了同样的问题,我只是将前缀 = "c" 放在 taglib 定义的末尾

之前:

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

之后:

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

所有警告都会从 Eclipse 中消失。

【讨论】:

那不可能。任何订单都可以 它对我有用!这应该是 Eclipse 的错误吗? 在交换属性一次后,如图所示,即使将项目恢复到原始位置,警告也消失了。绝对是 Eclipse 中的一个错误,或者任何对这些文件产生影响的东西。 @cjm 没错!我有同样的问题,只是通过改变标签的位置来解决它,是的,一旦你改变了它,这两种组合都可以工作:D【参考方案5】:

你只需要在你的 Maven POM 中指定这个依赖:

<dependency>
    <groupId>jstl</groupId>
    <artifactId>jstl</artifactId>
    <version>1.2</version>
</dependency>

在我的代码中,这提供了以下 JSP taglib 工作所需的一切:

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

【讨论】:

这对我有用,(我在答案中提到了所有其他的东西)【参考方案6】:

据我所知,您需要 jstl.jar 和 standard.jar。将它们放在 WEB-INF/lib 下。

【讨论】:

以上是关于Eclipse 需要哪些 JAR 文件才能使用 JSTL 才能最终在 GAE/J 上运行?的主要内容,如果未能解决你的问题,请参考以下文章

javaweb 导出excel需要哪些jar包

java实现生成导出pdf文件需要哪些jar包

eclipse中怎样将项目打包成jar

hibernate开发需要导入哪些jar包

我有一个外部可执行 jar 文件,我希望使用 Eclipse 编辑其中的 java 文件

java 怎么把多个jar打包成一个jar来使用??