gpt4 book ai didi

java - JSTL 在 GoogleAppEngine 的开发服务器上中断,但可以在远程服务器上运行

转载 作者:行者123 更新时间:2023-12-02 00:45:51 24 4
gpt4 key购买 nike

正如标题所示,我的 JSTL 标签无法在我的开发服务器上工作,但可以在 Google 的实际服务器上工作。

我将代码简化为最基本的,以确保代码没有任何问题,所以这就是我所得到的。

JSP

<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1" isELIgnored="false"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Page Title</title>
</head>
<body>
<c:choose>
<c:when test="${2+2==4}">sum works</c:when>
<c:otherwise>sum doesn't work</c:otherwise>
</c:choose>
</body>

我的配置如下(我认为这是正确的并且可以在 Google 的服务器上运行): 我正在使用

  • Eclipse 集成开发环境
  • Servlet 2.5
  • 没有将 jSTL jar 添加到 WEB-INF\lib
  • 没有在任何地方添加顶级域名
  • 没有标签库引用

在 web.xml 上

但是,我也尝试了以下多种组合,但没有一个起作用:

  • jSTL-1.2.jar 添加到构建路径
  • c.tld 添加到 WEB-INF
  • taglib 引用已添加到 web.xml

错误如下:

HTTP ERROR 500
Problem accessing /index.html. Reason:

javax/servlet/jsp/tagext/TagSupport

Caused by:

java.lang.NoClassDefFoundError: javax/servlet/jsp/tagext/TagSupport
at java.lang.ClassLoader.findBootstrapClass(Native Method)
at java.lang.ClassLoader.findBootstrapClassOrNull(ClassLoader.java:927)
at java.lang.ClassLoader.loadClass(ClassLoader.java:298)
at com.google.appengine.tools.development.DevAppServerClassLoader.loadClass(DevAppServerClassLoader.java:87)
at java.lang.ClassLoader.loadClass(ClassLoader.java:248)
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClassCond(ClassLoader.java:632)
at java.lang.ClassLoader.defineClass(ClassLoader.java:616)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:141)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:283)
at java.net.URLClassLoader.access$000(URLClassLoader.java:58)
at java.net.URLClassLoader$1.run(URLClassLoader.java:197)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
at com.google.appengine.tools.development.DevAppServerClassLoader.loadClass(DevAppServerClassLoader.java:87)
...

但奇怪的是,<c:out value="${blah}"/>适用于开发服务器和远程服务器。其他核心标签不起作用。如果我尝试添加 fmt 标签,它们就不起作用。

有什么想法吗?

最佳答案

您需要将 JSTL JAR 放入 /WEB-INF/lib 中,或者至少放入您在本地开发中使用的 servletcontainer 的 /lib 文件夹中。

您不应该提取 JAR 并使用松散的 TLD 文件来扰乱 Web 应用程序,也不应该在 web.xml 中的任何位置引用它。撤消所有操作(如果已完成)。您也不应该需要手动将其添加到 Eclipse 构建路径。只需放入 /WEB-INF/lib 文件夹就足够了。

另请参阅:

关于java - JSTL 在 GoogleAppEngine 的开发服务器上中断,但可以在远程服务器上运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5025384/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com