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 位已自动添加,但只要我添加行我遇到了同样的问题,我只是将前缀 = "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 上运行?的主要内容,如果未能解决你的问题,请参考以下文章